我最近阅读了这个关于SQLite vs MySQL的问题,答案指出 SQLite 不能很好地扩展,但是官方网站也证实了这一点。
SQLite 的可扩展性如何,它的最高限制是什么?
昨天我发布了一个小网站*跟踪为所有访问者使用共享 SQLite 数据库的代表。不幸的是,即使它给我的主机带来了适度的负载,它的运行速度也很慢。这是因为每次有人查看该页面时整个数据库都被锁定,因为它包含更新/插入。我很快切换到 MySQL,虽然我没有太多时间来测试它,但它似乎比 SQLite 更具可扩展性。我只记得在 sqlite 中尝试从 shell 执行查询时,页面加载速度很慢,偶尔会出现数据库锁定错误。也就是说,我正在从 SQLite 运行另一个站点就好了。不同之处在于该站点是静态的(即我是唯一可以更改数据库的站点),因此对于并发读取来说它工作得很好。故事的道德启示:
编辑 :我刚刚意识到我可能对 SQLite 不公平——当我从网页提供 SQLite 数据库时,我没有索引 SQLite 数据库中的任何列。这部分导致了我正在经历的放缓。然而,数据库锁定的观察结果——如果你有特别繁重的更新,SQLite 的性能将无法与 MySQL 或 Postgres 相提并论。
另一个编辑: 自从我将近 3 个月前发布了这篇文章以来,我有机会仔细检查 SQLite 的可伸缩性,并且通过一些技巧,它可以具有相当大的可伸缩性。正如我在第一次编辑中提到的,数据库索引大大减少了查询时间,但这更多的是对数据库的一般观察,而不是关于 SQLite。但是,您可以使用另一个技巧来加速 SQLite:事务。每当您必须执行多个数据库写入时,请将它们放在事务中。每次发出写入查询时,不会写入(并锁定)文件,写入只会在事务完成时发生一次。
我在第一段中提到我发布的网站已经切换回 SQLite,一旦我在几个地方调整了我的代码,它就运行得非常顺利。