3

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

据我了解,我应该改用 SQLite。

如果我这样做有什么实际好处吗?我会看到显着的(>100 毫秒)速度提升吗?我应该期待超过 1,000,000 行的表会出现问题吗?

4

2 回答 2

8

对此没有包罗万象的答案,但有一个要点需要考虑:一个非常好的经验法则是,您的并发程度越高,您从 MySQL 中获得的收益就越多,反之亦然。

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

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

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

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

编辑

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

于 2012-09-03T21:54:05.287 回答
2

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

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

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

于 2012-09-03T22:33:15.397 回答