我写了一个使用sqlite3的.dll。它有一个插入函数,可以在数据库上执行插入。
我还有一个使用dll执行插入的测试可执行文件。现在我正在测试sqlite及其管理多个连接的能力。测试程序插入无限循环,伪代码如下所示:
while(1) {
openDb();
doInsert();
closeDb();
}
基本上我已将其设置为运行4个版本的测试应用程序,每个版本都会在数据库中插入一个字母(a,b,c或d)。
现在,这不起作用,因为数据库几乎总是被锁定。它可以正常使用一个或两个,但如果我运行所有4个程序,它就像我创建一个大的竞争条件一样。
我查看了文档,并且我已经按照此处指定的SQLITE_OPEN_FULLMUTEX等内容进行了处理:http://www.sqlite.org/c3ref/open.html
sqlite3是否提供了一种机制来处理多个exe试图一次写入同一个DB?或者我只是在我的负载测试中过于努力地推送sqlite?我是否需要编写自己的连接池?
对此事的任何帮助都会很棒。感谢。
答案 0 :(得分:2)
如果你关心你得到的发行版,那么你需要编写代码,这些代码不会增加十亿分之一而不添加任何b。您编写的代码不符合您的要求。这不是sqlite的错。如果你不想写1000个而不是b,那么就不要这样做。
您可以保证的是,数据库将取得进展。这取决于你的代码,不要让db做你绝对不希望它做的事情。
Sqlite正在尽可能快地取得前进的进展。这是它的工作,99.99%的时间,这是每个人都想要的。进程切换很昂贵,因此sqlite正在最小化它。这是你的工作,不要求它做你不希望它做的事情。编写代码,以便只要求数据库执行您想要它要执行的操作。然后,当数据库以尽可能快的速度运行时,您将得到您想要的结果。
答案 1 :(得分:0)