Cassandra的生产是否适合Ruby on Rails?

时间:2010-03-04 20:18:34

标签: ruby-on-rails ruby-on-rails-plugins cassandra gem

我正在研究一个正在考虑使用Cassandra作为数据库的项目。我们希望最终迁移到Cassandra,即使我们使用MySQL开始,因为它具有可扩展性。我知道像Facebook,Digg和最近的Twitter这样的大公司正在使用Cassandra,但我不相信任何这些网站都会使用Rails。我的问题是使用Ruby on Rails使用Cassandra是否可行。需要考虑的要点:

  1. 我们非常依赖Authlogic gem。切换到Cassandra会影响它的工作原理吗?
  2. Cassandra有没有成熟的红宝石客户?看看Github,似乎fauna's client (now twitters's client)是最成熟的。有人有过生产经验吗?
  3. 感谢任何提示。

5 个答案:

答案 0 :(得分:16)

Twitter正在大多数前端运行rails。 Fauna的客户端实际上是由twitter构建和发布的,因此您可以非常肯定它在大型工作负载上是最新且稳定的。查看提交的历史表明,经常会有很多改进,这很好。

最有可能需要自定义Authlogic才能与Cassandra一起正常工作。特别是,它似乎提供了基于named_scope和关系数据的某些方法。

看来有人在Authlogic中为DataMapper支持构建了一个插件:http://twitter.com/collintmiller/statuses/2064046718。您可以将其作为使其与Cassandra兼容的起点。

祝你好运!

答案 1 :(得分:9)

我不认为从MySQL开始然后转移到Cassandra是一个好主意。

Cassandra是一个NoSQL解决方案,而MySQL是一个“经典”的SQL驱动数据库。

这意味着您的模型会有所不同。

如果从MySQL开始,您将不得不依赖ActiveRecord来创建模型。如果您随后更改为Cassandra,则必须将所有模型更改为与NoSQL兼容的中间件(例如BigRecord)。这不仅意味着更改模型,还意味着使用它们的控制器(因为它们的界面会有所不同)。

这就是说,Cassandra等应该用于非常苛刻的应用程序 - 比如twitter。

其他网络应用程序的数量级不那么强 - 你确定你还需要Cassandra吗?

PostgreSQL和精心设计的数据库在98%的时间里都足够好。

答案 2 :(得分:7)

  

如果您更改为Cassandra,则必须将所有模型更改为NoSQL

这根本不是真的。如果你的编程方式使你的MySQL数据库加载了大量的连接,那么是的,你可能会遇到问题。当我们启动MySQL路由时,我们从一开始就尽可能地避免了连接。然后,当我们开始迁移到Casandra时,它非常简单,我们首先只使用1个模型。然后一起说4个模型。等等。运作良好。事实上,当你阅读twitter的采访时,你会注意到他们在同一模型上并行运行了MySQL和Casandra一段时间:http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king

至于Authlogic,只要你愿意,你就可以将这部分保留在mySQL中,只需将它与你的Cassandra数据保持松散耦合。

答案 3 :(得分:5)

我正在研究Cassandra,MongoDB和CouchDB。

告诉哪个开发人员支持最多的一种方法是检查每个最高评级github项目的观察者数量。至少作为一个粗略的估计。

现在是

852 - MongoDB http://github.com/jnunemaker/mongomapper

544 - CouchDB http://github.com/jchris/couchrest

178 - 卡桑德拉 http://github.com/fauna/cassandra

虽然,我不得不说最近宣布他们要搬到卡桑德拉的一些知名网站(Twitter,Digg,Reddit等),这对他们来说是一个很大的信任投票。

到目前为止,Mongo似乎拥有最多和最好的文档。他们的自动分片仍处于阿尔法状态,所以我认为它的规模仍然有待观察。

我刚刚开始了解所有这些内容,所以如果其他人有见解请分享。

答案 4 :(得分:1)

还有http://github.com/NZKoz/cassandra_object,IIANM建立在动物群客户之上。 “Cassandra Object为使用Cassandra提供了一个很好的API .CassandraObjects主要是与ActiveRecord对象兼容的鸭子类型,所以你的大多数控制器代码都可以工作正常...只有当你想要帮助开发时才在生产中使用它,现在有一堆粗糙的边缘。“