c++ - SQLite3 多进程性能测试

标签 c++ dll sqlite stress-testing

我写了一个使用 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 试图同时写入同一个数据库?或者我只是在我的负载测试中过度使用 sqlite?我需要编写自己的连接池吗?

在这件事上的任何帮助都会很棒。谢谢。

最佳答案

如果您关心获得的分布,那么您需要编写不会在不添加任何 b 的情况下添加十亿个 a 的代码。您正在编写不符合您要求的代码。那不是sqlite的错。如果您不想写 1,000 个 a 而没有 b,那就不要那样做。

您可以保证数据库会取得进展。是否要求数据库执行您绝对不希望它执行的操作取决于您的代码。

Sqlite 正在以尽可能快的速度取得尽可能多的进步。这就是它的工作,而且在 99.99% 的时间里,这就是每个人都想要的。进程切换是昂贵的,所以 sqlite 正在最小化它。 的工作就是不要求它做你不希望它做的事情。编写您的代码,以便仅要求数据库执行您希望它执行的操作。然后,当数据库尽可能快地运行时,您就会得到想要的东西。

关于c++ - SQLite3 多进程性能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12047343/

相关文章:

C++:访问冲突写入位置

c++ - 动态数组与 std::vector

c++ - 跨 Symbian DLL 调用虚函数的问题

ios - 在 ios 中的 sqlite 更新中出现错误

java - 是否可以从同一个 SQLite 数据库中检索文本和图像

c++ - 线程本地存储 (TLS) 和 OpenMP

c++ - 在 Visual Studio 2010 中基于文件添加包含路径

java - 无法在 AMD 64 位平台上加载 IA 32 位 .dll

c# - 了解 IlMerge - 如何打包一个可执行文件及其所有相关的 dll

c++ - SQLite3 C++ 列值不会递增 1