MATLAB与SQLite的接口支持并发吗?

uqzxnwby  于 2023-02-13  发布在  Matlab
关注(0)|答案(1)|浏览(269)

SQLite作为一个数据库支持不同程度的并发,这取决于版本和设置,因此我希望数据库工具箱中的MATLAB接口SQLite支持一定程度的并发。当数据库访问失败时,它至少应该显示错误。
但是,当我使用下面的sniplet时,

conn=sqlite("sqlite_concurr_test.db","create");
conn.close();
ppool=parpool(4);
ff=parallel.Future.empty();
disp("Write 500 numbers")
for ii=1:500
    ff(ii)=parfeval(ppool,@writeOne,0,ii);
end
for ii=1:500
    ff(ii).wait()
end
delete(ppool);
conn=sqlite("sqlite_concurr_test.db");
readback=conn.sqlread("test");
disp("Readback "+num2str(size(readback,1))+" numbers");

function writeOne(ii)
    conn=sqlite("sqlite_concurr_test.db");
    conn.sqlwrite("test",array2table(ii));
    conn.close();
end

我得到了意想不到的结果
正在使用"进程"配置文件启动并行池(parpool)...
已连接到并行池(工作进程数:四)。
写500个数字
正在关闭使用"进程"配置文件的并行池。
回读74个数字
这表示某些数据库写入没有发生,并且没有错误报告。要更改此行为,我可以做些什么?要确保并行访问,或者至少在出现错误时收到通知,我应该做些什么?

xzabzqsa

xzabzqsa1#

无论sqlite3数据库连接的配置如何,你只能有一个并发写入器。在wal模式下,你可以有一个写入器同时运行多个读取器。在你的代码示例中,无论这个语句做什么conn.sqlwrite("test",array2table(ii));,你都不会检查返回的错误。所以你可能在并发写入时有错误,但实际上你没有检测到它们。

相关问题