【问题标题】:SQLite Alternative for higher concurrent transactions更高并发事务的 SQLite 替代方案
【发布时间】:2011-10-20 20:19:43
【问题描述】:

谁能推荐一个更适合并发连接的轻量级数据库?我将在多个线程上不断更新/插入/删除表中的行,所以我需要一些可以处理这个问题的东西。数据库非常小。只有 2 个表,一个有 3 列和 150 行只更新,第二个表有 2 列和最多 15,000 行不断插入、拉/删除,然后在表变小时插入新数据(基本队列)。

这样的逻辑需要 SQLite,因为它非常轻量级,但是我在 50 多个线程上进行调用的事实基本上会影响我的性能,因为 SQLite 的锁定。我所有的线程都在互相等待,基本上在大约 20 之后使线程毫无意义。

如果可以的话,我真的很想避免安装 mySQL 或 SQL 服务器的完整副本。我希望有一个更好的解决方案,但如果是这样的话,我会这样做。 (有人知道 SQL Express 4 是否更适合这个吗?)

我目前正在使用 SQLite.net 和实体 4.0 模型在 .net 框架 4.0 中进行开发,尽管这个问题应该适用于任何语言,因为 SQLite 被广泛使用。

提前致谢!

【问题讨论】:

  • 你有哪些 SQLite 编译指示?你的日记模式是什么?沃尔?
  • 为什么你认为问题出在 sqlite 的错误锁定上?您可能会因过多的上下文切换而受到惩罚,并且没有其他数据库能够表现得更好。 50+ 线程相当多,考虑减少这个数字。
  • ham:我已经在真正的数据库服务器上获得了更好的性能,这个问题已经解决了。如果可以的话,我会避免这种情况。
  • benoit:当前设置为删除,这是 SQLite.net 编辑器中的默认设置
  • 我知道这一点的另一个原因,hamstergene,是因为我可以在 mySQL 中在 2-3 秒内插入 10,000 行,而同一台计算机上的 SQLite 可能需要一分钟多的时间。 =/

标签: sqlite concurrency sql-server-express


【解决方案1】:

除了你已经提到的 MS SQL Express 之外,还有 Firebird embedded 数据库服务器,对于你的用例来说,它可能会比 SQLite 执行得更好。

或者,考虑减少线程数量,或使用自定义锁定/消息传递手动排队查询。仅仅因为您当前的代码滥用库而放弃最快的选项对我来说似乎不太正确。

【讨论】:

  • 如果我将请求排队,它基本上违背了我这样做的目的。我将所有这些信息保存在内存中,但每次关闭时都会丢失。我删除它的原因是我可以轻松地在应用程序加载之间保持“状态”。但是,添加内存队列让我回到了第 1 格(在我看来,这确实是数据库的工作)
猜你喜欢
  • 2012-03-05
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多