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

碧玉蓝调

我在sqlite数据库的顶部有一个数据访问对象(DAO)。该DAO具有:

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

碰巧有一些争论:

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

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

原因是我们将FMDB Objective-C包装器用于sqlite。并且它具有到数据库的同步队列,以确保线程安全。

是否有一种通用的方法来使sqlite的读取优先于写入,尤其是对于FMDB?

斯科特·科斯卡登(Scott Corscadden)

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

如果读数组永远不会清除,那么这确实会陷入诸如写饥饿之类的有趣情况,但是,嘿,并发生命是这样吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章