Ruby,Rails:mysql2 gem,有人使用这个gem吗?它稳定吗?

时间:2010-06-08 20:57:01

标签: mysql ruby-on-rails ruby

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

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

6 个答案:

答案 0 :(得分:66)

mysql2是现有mysql宝石的更现代的替换,现在已经陈旧了一段时间。我还听说作者不再支持它,而是建议每个人都使用他的纯ruby版本,因为它与更多Ruby实现兼容(但很多更慢)。

mysql gem的第一个问题是它不会在C中进行任何类型转换,它会为您提供返回ruby字符串,然后您必须转换为适当的ruby类型。在纯ruby中执行此操作非常慢,并且在堆上创建从不需要首先存在的对象。众所周知,Ruby的GC是它缓慢的主要原因。所以最好避免它,尽可能多地使用纯C。

其次是它在连接,发送查询和等待响应,甚至关闭连接时阻止整个 ruby​​ VM。 mysqlplus肯定有助于解决此问题,但仅限于我知道的发送查询。

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

我现在只知道有几个人在生产中使用它,但它也在Twitter,WorkingPoint和UserVoice上进行评估。

我还在与Yehuda进行谈判,讨论它是Rails 3发布时的推荐/默认值。它的一些技术和优化也将很快被带入DataObjects的do_mysql驱动程序。

ActiveRecord驱动程序目前应该非常可靠。您需要做的就是安装gem,并将database.yml中的适配器名称更改为mysql2

如果您对使用它感兴趣,请尝试一下。如果你发现任何问题,我会迅速推出补救措施;)

答案 1 :(得分:11)

mysql2现在是rails 3中的默认值

答案 2 :(得分:5)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

请确保将“latin1”字符转换为“utf8”,并按照以下答案进行操作:

UTF8 MySQL problems on Rails - encoding issues with utf8_general_ci

答案 5 :(得分:0)

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