现在遇到一个问题,数据库是基于系统的sqlite写的,没有使用第三方库,项目现在处于维护阶段,需要优化。有个列表一次性会获取1000多条数据,每条数据都需要与本地的数据先比较下,如果没有则添加,如果有了就更新,如果标志为删除则删除。现在的做法是直接遍历这1000多条数据,分别进行操作,但是耗时比较大。考虑使用GCD的多线程处理,但是现在的数据库操作是非线程安全的,使用GCD就直接挂了,求解如何更好的处理?(因为处理维护阶段,不想替换为FMDB,工作量较大)或者如何是现在的数据库操作变为线程安全的?
请你用谷歌:
site: stackoverflow.com sqlite thread safe
这两篇都很不错的
http://stackoverflow.com/questions/6675240/is-sqlite-database-instance-thread-safe
http://stackoverflow.com/questions/11058098/interprocess-sqlite-thread-safety-on-ios
把取回来到数据结合业务逻辑,让join成为可能,然后放到一个临时表,然后join现有的表,条件匹配exists就update,不能匹配就插入,如果标记删除就删除。
sqlite貌似没merge语句,所以你得写3个sql完整更新/插入和删除这3个操作
逐个记录做那是谋杀系统!我负责的数据库单表几十亿记录,每天更新1000万,如果我按照你这样做,我们的集群服务器无论多少台都要哭啊