我想这已经被提过很多次了,但我又提了一次!!!无论如何...在 Ruby on Rails 中,Sqlite3 已经设置好,不需要额外的挑选和切片,但是...在这里和其他地方进行了大量阅读之后,有人说它不可扩展,而另一些人则说它实际上可以很好地做到这一点。有人说 MySQL 更适合大型项目,而另一些人则认为,只需使用 PostgreSQL。我很想听听你对此的看法。在两种情况下。一种情况是您正在为新闻发布网站(如 CNN 新闻)创建一个小网站,另一种情况是您正在创建一个类似于 Twitter 的网站?
4 回答
很大程度上取决于您的应用程序。
一般来说,对 SQLite 数据库的任何写入操作都很慢。即使是简单的 :update_attribute 或 :create 也可能需要 0.5 秒。但是如果你的应用程序写的不多(SQLite 的杀手锏:每次请求都写入数据库!),SQlite 是大多数网络应用程序的可靠选择。事实证明,它可以处理中小型流量。此外,它在开发过程中是一个非常好的选择,因为它需要零配置。它在内存模式下的测试套件中也表现得非常好(除非您有数千次迁移,因为它每次都从头开始重建)。此外,如果性能不再足够,从 SQLite 切换到 MySQL 几乎是无缝的。
MySQL 目前是一个坚如磐石的选择。未来会告诉你甲骨文下的 MySQL 会发生什么。
据我所知,PostgreSQL 是最快的,但我还没有在生产中使用它。也许其他人可以说得更多。
我会投票给 Postgres,它一直在变得更好,尤其是在性能方面,如果这是一个问题的话。以 CNN 和 Twitter 为例,从尽可能稳固的基础开始。以后你会很高兴的。
对于网站,SQLite3 足以满足任何更高的中产阶级流量场景。因此,除非您开始受到每小时数百万个请求的打击,否则无需担心 SQLite3 的性能或可伸缩性。
也就是说,SQLite3 并不支持专用 SQL 服务器所支持的所有典型功能。访问控制仅限于您可以使用数据库文件为机器上的 UNIX 帐户设置的任何文件权限,没有守护进程可言,内置函数集相当小。此外,没有任何类型的存储过程,尽管您可以使用视图和触发器来模拟那些。
如果您担心其中任何一点,您应该使用 PostgreSQL。MySQL 已(间接)被甲骨文收购,考虑到他们在收购 MySQL 之前也有自己的数据库,我不会把它放在他们身边,只是把它放在某个地方。过去,我在维护 PostgreSQL 方面也有过更顺畅的体验,而且 - 有趣的是 - 它总是感觉更敏捷、更可靠。
免责声明: 我的观点完全是偏见,因为我从 mysql 首次问世就开始使用它。
您的问题带来了关于如何设置开发环境的另一个论点。许多人会争辩说,您应该在开发中使用与测试/生产中相同的 dbms。这完全取决于您首先在做什么。在大多数情况下,Sqlite 在开发中可以正常工作。
与 Postgres 相比,我个人参与了更多使用 MySql 和 MsSql 的网站。
我参与了一个项目,该项目根据客户号码清除了国家不来电名单。我们将这些数据存储在本地。一些区号很容易拥有超过 500 万条记录。该应用程序最初是使用 MsSql 在 .Net 中编写的。这是“不那么快”。我将其更改为使用 PHP 和 MySql(在我发现 Ruby 之前很伤心)。它将在(大约)3 秒内插入/消化 500 万行。这比通过 MsSql 处理要快得多。我们还将通话记录数据存储在表格中,这些表格将在不到一天的时间内增长到 2000 万条记录。MySql 像冠军一样处理了我们扔给它的所有东西。当我们设置复制时,处理自然会受到影响,但它太小了,我们忽略了它。
这真的取决于您的项目以及适合项目需求的解决方案。