gpt4 book ai didi

sqlite - 延迟事务中第一次写入何时发生?

转载 作者:行者123 更新时间:2023-12-01 16:30:18 26 4
gpt4 key购买 nike

在 SQLite 文档中,它指出:

Deferred means that no locks are acquired on the database until the database is
first accessed. Thus with a deferred transaction, the BEGIN statement itself
does nothing to the filesystem. Locks are not acquired until the first read or
write operation.

但是第一次读取或写入实际上是什么时候发生的?假设我启动一个延迟事务,然后执行一系列 INSERT 或 UPDATE,然后执行 COMMIT。我是否正确地认为,在我实际提交之前不应发生第一次写入,或者写入可能会在此之前发生?

我基本上希望允许多个线程执行由多个插入或更新组成的事务,而不可能阻塞其他线程(由于设计的方式,如果发生这种情况将会出现死锁)。我不关心线程之间插入/更新的顺序,只关心每组插入/更新作为单个事务同时完成。

最佳答案

第一次读取发生在您实际从数据库中读取内容时。第一次写入可以晚于 COMMIT 发生,如果数据库无法缓存那么多数据,则可以更早发生。

为了防止死锁,您可能需要使用 BEGIN IMMEDIATE而不是默认的 DEFERRED。

当 SQLite 发现数据库被锁定时,它只是休眠一段随机的时间,然后重试。如果您的访问全部来自同一进程,则您可以通过在所有写入事务周围使用互斥体来消除无用的等待并增加并发性。

关于sqlite - 延迟事务中第一次写入何时发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23379644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com