Sqlite3 vs Postgres vs Mysql - Rails [关闭]

Posted

技术标签:

【中文标题】Sqlite3 vs Postgres vs Mysql - Rails [关闭]【英文标题】:Sqlite3 vs Postgres vs Mysql - Rails [closed] 【发布时间】:2012-12-28 14:57:03 【问题描述】:

我想这已经被提过很多次了,但我又提了一次!!! 无论如何...在 Ruby on Rails 中,Sqlite3 已经设置好,不需要额外的挑选和切片,但是... 在这里和其他地方进行了大量阅读之后,有人说它不可扩展,而另一些人则说它实际上可以很好地做到这一点。有人说 mysql 更适合大型项目,而另一些人则认为,只需使用 PostgreSQL。 我很想听听你对此的看法。在两种情况下。一种情况是您为新闻发布网站(如 CNN 新闻)创建一个小网站,另一种情况是您创建一个类似于 Twitter 的网站?

【问题讨论】:

如果您的脑海中没有关于您将服务多少人的形象,您就无法问什么更好。以您刚才提到的三个数据库中的任何一个为例——它们必须处理各种事情,例如用户连接到它并实际在硬盘驱动器上查找信息。无论你在程序中做什么,或者你使用什么魔法——硬件的限制是众所周知的,像 twitter 或 CNN 这样的网站甚至没有以传统方式使用数据库。如果您的网站因某种奇迹而在明天流行起来——您将不得不扔掉您编写的所有代码。 您不必粗鲁无礼。抱歉,如果我没有提供足够的信息,但我不知道我猜...我觉得我确实提供了一些信息,Twitter 流量服务于很多人,数百万人,CNN,数十万人。 对不起,我没有粗鲁,也没有生气,我只是想对你的问题发表评论,给你一个提示,你不能问什么更好,然后使用大网站举个例子。涉及的 if 实在是太多了,什么不是。 我不知道 ifs 是什么,但无论如何它并没有给我带来太多困扰,而且你们所有人都帮助我决定了我将使用什么,所以它不再那么重要了。天气你粗鲁与否,没关系,我原谅你,谢谢! ;) 【参考方案1】:

很大程度上取决于您的应用程序。

一般来说,任何对 SQLite 数据库的写入操作都很慢。即使是简单的 :update_attribute 或 :create 也可能需要 0.5 秒。但是,如果您的应用程序不写太多(杀手 反对 SQLite:在每个请求上写入数据库!),SQlite 是大多数 Web 应用程序的可靠选择。事实证明,它可以处理中小型流量。此外,它在开发过程中是一个非常好的选择,因为它需要零配置。它在内存模式下的测试套件中也表现得非常好(除非您有数千次迁移,因为它每次都从头开始重建)。此外,如果性能不再足够,从 SQLite 切换到例如 MySQL 几乎是无缝的。

MySQL 目前是一个坚如磐石的选择。未来将告诉 Oracle 下的 MySQL 会发生什么。

据我所知,PostgreSQL 是最快的,但我还没有在生产环境中使用它。也许其他人可以告诉更多。

【讨论】:

如果你和 Magnus 说从 Sqlite/3 切换到 MySQL 或 PostgreSQL 基本上是无缝的,那么我会坚持使用 Sqlite3 直到那个时间到达并继续什么我正在解决我在数据库管理系统决策中遇到的所有这些麻烦:P 谢谢 :) 人们普遍误解了 sqlite 的特性和功能。 sqlite 比大多数企业数据库引擎快,平均比 postgresql 快 4 倍。 sqlite 牺牲了复杂的特性来支持速度和简单性。它的主要缺点之一是高流量客户端/服务器实现中的读/写并发。当然,在开发过程中,它是一种快速、有效且维护成本低的选择。如果与引擎无关的 sql 连接模块结合使用 - 您可以使用 sqlite 进行开发并在测试时切换到企业数据库。见sqlite.org/whentouse.html【参考方案2】:

我会投票给 Postgres,它一直在变得更好,尤其是在性能方面,如果这是一个问题的话。以 CNN 和 Twitter 为例,从尽可能稳固的基础开始。以后你会很高兴的。

【讨论】:

