【问题标题】:SQLite concurrency issue a deal breaker?SQLite 并发问题会破坏交易?
【发布时间】:2010-06-30 10:09:21
【问题描述】:

我正在寻找我最终可能托管的家庭项目 (ASP.NET MVC) 的数据库。在 Stack Overflow 上阅读了类似的问题 here 后,我决定使用 MySQL。

但是,SQLite 的易用性和部署很诱人,我想在完全注销之前确认我的原因。

我的目标是维护用户状态消息(如 Twitter)。这意味着主要是一个带有用户 ID/状态消息对的表。状态消息的读取/插入/删除操作。无需修改。

阅读以下段落后,我决定 SQLite 不能为我工作。我确实有一个简单的数据库,但由于我的所有事务都使用同一张表,我可能会遇到一些问题。

SQLite 对整个数据库文件使用读/写锁。这意味着如果任何进程正在从数据库的任何部分读取,所有其他进程都将被阻止写入数据库的任何其他部分。同样,如果任何一个进程正在写入数据库,则所有其他进程都无法读取数据库的任何其他部分。

我的理解是幼稚的吗? SQLite 对我有用吗? MySQL 是否还提供了 SQLite 在使用 ASP.NET MVC 时不会提供的东西? VS中的开发容易吗?

【问题讨论】:

  • 你考虑过 SQL Server Compact Edition 吗?如果需要,您可以在以后将其更改为完整的 SQL Server,但如果需要,SQLCE 没有 SQLite 的锁定问题。
  • 您的应用程序将拥有多少用户?您预计其中有多少人会同时实际访问您的应用?
  • @ninjalj,说实话并不多。该项目更像是一种学习体验,而不是商业决策,所以我正在寻找“正确”而不是“可行”的东西。我说得通吗?

标签: mysql database asp.net-mvc sqlite


【解决方案1】:

如果你愿意等半个月,下一个 SQLite 版本打算支持write-ahead logging,这应该允许更多的写入并发。

【讨论】:

  • 取决于您的时间范围。如果您不希望在接下来的两周内大量使用(这是一个家庭项目和所有项目),那么您可以为 SQLite 开发并更新库。或者,如果下一个版本证明是值得的,或者只是在 MySQL 中开发并移植到 SQLite。如果您的数据库代码正常,那么单表应用程序应该很容易翻译。
  • 有多少进程将写入数据库?如果它是处理多个请求并进行更新的单个前端,那么 SQLite 就可以了。如果您有多个前端都在与同一个数据库通信,那么您可能无论如何都想要一个完整的 DBMS
【解决方案2】:

我什至无法让简单的并发 SQLite 声称支持工作 - 即使在多次询问 SO 之后也是如此。

编辑 由于我编写了上述内容,我已经能够获得并发写入和读取以使用 SQLite。看来我没有正确处理 NHibernate 会话 - 将 Using 块放在创建会话的所有代码周围解决了这个问题。 /编辑

但这对您的应用程序来说可能没问题,尤其是 user380361 提到的预写日志记录。

占用空间小,单一文件安装,速度快,可与 NHibernate 配合使用,免费,公共领域 - 几乎在所有方面都非常不错的产品!

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2014-11-25
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2016-03-31
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多