MATLAB 的 SQLite 接口支持并发吗?

问题描述 投票:0回答:2

SQLite 作为数据库支持不同程度的并发,具体取决于版本和设置,因此我预计数据库工具箱中 SQLite 的 MATLAB 接口将支持某种程度的并发。当数据库访问失败时,它至少应该显示错误。

但是,当我使用以下代码片段时,

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)...

连接到并行池(工作人员数量:4)。

写500个数字

使用“进程”配置文件的并行池正在关闭。

回读74个数字

这表明没有发生某些数据库写入,并且没有错误报告。 我可以做什么来改变这种行为?我应该做些什么来确保并行访问,或者至少在出现问题时收到通知?

matlab sqlite concurrency
2个回答
1
投票

无论您的 sqlite3 数据库连接的配置如何,您只能有一个同时写入器。使用 wal 模式,您可以让单个编写器与多个读取器同时运行。在您的代码示例中,无论此语句执行什么操作,您都不会检查返回的错误(如果有)。所以你可能在并发写入时遇到错误,但你实际上没有检测到它们。

    


0
投票
发送结果

以写回客户端。 conn.sqlwrite("test",array2table(ii));

© www.soinside.com 2019 - 2024. All rights reserved.