我肯定会再试一次,但我在 Windows 7 上使用 Rails 设置它时遇到了一些麻烦。:( 如果这次我不能让它工作,那么我不会不知道该怎么办。 这应该是评论,而不是答案。没有任何事实支持,你只是在陈述一个观点。 @N.B.意见是 OP 要求的。 我不明白你的意思,但根据 Magnus 和 Hisako 所说的从 Sqlite3 轻松转换的说法,我肯定会坚持下去,直到我想换成其他东西,比如 MySQL或 PostgreSQL。谢谢! |m|【参考方案3】:

对于网站,SQLite3 足以满足任何更高的中产阶级流量场景。因此,除非您开始受到每小时数百万个请求的冲击,否则无需担心 SQLite3 的性能或可扩展性。

也就是说,SQLite3 并不支持专用 SQL 服务器支持的所有典型功能。访问控制仅限于您可以使用数据库文件为机器上的 UNIX 帐户设置的任何文件权限,没有守护进程可言,内置函数集相当小。此外,没有任何类型的存储过程,尽管您可以使用视图和触发器来模拟那些。

如果您担心其中任何一点,您应该选择 PostgreSQL。 MySQL 已(间接)被甲骨文收购,考虑到他们在收购 MySQL 之前也有自己的数据库,我不会把它放在他们身边,只是把它放在某个地方。过去,我在维护 PostgreSQL 方面也有过更顺畅的体验,而且 - 有趣的是 - 它总是感觉更敏捷、更可靠。

【讨论】:

我明白了,换句话说,Twitter 不应该选择 Sqlite3,还是您认为 Sqlite3 能够很好地处理所有“推文”? 嗯,它确实有点取决于他们使用的架构,并且 SQLite 中数据库文件的大小有硬性限制。如果我站在他们的立场上,我自己可能会选择 SQLite,因为他们的要求并不那么复杂。当然,到目前为止,他们可能拥有足够的数据,可以接近 SQLite 施加的大小限制。从好的方面来说,将项目从 SQLite 转换为使用其他数据库往往相当简单,所以从这开始并不是什么大问题。 如果你和 Magnus 说从 Sqlite/3 切换到 MySQL 或 PostgreSQL 基本上是无缝的,那么我会坚持使用 Sqlite3 直到那个时间到达并继续什么我正在做并放弃在我的数据库管理系统决策中遇到的所有这些麻烦:P 谢谢 :) - 这与 Hisako 的帖子基本相同,但你们都对我提供了极好的帮助;) --【参考方案4】:

免责声明: 我的观点是完全有偏见的,因为我从 mysql 刚出来就一直使用它。

您的问题引发了关于如何设置您的开发环境的另一个争论。许多人会争辩说,您应该在开发中使用与测试/生产中相同的 dbms。这完全取决于您首先在做什么。在大多数情况下,Sqlite 在开发中可以正常工作。

我个人参与过使用 MySql 和 MsSql 的网站比 Postgres 更多。

我参与了一个项目,该项目根据客户号码清除了全国禁止来电名单。我们将这些数据存储在本地。一些区号很容易拥有超过 500 万条记录。该应用程序最初是使用 MsSql 在 .Net 中编写的。这是“不那么快”。我将其更改为使用 php 和 MySql(在我发现 Ruby 之前很伤心)。它将在(大约)3 秒内插入/消化 500 万行。这比通过 MsSql 处理要快得多。我们还将通话记录数据存储在表格中,这些表格将在不到一天的时间内增长到 2000 万条记录。 MySql 像冠军一样处理了我们扔给它的所有东西。当我们设置复制时,处理自然会受到影响,但它是如此之小,以至于我们忽略了它。

这真的取决于您的项目以及适合项目需求的解决方案。

【讨论】:

老实说,在阅读了几篇关于 MySQL 不利方面的文章后,我试图避免使用 MySQL。我不是其他人的粉丝然后侮辱MySQL用户,只是它似乎被广泛使用以至于我不想使用它。使用一些更新的东西。虽然最大的原因是我不知道如何使用它用rails设置它,我也不想,但如果我想,我不知道怎么做,但我可以再做一些搜索,找到答案。无论如何,我想 MySQL 是好的,但它并没有因为一些愚蠢的原因而引诱我。我确实用过一次 PHP。:P谢谢! 使用 Rails 设置它就像安装 Mysql,将 mysql gem 添加到您的 Gemfile,最后设置 database.yml 一样简单。您可以查看 Nosql 流派。您最终使用的是适合您项目的最佳解决方案。我们使用 Oracle,但这仅仅是因为我们有 100 条数百万条记录和 10,000 种不同的事物同时触发。除非您是财富 10 强公司,否则我不建议您使用它。即使这样,我们也可以建立一个 mysql 场并删除 Oracle。 我们?你是 *** 上的某种版主吗?但无论如何,Magnus 和 Hitasu 都谈到了从 Sqlite3 转换和更改到其他数据库的简易性,所以如果我需要更改为 MySQL,我只需交换 :D 不,我工作的公司是一家大型公司。你真的需要尽可能多地尝试不同的技术。当您需要确定什么适合您的特定项目时,它会派上用场。 我会随心所欲地进行实验 ;) Gracias!

以上是关于Sqlite3 vs Postgres vs Mysql - Rails [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

VS 2017 PermissionError: [Errno 13] Permission denied: 'v15\\Server\\sqlite3\\db.lock'

Python内置数据结构操作VS sqlite3操作

vs2010下使用sqlite

SQLite3源码下载与编译(开发环境:Win10+VS2022)

SQLite3源码下载与编译(开发环境:Win10+VS2022)

Postgres vs Firebird [关闭]