2

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

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

碰巧有一些争论:

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

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

这样做的原因是我们使用 FMDB 目标 C 包装器到 sqlite。它有一个到数据库的同步队列,以确保线程安全。

有没有一种通用的方法来优先考虑 sqlite 读取而不是写入,尤其是使用 FMDB?

4

1 回答 1

1

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

如果读取数组永远不会清除,这确实会进一步进入有趣的情况,例如写饥饿,但是嘿,这就是并发生活吧?

于 2014-10-09T12:48:57.683 回答