首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQLite中保持读事务长时间开放可以吗?

在SQLite中保持读事务长时间开放可以吗?
EN

Stack Overflow用户
提问于 2016-03-28 06:02:38
回答 1查看 308关注 0票数 0

读取事务:https://www.sqlite.org/isolation.html

我们假设WAL是启用的,这样我们就可以在一个脚印中阅读,而另一个正在编写。

我想要实现的是这样的东西。

我有两个线程,一个是有时执行db读取的UI线程,另一个是在事务中执行db读/写的db线程。

UI线程中的结果是缓存的,有时有不完整的信息,比如对于一个列表,我们只查询列表的大小,或者只查询该查询的前10项,然后当UI到达该部分时,我们会以更多的方式加载。

在db线程上,我们将执行事务并记住所有更改,然后post (UI线程是一个活套线程)对UI线程的更改并增量地更新UI缓存,以便它尽可能少地阻塞UI线程。

问题是,当db事务完成时,UI线程可能会在活套线程处理该消息之前触发UI线程上的DB读取,也由于UI框架工作的某些限制,我们无法更新缓存,因为UI线程目前正在使用它。

所以我的想法是在UI线程上,在任何查询发生之前,开始一个读事务(在延迟模式下开始一个事务,这个事务不会锁定数据库,因为没有写),然后UI线程中发生的任何读取都会发生在这个事务中,然后活套线程获得更新信息,结束事务,更新缓存,然后开始另一个。因此,数据库和缓存在UI线程中被转换为新的状态,并且是同步的。

所以,我能让一个读事务打开很长时间吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-28 06:55:00

所有读取都在事务中完成(如果需要,自动读取),所有事务都锁定数据库。但是,WAL模式中的只读锁只阻塞检查点操作.

拥有一个长时间的活动事务是没有问题的,只要不断增长的WAL文件不会溢出磁盘。如果您需要为您的应用程序正确工作的事务,您没有选择无论如何-替代将是实现一些类似的事务机制,更好地让数据库处理这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36256862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档