【问题标题】:Rails 2.0: Why not use sqlite3?Rails 2.0:为什么不使用 sqlite3?
【发布时间】:2010-09-26 07:17:50
【问题描述】:

我一直在阅读一些关于如何开始使用 Rails 2.0 的教程。

(超时:天才网站名称创意源于我刚刚打的错字:“tutoRAILS”。抱歉,回到我的问题。)

在我阅读的大部分教程中,似乎都鼓励使用 MySQL 而不是 sqlite3。这有什么原因吗,比如性能方面的还是什么?我现在只是在我的 PC 上使用 InstantRails 测试 Rails,它们已经足够好了,可以在他们的设置中包含 MySQL,但我一直在使用 sqlite3 制作我的实验应用程序。我是否遗漏了 sqlite3 的一些主要警告,或者这只是其他人对 MySQL 的一般偏好?

【问题讨论】:

    标签: ruby-on-rails sqlite


    【解决方案1】:

    SQLite 是一个很好的引擎,但它仍然是一个in process(或桌面)风格的引擎。 In process 引擎在并发方面具有固有的弱点,这使得它们从根本上比基于服务器的引擎(如用于网站的 MySQL 或其他可能进行大量同时写入访问的场景)成为糟糕的选择。

    在 SQLite 网站上查看此页面:
    http://www.sqlite.org/whentouse.html

    SQLite 通常可以很好地用作中低流量网站的数据库引擎

    如果...您正在考虑将数据库组件拆分到单独的机器上,那么您绝对应该考虑使用企业级客户端/服务器数据库引擎而不是 SQLite。

    【讨论】:

    • 他们还说:'任何每天点击量少于 100K 的网站都可以使用 SQLite。 10 万次点击/天的数字是保守估计,而不是硬性上限。 SQLite 已被证明可以处理 10 倍的流量。也就是说,SQlite 适用于 95% 的互联网站点。
    【解决方案2】:

    SQLite 很棒,但它在多个并发读取器和写入器时存在性能问题。

    就像 Joel 所引用的那样,如果您的网站流量低,这很少会成为问题,但在中等活动时,我有时会锁定数据库(和挂起的查询)。在这种情况下,对多并发用户提供更好支持的数据库会更好。

    就个人而言,如果我使用与数据库无关的层来访问数据库,那么从一个层切换到另一个层很容易,因此从 SQLite 开始并在必要时移至另一个层很容易。

    【讨论】:

      【解决方案3】:

      我总是从 SQLite 开始。如果我需要对 Rails 项目进行原型设计,我可以立即启动并运行。搭建一些脚手架,运行我的迁移,编写一些测试,然后我就开始比赛了。

      但是,如果项目达到您将要部署它的地步,我建议使用 MySQL 或 PostgreSQL 以获得更好的性能。

      SQLite 对于小型嵌入式应用程序也有好处,或者如果您没有为只有少数人会使用的工具运行数据库的开销。

      【讨论】:

        【解决方案4】:

        自从 Rails 2.0 以来,sqlite3 默认数据库,所以当然没有偏见。许多 Rails 教程早于 Rails 2.0,然而,默认数据库是 MySQL。

        正如其他几个人所提到的,sqlite3 是一个很好的数据库,可以快速轻松地启动和运行应用程序。对于您的 Rails 开发环境,它有其优势——即使您的应用程序变得复杂,它也可能会正常工作。对于 Rails 测试环境,它也是一个很好的选择——它非常快,而且大多数测试对数据库的需求都比较简单,而且往往不需要并发,否则会遇到 sqlite3 的限制。

        但是,对于许多(如果不是大多数)生产网站来说,可能需要为更高并发性而设计的数据库——MySQL、Postgres 等。

        【讨论】:

          【解决方案5】:

          对于像 Rails 博客引擎这样的东西,即使在相当大的容量下,SQLite 也能很好地工作,因为它的所有读取和写入很少。事实上,您的大部分点击将被缓存页面 - 取决于您是否允许 cmets 以及您的评论线程的活跃程度 - 您可能会使用单个 rails 进程,因为您的 Web 服务器将处理几乎每个请求。

          对于 SQLite 数据库,每个 rails 进程都必须争夺文件上的文件系统锁定才能进行写入,因此如果您有很多进程正在写入,您最终会阻塞很多。考虑这一点的一种方法是考虑您将拥有多少个 Rails 进程......如果它需要超过 3-4 个,那么 SQLite 可能不是一个好的选择。

          【讨论】:

            【解决方案6】:

            我认为这主要是在教程中保持低摩擦水平的问题。如果你是新手,我只推荐 MySql,因为它会更容易完成教程。 sqlite 是一个很好的桌面解决方案。

            【讨论】:

            • 虽然我不使用 Rails,但我个人发现 SQLite 比 MySQL 更容易使用
            【解决方案7】:

            请注意,Sqlite 是 Camping 框架的默认引擎。有道理,因为两者都针对小而快,而不是大而企业

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-06-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-17
              • 2011-03-18
              相关资源
              最近更新 更多