Dav*_*rtz 8 sqlite multithreading
相关问题:如何在多线程应用程序中使用SQLite.
我一直试图在多线程程序中从SQLite3中获得不错的性能.除了写入延迟之外,我对它的性能印象非常深刻.这不是它的错,它必须等待磁盘旋转才能提交数据.但是在这些写入期间阻塞读取,即使它们可以从缓存中读取,也是非常难以忍受的.
我的用例涉及大量的小型读取操作,以通过索引字段获取一个小对象,但延迟对于这些操作很重要,因为它们有很多.写入很大并且累积到单个事务中.由于完成写入,我不希望读取具有巨大的延迟.
我首先使用单个连接与互斥锁来保护它.但是,当写入线程正在等待事务完成时,读取器在磁盘I/O上被阻止,因为在编写器释放它之前它们无法获取互斥锁.我尝试使用多个连接,但后来我得到SQLITE_LOCKED了sqlite3_step,这意味着必须重新设计所有的阅读代码.
我的写逻辑目前看起来像这样:
START TRANSACTIONEND TRANSACTION - 这是它阻止的地方有什么解决方案我不知道吗?如果条目在缓存中而不必重写所有读取代码来处理SQLITE_LOCKED,重置和重试,是否有一种简单的方法可以让我的读者不必等待磁盘完成旋转?
| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |