最近我读到了一个关于 SQLite vs MySQL 的问题,并且答案指出 SQLite 不适合大规模应用,官方网站也有所确认。
那么 SQLite 到底有多强的可扩展性?它的上限是什么?
最近我读到了一个关于 SQLite vs MySQL 的问题,并且答案指出 SQLite 不适合大规模应用,官方网站也有所确认。
那么 SQLite 到底有多强的可扩展性?它的上限是什么?
编辑: 我刚意识到我可能没有公平地评价SQLite——当我从网页中服务SQLite数据库时,我没有为任何列建立索引。这部分导致我经历了减速。然而,关于数据库锁定的观察是正确的——如果你有特别繁重的更新,SQLite的性能无法与MySQL或Postgres相媲美。
另一个编辑:自从我在差不多3个月前发布了这篇文章以来,我有机会仔细研究了SQLite的可扩展性,并且用了一些技巧后,它的可扩展性还是不错的。正如我在第一个编辑中提到的,数据库索引可以极大地减少查询时间,但这更像是关于数据库的一般性观察,而非关于SQLite的。然而,还有一个技巧可以加速SQLite:事务。每当你需要进行多个数据库写操作时,请将它们放在事务内。不像每次发出写查询时都会写入(并锁定)文件,当事务完成时,写入只会发生一次。
我在第一个段落中提到的网站已经切换回SQLite,一旦我在几个地方调整了我的代码,它运行得非常顺畅。
*该网站不再提供
Sqlite在单用户方面是可扩展的,我有一个多GB的数据库表现非常出色,我没有遇到太多问题。
但是它确实只能支持单用户,所以这取决于你所谈论的扩展类型。
回应评论。请注意,没有任何东西阻止在多用户环境中使用Sqlite数据库,但是每个事务(实际上是修改数据库的每个SQL语句)都会对文件进行锁定,这将完全阻止其他用户访问数据库。
因此,如果对数据库进行了大量修改,则基本上会很快遇到扩展问题。另一方面,如果读访问相对于写访问更多,情况可能不那么糟糕。
但是Sqlite当然可以在多用户环境中运行,但是性能不佳。
SQLite驱动着sqlite.org网站以及其他访问量很大的网站。他们建议如果每天的点击量少于100k,那么SQLite应该可以正常工作。而且这是在他们推出“预写日志”功能之前写的。
如果你想加速SQLite的速度,请按照以下步骤操作:
你可能想看一下我在YouTube上的视频,名为"通过预写日志改善SQLite性能",它展示了如何使用预写日志并演示了写入速度提高5倍的效果。
Sqlite是一种桌面端或内嵌式数据库。而SQL Server、MySQL、Oracle等则是服务器端数据库。
桌面端数据库天生不适合用于支持对数据存储的并发写入访问,这意味着大部分网站都不适合使用它作为数据存储方式。如果您需要进行任何登录操作,那么您可能需要对数据库进行写入访问。
SQLite通常作为低到中等流量的网站(也就是说,99.9%的所有网站)的数据库引擎而运作良好。 SQLite可以处理的网络流量取决于网站如何重度使用其数据库。一般来说,每天获取少于100K次点击量的任何网站都应该能够很好地使用SQLite。这个100K次点击量的数字是一个保守估计,而不是一个硬性的上限。SQLite已经被证明可以处理比那多10倍的流量。
SQLite的可扩展性高度取决于所使用的数据及其格式。对于超长表(如GPS记录,每秒钟一条记录),我有一些艰难的经历。经验表明,由于索引持有不断增长的二叉树的平衡,并且有时间戳的索引会经常需要重新平衡,因此SQLite会分阶段地变慢(而且你知道那棵树很重要,但搜索过程却很缓慢)。因此,在大约1GB(非常粗略,我知道)时,查询在我的情况下变得迟缓。结果因人而异。
需要记住的一件事是,尽管所有吹嘘,SQLite并不适用于数据仓库。 SQLite有各种不推荐的用途。SQLite背后的优秀人员自己说:
看待SQLite的另一种方法是:SQLite不是为了取代Oracle而设计的。它是为了取代fopen()而设计的。
这导致了主要争论的问题(非量化的,抱歉,但是定性的),SQLite不适用于所有用途,而MySQL可以涵盖许多不同的用途,即使不是理想的。例如,你可以让MySQL存储Firefox的cookie(而不是SQLite),但必须将该服务始终保持运行状态。另一方面,你可以在SQLite上运行事务性网站(像许多人所做的那样),而不是MySQL,但会有很多停机时间。
我认为一个(数字为1)的Web服务器为数百个客户端提供服务,后端只有一个与数据库的连接,是吗?
因此,在数据库中没有并发访问,因此我们可以说数据库正在以“单用户模式”工作。在这种情况下,讨论多用户访问是没有意义的,因此SQLite与任何其他基于服务器的数据库一样有效。