2010-06-30 52 views
1

我正在寻找一个家庭项目(ASP.NET MVC)的数据库,我可能会最终主持。在阅读Stack Overflow上的类似问题here后,我决定使用MySQL。SQLite并发性问题是一个交易断路器?

但是,易于使用的&部署SQLite是诱人的,我想确认我的理由,然后再完全写下来。

我的目标是维护用户状态消息(如Twitter)。这将意味着大多数情况下只有一张带有用户标识/状态消息对的表。读取/插入/删除状态消息的操作。不需要修改。

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

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

我的理解是否天真? SQLite会为我工作吗? MySQL还提供了SQLite在使用ASP.NET MVC时不会使用的东西吗? VS的发展容易吗?

+3

您是否考虑过SQL Server Compact Edition?如果需要,稍后可以稍后将其更改为完整的SQL Server,但SQLCE不具有SQLite所执行的锁定问题。 – 2010-06-30 10:10:55

+0

@Lasse我没有看过它,但我现在。谢谢! – Preets 2010-06-30 10:30:16

+0

你的应用程序有多少用户?你期望实际访问你的应用的人数有多少? – ninjalj 2010-06-30 22:53:20

回答

3

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

+0

谢谢切线。我检查了链接,它似乎是SQLite的好步骤。但是,我不认为我应该等待,至少我的热情会减少! – Preets 2010-07-01 10:19:21

+0

取决于你的时间表。如果你不希望在接下来的两周内使用过多(这是一个家庭项目和所有的),那么你可以开发SQLite,然后更新库。 或者,如果下一个版本证明是值得的,那么只需在MySQL中进行开发并稍后再开发到SQLite。如果你的数据库代码是健全的,那么一个单表应用应该很容易翻译。 – 2010-07-01 18:05:24

+0

谢谢切线。我将使用MYSQL,并在新版本发布并可接受时将其移植到SQite中。 – Preets 2010-07-07 08:36:08

1

即使简单的并发SQLite声明支持工作 - 即使在问了几次之后,我仍然无法获得。

编辑 自从我写了上面,我能够得到并发写入和读取与SQLite的工作。看起来我没有正确地处理NHibernate会话 - 在所有创建会话的代码周围放置了使用块来解决问题。 /编辑

但是它可能适用于您的应用程序,尤其是使用user380361提到的Write-ahead Logging。

小尺寸,单一文件安装速度快,适用于NHibernate,免费的公有领域 - 在几乎所有方面都是非常好的产品!

+0

- 即使是在问了几次之后,我甚至都无法获得简单的并发SQLite声明来支持工作。 这令人不安。我现在只需要坚持使用MySQL。感谢您的答复。 – Preets 2010-07-01 10:21:46