gpt4 book ai didi

ruby-on-rails - 如何通过ActiveRecord从多个线程写入SQLite3?

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

我想从多个线程写入同一个SQLite3表,这引发了一个异常:

A, ActiveRecord:     (0.2ms)     begin transaction
B, ActiveRecord: (0.1ms) begin transaction
A, ActiveRecord: SQL (0.6ms) INSERT INTO "actions" ..
A, ActiveRecord: (46.6ms) commit transaction
B, ActiveRecord: SQL (5090.3ms) INSERT INTO "actions" ..
B, ActiveRecord: SQLite3::BusyException: database is locked: INSERT INTO "actions" ...

好吧,我相信能理解正在发生的事情。数据库不能再保持其外观状态,因为仍然有一个事务处于打开状态。

我如何确保一次只能进行一次交易?也许有一个解决方案,我每次开始新交易时都不必检查。

我应该设计不同吗?有没有简单的解决方案将事务放在单独的线程中排队?你有什么建议?

最佳答案

sqlite不支持并发,您应该在连接规范上使用锁定或尝试超时

dev_sqlite:
adapter: sqlite3
dbfile: db/dev.db
timeout: 15000

然后,只有在花费15分钟以上的时间才能获得db连接时,才会获得BusyException。

关于ruby-on-rails - 如何通过ActiveRecord从多个线程写入SQLite3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704500/

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