我需要改进一个 PHP-MySQL Web 应用程序,它只使用 MySQL 进行 REPL 操作(和一些搜索功能)。我使用的 99% 的应用程序从未使用过高级 MySQL 功能,例如复制、跨表约束、锁定等。
据我所知,我应该改用 SQLite。
我这样做有什么实际好处吗? 我会看到明显的(>100 毫秒)速度提升吗? 我应该预料到超过 1,000,000 行的表会出现问题吗?
最佳答案
对此没有包罗万象的答案,但有一个要点需要考虑:一个很好的经验法则是,并发度越高,从 MySQL 中获益越多,反之亦然.
这意味着在数据库请求永远不会并发的情况下,您可能会通过使用 SQlite 看到加速,但我怀疑它会在 100 毫秒的数量级。
这背后的原因是(非常粗略):
在数据库服务器环境中,例如 MySQL、PostgreSQL、MS SQL、Oracle 等,一个专用进程(或一组进程)专门接触数据库文件——重要的部分是专用 .这意味着并发问题可以在进程中解决。
在基于文件的数据库中,例如 SQlite、MS Access(Jet 引擎)和 friend ,多个进程将在彼此不知情的情况下访问 DB 文件——这意味着并发问题必须通过将它们写入数据库或帮助文件。这通常要慢得多且不那么健壮。作为交换,数据库客户端(Web 应用程序)和数据库服务器(进程中)之间的通信开销是不存在的。
编辑
在评论之后我想说得更清楚,我说的是并发写入,而不是并发读取。并发读取不变的数据集并不是一个难题 - 它根本不需要任何锁定。
关于mysql - 我应该使用 SQLite 而不是 MySQL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254326/