提问人:lowtech 提问时间:10/26/2023 更新时间:10/26/2023 访问量:73
我可以在只读模式下打开 duckdb 文件,而其他进程写入同一个数据库文件吗?
can I open duckdb file in read-only mode while other process writing to the the same database file?
问:
我正在运行简单的脚本,该脚本创建数据库文件,创建表并插入该表(见下文)。
在脚本运行时,我正在尝试使用 duckdb cli 工具以只读身份连接到同一个数据库文件。
duckdb -readonly db.db
它给了我错误:Error: unable to open database "db.db": IO Error: Could not set lock on file "db.db": Resource temporarily unavailable
是 duckdb 的错误还是功能?谁能从 duckdb 的角度解释“只读”的含义?
import duckdb, time
import numpy as np
if __name__ == "__main__":
conn = duckdb.connect("db.db", read_only = False)
conn.sql("create table if not exists quotes (ts float, bid float, ask float)")
ts = 0
mq = 20000.0
ts = 0
while True:
mq += np.random.rand()
conn.execute("insert into quotes values(?, ?, ?)", [ts, mq - 100, mq + 100])
ts += 1
time.sleep(1)
conn.close()
答:
1赞
keraion
10/26/2023
#1
这是 DuckDB 的设计决策。
DuckDB 如何处理并发?
DuckDB 有 2 个可配置的并发选项。1.一个进程可以同时读取和写入数据库。2. 多个进程可以从数据库中读取,但没有进程可以写入 (access_mode = 'READ_ONLY')。使用选项 1 时,DuckDB 确实支持使用 MVCC(多版本并发控制)和乐观并发控制(见下文)组合的多个写入器线程,但所有这些都在该单个写入器进程中。
因此,您可以让多个只读进程读取数据库,但当数据库是可写时,只能读取一个连接。它是对整个数据库进行读取和写入的独占锁。
评论
0赞
lowtech
10/26/2023
感谢您快速解决这个问题
评论