【发布时间】:2010-09-20 20:05:39
【问题描述】:
经过大量谷歌搜索后,我一直想知道 mysql 和 sqlite3 之间有什么好处/区别。我主要希望在将我的开发数据库移动到我的生产数据库时减速,尽管我认为这主要发生在我的代码中。有谁知道性能上的主要区别是什么?在那里?或者你能指出一些比较这两者的文献的方向吗?
【问题讨论】:
标签: mysql ruby-on-rails database sqlite
经过大量谷歌搜索后,我一直想知道 mysql 和 sqlite3 之间有什么好处/区别。我主要希望在将我的开发数据库移动到我的生产数据库时减速,尽管我认为这主要发生在我的代码中。有谁知道性能上的主要区别是什么?在那里?或者你能指出一些比较这两者的文献的方向吗?
【问题讨论】:
标签: mysql ruby-on-rails database sqlite
我希望从您的问题来看,您不是在谈论在开发和生产中使用不同的数据库系统。
如果您在开发和生产中使用不同的数据库,请不要。不同的数据库引擎表现不同,会导致出现意想不到的错误。尽量让您的开发系统接近生产环境(提示:在 VM 中运行)
SQLite 和 MySQL 都是合适的产品。了解他们的能力是什么。
SQLite:
MySQL:
简而言之,您无法真正比较它们。 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 只能通过一个连接访问,使用文件系统存储所有内容,不使用任何服务器。
它又快又轻。实际上应该是 MySQL 的两倍。
您将 SQLite 用于不需要存储超过 5 Go 数据的简单应用程序。例如:本地议程、音乐播放器、模拟甚至是您将嵌入 USB 密钥的网站演示。
Mysql,否则,需要为更大的项目选择,因为它可以处理大量数据并且可以同时访问。您可以将它用于具有用户访问权限的网站、Intranet 等。
【讨论】:
这在不同的语言中可能会有所不同,但在 PHP 中,如果您只是偶尔修改数据库,SQLite 就很好。这是因为为了确保完整性,每当要修改数据库时,都会锁定 SQLite 文件,进行更改并将其写入文件,然后解锁文件。在此期间,任何其他进程都无法访问数据库,并且在此期间来自其他进程的请求是否失败或阻塞取决于实现。
【讨论】:
实际上我发现自己需要重新投影我的程序的数据库逻辑(已经在生产中),因为 SQlite 的一个错误是当面临相对大量的数据和操作时,它根本无法锁定数据库并离开如此,直到程序关闭,这意味着每个程序数据的进度都是暂时的,然后每个添加都将丢失。可爱吗?
迁移到 MySql,我明白了,我尝试了一些方法来测试速度差异,并得出了一个安全查询,如“UPDATE table SET column1=column1”在 280'500 条记录的表上,SQlite大约需要 13 秒,而 MySql 只需要 1 秒。
我仍然不是数据库专家,但选择是一个简单的考虑:如果您需要一个简单的内存存储来存储有限的数据量、复杂性和并发性(例如小型实用程序或运行非关键程序的程序) data) 那么 SQlite 就可以了,否则当你需要稳定性、并发性、大量数据、查询复杂时,你的 db 将是 MySql。
关于开发和生产中的不同数据库我不同意,但如果你这样做了,你肯定有充分的理由。
【讨论】: