我很早就知道 SQLite,也知道它的速度非常快,但我从未在生产服务器中尝试过它。我始终无法找到可靠的估计方法,来判断它在失败前可以处理多少流量。
有人有关于这方面的数字或文章吗?
答案1
不幸的是,我没有提供任何有关负载能力的数据,但对一些限制性能的因素有一些评论:
SQLite 的速度受其所在磁盘的速度以及是否有大量插入/更新(即写入访问)的影响。写入锁定受磁盘旋转速度的限制
默认情况下会启动事务,但如果你启动并提交事务。我在以编程方式处理事务时,曾遇到过非常快速的批量插入
如果你通常只阅读数据,那么根据我的经验,您将获得良好的性能。因此,SQLite 可以用作缓存系统来存储数据库服务器读取,特别是远程读取或复杂查询。
它使用的资源比数据库服务器少,因此可以释放更多资源用于 Web 服务器和应用程序代码,从而影响站点性能
如果你需要进行大量并发写入,那么数据库服务器(例如 MySQL、Postgres)可能更适合你
作为德夫里姆据称,SQLite 网站表示每天大约 10 万用户应该没问题。Trac 系统需要写入,因此在这种情况下性能可能会更慢
答案2
我对这个好的答案有一些补充。
当前版本SQLite 有 WAL(预写日志)这样读写就可以同时进行。因此前面的答案中提到的传统单一写入器限制不再存在。我还没有在生产中看到 WAL,所以我无法评论它的扩展性如何。
无论是否使用 WAL,如果您的 SQLite 数据库是只读的(或批量更新),并且它适合 RAM(您的操作系统有足够的备用 RAM 将其保存在缓冲区中),它可以在生产 Web 应用程序上很好地扩展。我个人对它的性能、可扩展性和稳健性非常怀疑,但经过九个月的生产事实证明,即使系统中最复杂的部分很好。
答案3
Sqlite 非常适合嵌入到应用程序中,这也是它的设计目的,但它肯定不是“极快”的。我将其用于我自己的几个应用程序,纯粹是为了方便,只需将两个文件复制到另一台机器即可提供完全正常运行的应用程序。使用相同结构、索引等对 MySQL 进行的测试表明,Sqlite 的速度要慢得多,即使对于小型数据库也是如此。我预计性能差异会随着数据库大小的增加而增加,但我不能肯定地说,因为我只在小于 100MB 的数据库中使用过它。
答案4
Sqlite 不是传统的客户端/服务器数据库应用程序。它本质上是一个嵌入在另一个应用程序中的库。它是为单用户桌面应用程序设计的。您绝对不想尝试在多用户环境中将其用作某种独立的 MySQL/PostgreSQL/MS-SQL 替代品,因为整个数据库在写入时被锁定。即使在轻负载下,您也会遇到争用问题,这会破坏性能。