数据模型如下-大量实时数据从各种网络传感器流式传入,理想情况下,我希望建立长轮询方法而不是当前每15分钟轮询一次的方法(计算统计数据并将其写入数据库本身的限制)。一旦数据进来,我就把原始版本存储在MySQL中,让分析工具对这些数据进行处理,并在另外几个表中存储统计数据。所有这些都是使用Django呈现的。
我需要的关系特性包括-
按[Cassandra API中的SliceRange似乎可以满足此要求]排序 按组排序 多对多关系[Cassandra SuperColumns似乎很适合一对多关系] Sphinx给我一个很好的全文搜索引擎,所以这也是必需品。[在Cassandra上,Lucandra项目似乎可以满足这个需求] 我的主要问题是数据读取非常缓慢(写入也不太好)。我不想现在花很多钱和硬件在上面,我更喜欢一些可以随着时间轻松扩展的东西。垂直扩展MySQL在这个意义上不是微不足道的(或者不便宜)。
因此,实际上,在阅读了很多关于NOSQL的文章并尝试了MongoDB、Cassandra和Voldemort等工具之后,我的问题是,
在中等规模的EC2实例上,如果我转向使用Cassandra之类的东西,是否会获得读写方面的任何好处?这篇文章(pdf)确实似乎是这样建议的。目前,我想说每分钟几百次写入可能是正常情况。对于读取-由于数据每5分钟左右更改一次,所以缓存失效必须非常快。在某些时候,它应该能够处理大量并发用户。即使创建了索引,当前的应用程序性能在MySQL上执行一些大型表的连接时也会受到影响-大约需要超过一分钟才能呈现32k行之类的内容。(这也可能是EC2虚拟化I/O的一个副作用)。表的大小约为400-500万行,有大约5个这样的表。
每个人都谈论在多个节点上使用Cassandra,考虑到CAP定理和最终一致性。但是,对于一个刚开始增长的项目,部署一个单节点Cassandra服务器是否有意义?有什么注意事项吗?例如,它是否可以替换Django的后端MySQL?[这是推荐的吗?]
如果我确实转移了,我猜我将不得不重写应用程序的部分来执行更多的“行政工作”,因为我必须进行多次查找才能获取行。
仅将MySQL用作键值存储而不是关系引擎,这是否有任何意义,并采取这种方式?这样,我可以利用大量可用的稳定API以及稳定的引擎(并在需要时进行关系处理)。 (Brett Taylor在Friendfeed上的帖子-http://bret.appspot.com/entry/how-friendfeed-uses-mysql)
非常感谢那些已经转换过去的人提供的任何见解!
谢谢。