我应该使用SQLite而不是MySQL吗?

时间:2012-09-03 21:43:01

标签: mysql performance sqlite

我需要改进PHP-MySQL Web应用程序,它只使用MySQL进行REPL操作(以及一些搜索功能)。我使用的99%的应用程序从未使用过高级MySQL功能,如复制,跨表约束,锁定等。

根据我的理解,我应该使用SQLite。

如果我这样做有什么实际好处吗? 我会看到显着的(> 100ms)速度提升吗? 我是否应该预计超过1,000,000行的表存在问题?

2 个答案:

答案 0 :(得分:6)

没有全面的答案,但有一个要点需要考虑:一个非常好的经验法则是,你的并发度越高,你从MySQL中获得的利润就越多,反之亦然

这意味着在数据库请求永远不会并发的情况下,您可能会通过使用SQlite看到加速,但我怀疑它会在100毫秒的数量级。

背后的原因是(非常粗略地):

在数据库服务器环境中,例如MySQL,PostgreSQL,MS SQL,Oracle和朋友,专用流程(或一组流程)专门接触数据库文件 - 重要部分是专用 。这意味着,可以在进程中解决并发问题。

在基于文件的数据库中,例如SQlite,MS Access(Jet Engine)和朋友,多个进程将在不知道彼此的情况下触及数据库文件 - 这意味着必须通过将它们写入到并发问题来解决并发问题。数据库或帮助文件。这通常要慢得多且不太稳健。作为交换,数据库客户端(Web应用程序)和数据库服务器(正在进行中)之间的通信开销是不存在的。

修改

评论后我想说清楚,我说的是并发写入,而不是并发读取。并发读取不变的数据集并不是一个难题 - 它根本不需要任何锁定。

答案 1 :(得分:2)

SQLite的主要优点是它是一个基于文件的关系数据库,它使用SQL作为查询语言。基于文件极大地简化了部署,使其非常适用于应用程序需要一个小数据库但必须在数据库服务器存在问题的环境中运行的情况。 (例如,许多浏览器使用SQLite来管理他们的cookie存储;使用数据库服务器解决这个问题会在很多方面导致疯狂。)

MySQL(具有理智的表类型)的主要优点是它是一个使用SQL作为其查询语言的数据库服务器。基于服务器允许基于文件的系统无法简单处理的许多功能(例如复制),但确实使部署更加复杂。

数据库服务器(例如MySQL)的额外复杂性的好处是否超过成本(相对于像SQLite这样的基于文件的数据库引擎)取决于很多因素,特别是包括预期安装的数量和谁预计将执行这些安装。