SQLite and checkout semantic
SQLite and checkout semantic
我开始研究如何使用SQLite。我想做的(以及其他事情)是实现某种类型的checkout语义。也就是说,如果一个sql连接对一列或一行进行了签出锁定,那并不重要。我不希望其他连接被允许读取或修改该数据,直到第一个连接释放锁定或第一个连接关闭/应用程序崩溃等
这可以在SQLite中实现吗?
/提前感谢!
SQLite并不是真正为高并发性而设计的,它的锁定模型是在数据库级别进行锁定。如果您需要记录级别的锁定(大多数情况下不需要),那么您需要一个基于服务器的RDBMS。
数据库通常并不真正支持签出语义。数据库保证事务隔离,但由于它们不能保证事务成功,因此可以让另一个事务使用另一个刚刚修改(尚未提交)的旧版本数据进行处理,如果事务实际上变得不可序列化,则只回滚一个。即使他们确实使用了锁定,他们仍然不明确地支持它。你读了一行,它就变成了读锁定,如果你写了它,它就会变成写锁定,但你对它没有任何控制
当您开始在事务中写入时,Sqlite尤其会锁定整个数据库,除非处于WAL模式。您可以通过使用begin immediate
而不是仅使用begin
启动事务来强制锁定。然而,在WAL模式中,它支持某种并发性。不幸的是,我不知道确切的模式。
无论如何,您可能最终不得不自己实现签出语义。或者不用它,因为必须处理过时的签出,所以签出语义相当复杂。
相关文章:
- "-fno-semantic-interposition"与"-fvisibility=p
- Semantic of `string.length()`?
- 使用 Git init、fetch 和 checkout 克隆 Git 存储库
- 如何在 libgit2 中设置结帐选项以使其表现得像"git checkout"
- C++什么是价值语义类?我看到类似"This component implements a fully value-semantic container class"类描述
- GCC 5.3 中的新选项:-fno-semantic-interposition
- Rcpp and move semantic
- 提升精神:"Semantic actions are evil"?
- C++11 memory_order_acquire and memory_order_release semantic
- Qt Creator + git checkout +完全重新编译
- 解析 Linux 内核文件时"Idle Service Error semantic-idle-summary-idle-function - Arithmetic error" cedet 语义错误
- SQLite and checkout semantic