【问题标题】:Ruby, Rails: mysql2 gem, does somebody use this gem? Is it stable?Ruby,Rails:mysql2 gem,有人使用这个 gem 吗?稳定吗?
【发布时间】:2010-06-08 20:57:00
【问题描述】:

我找到了mysql2 gem。它适用于 ruby​​ 1.9 和 utf8 编码(相对于 mysql gem)。

但我有疑问。有人在生产中使用这个宝石吗?性能测试呢?它比 mysql gem 快吗?稳定吗?

【问题讨论】:

    标签: mysql ruby-on-rails ruby


    【解决方案1】:

    mysql2 旨在作为现有mysql gem 的更现代的替换,它已经过时了一段时间。我还听说作者不再支持它,而是建议大家使用他的纯 ruby​​ 版本,因为它与更多的 Ruby 实现兼容(但慢得多)。

    mysql gem 的第一个问题是它不会在 C 中进行任何类型转换,它会返回 ruby​​ 字符串,然后您必须将其转换为正确的 ruby​​ 类型。在纯红宝石中这样做非常慢,并且会在堆上创建从一开始就不需要存在的对象。众所周知,Ruby 的 GC 是其缓慢的主要原因。所以最好避免它并尽可能多地使用纯 C。

    其次,它会在连接、发送查询和等待响应,甚至关闭连接时阻塞整个 ruby​​ VM。 mysqlplus 肯定有助于解决这个问题,但据我所知仅用于发送查询。

    mysql2 旨在解决这些问题,同时保持 API 极其简单。 Eric Wong(Unicorn 的作者)贡献了一些很棒的补丁,使几乎所有东西都成为非阻塞和/或在 Ruby 中发布 GVL。 Mysql2::Result 类实现了 Enumerable,所以如果你知道如何使用数组,你就知道如何使用它。

    我只知道目前只有少数人在生产中使用它,但 Twitter、WorkingPoint 和 UserVoice 也在对其进行评估。

    我也在与 Yehuda 讨论它是 Rails 3 发布时的推荐/默认设置。它的一些技术和优化也将很快被引入 DataObjects 的do_mysql 驱动程序中。

    ActiveRecord 驱动程序目前应该相当稳定。您需要做的就是安装 gem,然后将 database.yml 中的适配器名称更改为 mysql2

    如果您有兴趣使用它,请尝试一下。如果您发现任何问题,我会尽快推送修复;)

    【讨论】:

    • 感谢您的完整回答!我将尝试在生产中使用 mysql2 gem!听起来很漂亮。 :)我发现了一个问题:github.com/brianmario/mysql2/issues#issue/25。这是关于 rake db:drop in rails3 项目 :)
    • 您能发表一下您的经历吗?它是否可以作为替代品使用?任何性能/稳定性问题?
    【解决方案2】:

    mysql2 现在是 rails 3 中的默认设置

    【讨论】:

      【解决方案3】:

      有点晚了 - 但我在几个网站的生产环境中使用 mysql2,并且发现它非常稳定,因为几周前解决了连接关闭的一些问题。

      【讨论】:

        【解决方案4】:

        如果有人想在 Rails 3.0.0 for Windows 中使用 mysql gem 而不是 mysql2 gem,我写了一篇简短的文章来解释how to tweak the rails app generator

        【讨论】:

          【解决方案5】:

          确保按照此处的答案将“latin1”字符转换为“utf8”:

          UTF8 MySQL problems on Rails - encoding issues with utf8_general_ci

          【讨论】:

            【解决方案6】:

            仅供参考,当使用带有 Rails 3.0.11 的 mysql2 (0.2.x) 时,我不得不将我的 RubyGems 版本从 1.8.15 降级到 1.8.10。否则乘客会呕吐...

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-04-14
              • 1970-01-01
              相关资源
              最近更新 更多