在Objective-C sqlite dao中读取优先级

时间:2013-11-05 12:45:34

标签: ios objective-c sqlite fmdb

我在sqlite数据库之上有一个数据访问对象(DAO)。这个DAO有:

  • 读取方法 - 根据某些条件列出或检索项目。
  • 保存方法。

碰巧有一些争论:

  • 有一个后台索引服务,它在后台队列上写入数据库。
  • 有一个后台服务可以在后台队列中加载图像记录的缩略图。

现在,我们注意到如果索引服务正在运行,那么图像缩略图的读取速度明显变慢。

原因是我们正在使用FMDB Objective-C包装器来实现sqlite。它与数据库有一个同步队列,以确保线程安全。

是否有一种通用的方法来优先处理sqlite读取,特别是使用FMDB?

1 个答案:

答案 0 :(得分:1)

根据您打开数据库的方式(即:.shm和.wal并发),现在这可能不是问题了?否则,一个选项可能是添加你自己的抽象(即:JBReadWriteDatabaseQueue),它在内部同时具有读取和写入块数组(或它们自己的队列)。然后它可以公开readInDatabase:writeInDatabase之类的方法,如果没有运行,可以将块直接传递给fmdb队列,如果它正在运行则存储它们。完成当前的fmdb块后,如果有条目,则此类可以优先从读取块数组中进行选择。

如果读取数组永远不会清除,那么这会进一步变成有趣的情况,比如写入饥饿,但是嘿,这就是并发生活吗?