生产服务器上的SQLite?[关闭]


9

我已经了解SQLite很长时间了,我知道它发展很快,但是我从未在生产服务器中尝试过它。我无法找到一个可靠的估计,即它在失败之前可以处理多少流量。

有人对此有任何数字或文章吗?


2
警告:问题和某些答案包含误解,误解和过时的信息!
克里斯·S

我们一直在评估SQLite作为生产中的缓存解决方案:uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi

Answers:


4

不幸的是,我没有关于负载功能的任何数据,但是对一些性能限制因素有一些评论:

  • SQLite的速度受其所在磁盘的速度以及是否正在进行大量插入/更新(即写访问)的影响。写入锁定受磁盘旋转速度限制

  • 交易是默认启动的,但如果你获得更好的性能,你开始并提交事务。以编程方式处理交易时,我的批量插入非常快

  • 如果您通常只读取数据,那么根据我的经验,您将获得良好的性能。因此,SQLite可以用作存储数据库服务器读取(特别是远程读取或复杂查询)的缓存系统。

  • 它使用的资源少于数据库服务器,因此这可能会影响站点性能,因为会为Web服务器和应用程序代码释放更多资源

  • 如果您需要大量并发写入,那么数据库服务器(例如MySQL,Postgres)可能会更好地为您服务

正如Devrim所说,SQLite网站指出每天大约有10万用户。Trac系统需要写入,因此在这种情况下性能可能会降低


感谢您的答复,因此基本上您一次只能写入数据库1吗?但是您仍然可以让多个人从数据库中读取而不会被锁定?如果是这样,我刚刚对缓存系统有了一些想法。
Hydralisk博士

抛出的“ 100K”数字是没有用的。该文档显示“通常来说,每天点击量少于10万的网站都可以在SQLite上正常工作。” 通常将“命中”定义为HTTP请求。这包括对命中的每个.js,.css和图像的请求。这与数据库性能有什么关系?假设作者的意思是“页面浏览”,它仍然没有用。每个综合浏览量有多少个查询?读写比?数据库运行在哪种硬件上?当至少有十多个其他更好的工具可用于网站时,将SQLite用于网站不是一个好主意。
jamieb 2010年

@Dr Hydralisk是的,读取可以并行进行。.就像文件一样
Cez 2010年

@jamieb关于“命中”的观点很公平。但是,没有人提到可以使用哪些硬件或服务器资源,因此对于我们所知的所有服务器来说,它可能都是小型虚拟服务器。在缓存系统中使用SQLite数据库(主要是只读表)可以提高性能,特别是当数据库服务器是远程服务器时。数据库查询的内存缓存+ SQLite缓存将单独击败数据库查询。
Cez 2010年

3

我有几点要补充这些好的答案。

当前版本的SQLite具有WAL(预写日志记录),因此读写可以同时进行。因此,先前答案中提到的传统单写作者限制不再存在。我还没有在生产中看到WAL,所以我无法评论它的扩展程度。

是否使用WAL,如果您的SQLite数据库是只读的(或已批量更新)并且适合RAM(您的操作系统具有足够的备用RAM来将其保留在缓冲区中),则它可以在生产Web应用程序上很好地扩展。我个人对它的性能,可扩展性和健壮性持怀疑态度,但是现在在投入生产9个月后,事实证明它可以很好地运行系统的最复杂部分


1

Sqlite非常适合嵌入应用程序中,这就是它的设计目的,但是最肯定的是它并不是“快速”。我将它用于我自己的几个应用程序,纯粹是为了方便,只有两个文件可以复制到另一台机器上,以提供完整的应用程序。使用相同的结构,索引等针对MySQL进行的测试表明,即使对于小型数据库,Sqlite的运行速度也相当慢。我希望性能差异会随着数据库大小的增加而增加,尽管我不能肯定地说,因为我只将它用于小于100MB的数据库。


可以调整PRAGMA以提高性能,但要以偶尔破坏数据库(尽管不会丢失数据)为代价。以我的经验,我可以让SQLite在旧的WindowsXP计算机上以大约250-300rps的速度插入。
djangofan 2011年

-1,因为我不同意。我已经建立并查询了大小为GB的SQLite数据库,例如,在相同类型的硬件中,我永远都不会每秒获得相同数量的查询。SQLite的可以很容易做到每秒120K编写查询,如果你知道如何正确地按摩它。
Alix Axel 2013年

0

我认为sqlite仅比text / xml文件快(如果尝试过,可能会感到惊讶)。而且它不支持并发,如果您想为Intranet创建一个站点,人们可以在该站点上注册工作时间或使用追踪票务,那么它可能会很好用。除此之外,应避免使用mysql或couchdb代替它。

sqlite网站说每天10万用户应该是可以的,但我对此表示高度怀疑,因为一个简单的跟踪项目因10 ppl的办公室使用而陷入困境。


0

Sqlite不是传统的客户端/服务器数据库应用程序。它本质上是一个嵌入在另一个应用程序中的库。它是为单用户桌面应用程序设计的。您绝对不想在多用户环境中尝试将其用作某种独立的MySQL / PostgreSQL / MS-SQL替代品,因为整个数据库在写入时被锁定。即使负载很轻,您也将要处理争用问题,这会破坏性能。


在WAL中,只有并发写入器被阻止。另外,默认的MySQL引擎(MyISAM)还会在有写查询时锁定完整表。
Alix Axel

1
@AlixAxel这个答案是在WAL可用六个月之前写的。
jamieb 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.