选择数据库技术

时间:2010-01-22 05:47:24

标签: ruby mongodb couchdb cassandra tokyo-cabinet

我们正准备建立一个在线平台(API,服务器,数据,Wahoo!)。对于上下文,假设我们需要构建类似于twitter的东西,但是在现场活动周围组织评论(推文)。有关实况事件本身的信息必须尽可能快速且一致地提供给客户,而关于事件的评论可能需要等待一段时间才能交付。在现场活动结束后,我们会读得很重。

可扩展性非常重要。我们想开始租用VPS切片,并从那里开始扩展。我是云的忠实粉丝,并希望尽可能长时间留在那里。我们可能会使用红宝石。

我确信我想尝试文档存储而不是RDBMS。我喜欢无模式存储的想法,以及通过关注键值来实现更容易扩展的承诺。

问题是我不知道哪种技术最适合我们的平台。我看过Couch,Mongo,Tokyo Cabinet,Cassandra和带有blobbed文档的RDBMS。有没有帮助为这个特定的工作选择合适的工具?

3 个答案:

答案 0 :(得分:7)

通过BJ Clark查看NO SQL备选方案比较。

  

可扩展性非常重要。

然后你需要考虑他博客的摘录:

  1. 东京内阁 - 不扩展
  2. Redis - 不缩放
  3. Project Voldemort - scale
  4. MongoDB - 限制(已实施分片)
  5. 卡桑德拉 - 鳞片
  6. Amazon S3 - 缩放
  7. 沙发 - 无法扩展Clustering& replication)
  8. MySQL - 无法扩展
  9. 考虑HyperTable。这也是No-SQL替代方案中的一个重要竞争者。它是Google BigTable概念的开源实现。 我相信它的扩展性很好,因为它被中国搜索引擎百度和娱乐门户Rediff广泛使用。

    你在说:

      

    有关直播活动的信息   本身必须以交付方式交付给客户   尽可能快速一致   而关于该事件的评论可以   可能要再等一会儿了   交付。之后我们会读得很重   现场活动结束。

    这就像Twitter的方法。您的编程语言选择也非常重要,因为Twitter最初使用Ruby进行后端邮件传递,但they were saying这不是正确的选择,他们已将整个邮件传递系统移动到Scala语言。

    他们仍在使用Ruby作为前端。如果您希望使用非常适合可扩展环境的高度可靠,容错系统,那么您应该考虑ScalaErlang

答案 1 :(得分:1)

Ramesh有一个很好的总结。我想补充一点,Cassandra拥有比vanilla Dynamo克隆(如Voldemort或Dynomite)更丰富的数据模型:具有命名,排序列而不仅仅是键/值的行。 Cassandra正在被Twitter,Mahalo,Ooyala,SimpleGeo,WebEx和其他人(http://n2.nabble.com/Cassandra-users-survey-td4040068.html)使用,其中至少有一些在EC2或机架式云服务器上运行Cassandra集群。

答案 2 :(得分:1)

如果要水平扩展(在多个节点上分布数据),则必须考虑CAP定理。

http://www.julianbrowne.com/article/viewer/brewers-cap-theorem

这不是一件容易的事,但你必须选择,总会有某种折衷。