经过大量谷歌搜索后,我一直想知道 mysql 和 sqlite3 之间有什么好处/区别。我主要希望在将我的开发数据库移动到我的生产数据库时减速,尽管我认为这主要发生在我的代码中。有谁知道性能上的主要区别是什么?在那里?或者你能指出一些比较这两者的文献的方向吗?
6 回答
我希望从您的问题来看,您不是在谈论在开发和生产中使用不同的数据库系统。
如果您在开发和生产中使用不同的数据库,请不要。不同的数据库引擎表现不同,会导致出现意想不到的错误。尽量让你的开发系统接近生产环境(提示:在虚拟机中运行)
SQLite 和 MySQL 在正确的环境中都是很好的产品。了解他们的能力是什么。
SQLite:
- 与客户端应用程序在进程内运行
- 没有网络能力
- 因此,查询开销非常低
- 对于简单的查询来说可能相当快,因为要做的 IPC、系统调用和数据复制更少。
- 并发性非常有限(我认为每个数据库文件是一个作者或多个读者)
MySQL:
- 更多功能
- 引擎的选择(InnoDB 为许多工作负载提供了良好的功能)
- 更多地控制存储、备份、恢复等
- 支持网络 - 允许在大规模应用中使用
- 更好的并发性——InnoDB 引擎有 MVCC,这意味着读取器不会阻塞写入器,写入器也不会阻塞读取器。即使是旧的 MyISAM 引擎也有表级锁定,而不是整个数据库的 sqlite。
- 可能是复杂查询的更好优化器
简而言之,您无法真正比较它们。SQLite 作为一种嵌入式数据库非常流行——Firefox 3 里面就有一个。
在 SQLite 中,您被困在将数据库存储在本地磁盘(当然,如果有的话,也可以是网络磁盘)上。如果您想扩展您的 Web 应用程序,您可能必须使用基于服务器的数据库,例如 MySQL。
SQLite 是一个嵌入式数据库引擎,但它与您的应用程序在同一进程中运行。MySQL,是一个在自己的进程中运行的数据库服务器。
SQLite 不会浪费处理和带宽打包应用程序服务器进程和数据库服务器进程之间的请求。它只是解析请求,确定要做什么(查询计划),然后在 SQLite 数据库文件上调用 fopen() 并执行查询。
当您的站点受到大量并发请求的冲击时,MySQL 会更好,并且您需要额外的线程和队列来正确处理所有请求。
如果您的网站每天的点击量不超过 100000 次,或者您的数据库大小不超过 25 GB,那么 SQLite 可能是最好的数据库。SQLite 的另一个优点是,您通常可以在额外进程或数据库服务器稀缺的情况下轻松使用它。查看http://www.sqlite.org/whentouse.html。
您还可以使用 SQLite 做其他事情。查看http://www.squidoo.com/sqlitehammer了解有关 SQLite 的其他见解。
这里有一个简单的方法来看待它:Sqlite 是记事本,MySQL 是 MS Word。两者基本上都做同样的事情,但它们的核心非常非常不同,用于不同的目的。
Sqlite 是一个很好的数据库,而且通常足够好,而 MySQL 是一个复杂得多的系统,但随着复杂性的增加,强大的功能也随之而来。
我还必须建议不要在开发和生产中使用不同的数据库。使用与客户使用的不同的东西是愚蠢的。如果您在开发时需要加速,您的客户可以在使用您的程序时使用相同的加速。
SQLite 是最快的
SQLite 只能通过一个连接访问,使用文件系统存储所有内容,不使用任何服务器。
它又快又轻。实际上应该是 MySQL 的两倍。
SQLite 和 MySQL 不用于相同的任务
您将 SQLite 用于不需要存储超过 5 Go 数据的简单应用程序。EG:本地议程、音乐播放器、模拟或什至用于您将嵌入 USB 密钥的网站演示。
否则,需要为更大的项目选择Mysql,因为它可以处理大量数据并且可以同时访问。您可以将它用于具有用户访问权限的网站、Intranet 等。
这在不同的语言中可能会有所不同,但是如果您只是偶尔修改数据库,那么在 PHP 中 SQLite 是很好的。这是因为为了确保完整性,每当要修改数据库时,都会锁定 SQLite 文件,进行更改并将其写入文件,然后解锁文件。在此期间,任何其他进程都无法访问数据库,并且在此期间来自其他进程的请求是否失败或阻塞取决于实现。
实际上,我发现自己需要重新投影我的程序的数据库逻辑(已经在生产中),因为 SQlite 的一个错误是,当面临相对大量的数据和操作时,它根本无法锁定数据库并将其保留,直到程序关闭,意味着每个程序数据的进度都是暂时的,然后每次添加都会丢失。可爱吗?
迁移到 MySql,我明白了,我尝试了一些方法来测试速度差异,结果发现在 280'500 条记录的表上像“UPDATE table SET column1=column1”这样的安全查询,SQlite 需要大约 13秒,而 MySql 只用了 1 秒。
我仍然不是数据库专家,但选择是一个简单的考虑:如果您需要一个简单的内存存储来存储有限的数据量、复杂性和并发性(例如小型实用程序或使用非关键数据运行的程序),那么SQlite 会很好,否则当你需要稳定性、并发性、大量数据、查询复杂时,你的数据库将是 MySql。
关于开发和生产中的不同数据库我不同意,但如果你这样做了,你肯定有充分的理由。