sqlite - SQLite 的可扩展性如何?

标签 sqlite scalability

<分区>

我最近读到这个关于 SQLite vs MySQL 的问题答案指出 SQLite 不能很好地扩展和官方网站 sort-of confirms this , 然而。

SQLite 的可扩展性如何?它的上限是多少?

最佳答案

昨天我发布了一个小网站* 来跟踪您的代表,该网站为所有访问者使用共享的 SQLite 数据库。不幸的是,即使它给我的主机施加了适度的负载,它也运行得相当慢。这是因为每次有人查看页面时整个数据库都被锁定,因为它包含更新/插入。我很快切换到 MySQL,虽然我没有太多时间对其进行测试,但它似乎比 SQLite 更具可扩展性。我只记得在尝试从 sqlite 中的 shell 执行查询时,页面加载缓慢并且偶尔会出现数据库锁定错误。也就是说,我正在从 SQLite 运行另一个站点就好了。不同之处在于该站点是静态的(即我是唯一可以更改数据库的站点),因此它非常适合并发读取。这个故事的寓意:只对很少更新数据库的网站使用 SQLite(少于每个页面加载的频率)。

编辑:我刚刚意识到我可能对 SQLite 不公平——当我从网页提供服务时,我没有为 SQLite 数据库中的任何列建立索引。这部分导致了我正在经历的放缓。然而,数据库锁定站的观察 - 如果您有特别繁重的更新,SQLite 性能将无法与 MySQL 或 Postgres 相提并论。

另一个编辑:自从我在大约 3 个月前发布这篇文章以来,我有机会仔细检查 SQLite 的可伸缩性,并且通过一些技巧它可以非常可伸缩。正如我在第一次编辑中提到的,数据库索引显着减少了查询时间,但这更多是对数据库的一般观察,而不是对 SQLite 的观察。然而,还有另一个技巧可以用来加速 SQLite:transactions .每当您必须进行多个数据库写入时,将它们放在一个事务中。每次发出写查询时都不会写入(并锁定)文件,写入只会在事务完成时发生一次。

我在第一段提到的我发布的站点已经切换回SQLite,并且在一些地方调整了我的代码后它运行非常流畅。

* 该网站不再可用

关于sqlite - SQLite 的可扩展性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54998/

相关文章:

cassandra - 如何确保一致性哈希有效?

sql - 选择根据其他表中是否存在外键排序的语句

sql - 如何对多个表进行分组和排序

android - 游标索引越界异常: Index -1 requested with size 0

asp.net - 使用软件负载平衡与硬件负载平衡器的经验?

mysql - 多站点应用程序的多表与多数据库

sqlite - 使用 React Native SQLite 存储模块在 SQLite 中使用事务函数创建多个表

android - 使用默认值插入sqlite

database-design - Google Cloud Spanner 中的自动增量

iphone - Bonjour 中的同时连接数限制是多少?