一位的背景-这个问题涉及一个项目,运行于一个单一的小EC2实例,是关于迁移到一个介质中的一个。主要组成部分是Django、MySQL和大量的定制的分析工具python编写和爪哇,这不重 提升。同一台机器运行Apache。

该数据模型看起来像下面的-一个大量的实时数据流从各种传感器联网,并最理想的是,我想建立一个长期民意调查的做法,而不是目前的调查,每15分钟的做法(一种限制的计算统计数据和编写入数据库本身)。一旦数据来,我储存的原始版本中的 MySQL,我们的分析工具,在这些数据,储存统计数据,在另一些表格。所有这一切都是呈现的使用Django。

关系功能我需要-

  • 为了通过 [SliceRange在卡桑德拉的API似乎satisy此]
  • 小组通过
  • Manytomany之间的关系多个表 [Cassandra SuperColumns似乎做好一到许多]
  • 狮身人面像在这给了我一个很好的全文引擎,因此这是必要的。 [在卡桑德拉,Lucandra项目似乎满足这种需要]

我的主要问题是数据读取是极其缓慢(并写入没有那么热或者)。我不想扔了很多钱和硬件上它,现在,和我想的东西,可以很容易地用的时间。垂直扩MySQL不是微不足道的在这个意义上(或者便宜)。

所以基本上,之后,具有读到很多关于非sql和尝试的东西喜欢,Cassandra和伏地魔,我的问题是,

  • 在中EC2实例, 我会获得任何好处在读写转移到东西就像卡桑德拉? 这篇文章 (pdf)肯定似乎建议。目前,我想说几百写每分钟会的规范。对于阅读由于数据的变化,每5分钟左右,缓无效,已发生很快。在某些时候,它应该能够处理大量同时用户。该应用程序的性能,目前被杀死在MySQL做一些连接在大表即使索引创造的东西来了32千行时间超过一分钟来呈现。(这可能是一个项目的EC2虚拟化I/O)。表格的尺寸是周围的4-5百万行,并有大约5诸表。

  • 每个人都在谈论使用Cassandra在多个节点上,鉴于CAP理论和最终的一致性。但是,对于一个项目,这是刚刚开始成长, 是否有意义 部署一个节点cassandra服务器?是否有任何警告?例如,它可以替代MySQL作为后端Django?[是这样的建议?]

  • 如果我不移,我猜我就必须重写部分应用程序,以做更多的"文案",因为我必须做的多个查询来获取行。

  • 它会让任何感觉到的只是使用MySQL作为一个关键价值的商店 而不是一个关系引擎,去吗?这样我可以利用大量的稳定Api提供,以及一个稳定的发动机(和去的关系如需要)。(Brett泰勒的后从任何在这个- http://bret.appspot.com/entry/how-friendfeed-uses-mysql)

任何见解的人做了一个转变将不胜感激!

谢谢。

有帮助吗?

解决方案

Cassandra和其他分布式数据库可今天不提供这种临时查询支持你们用来从sql。这是因为你不能分发的查询与联performantly,因此强调的是非正规化,而不是。

然而,Cassandra0.6(beta版的正式出的明天,但你可以建立自0.6分支自己,如果你不耐烦)支持Hadoop地图/减少分析,这实际上声音像个好适合你。

Cassandra提供了优良的支持增加新的节点痛苦,甚至到一个初始的小组之一。

这就是说,在一个几百写/分钟内你要是现在mysql很长很长的时间。Cassandra是更好地是一个关键/价值储存(甚至是更好的,钥匙/columnfamily),但MySQL是更好地是一个关系数据库。:)

没有决支持卡桑德拉(或其他非sql数据库)。他们都在谈论做的事情为下一个版本后1.2,但根据说话的django开发在pycon,没有人真的知道什么这看起来像呢。

其他提示

如果你是一个关系数据库开发(我),我建议/指出:

  • 获得一些经验的工作与卡珊德拉之前提交其用于生产系统...尤其是如果生产系统具有一个硬最后期限完成。也许使用它作为后端的东西不重要的第一。
  • 它证明更具有挑战性的比我预期的要做到简单的事情,我认为理所当然的有关数据操作使用SQL引擎。特别是,索引编制数据和排序的结果集是非微不足道的。
  • 数据模式已经证明具有挑战性的。作为一个关系数据库的开发人员来表了很多行李...你必须愿意了解如何以模型数据非常不同。

这些事情说的,我强烈建议 的东西 在卡桑德拉。如果你像我一样,那么这样做会挑战你了解数据储存和使你重新考虑一个关系数据库的适合所有情况下outlook,我甚至都没有意识到我举行。

一些很好的资源,我们发现包括:

Django cassandra是一种早期的测试模式。也决不是由于没有-sql数据库。关键在Django对象是基于SQL(Django建议使用PostgreSQL).如果你只需要使用没有-sql(你可以混合sql和没有-sql在相同的应用程序)需要风险的使用没有-sql奥姆(它大大慢于传统SQL欧姆或直接使用没有-SQL存储)。或者你需要完全重写django奥姆.但在这种情况下,我可不想,为什么你需要Django。也许你可以用别的东西,像龙卷风?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top