mysql - 从 MySQL 切换到 Cassandra - 优点/缺点?

了解一些背景知识 - 这个问题涉及在单个小型 EC2 实例上运行的项目,并且即将迁移到中型实例。主要组件有Django、MySQL以及大量用python和java编写的自定义分析工具, 起重。同一台机器也在运行 Apache。

数据模型如下所示 - 大量实时数据来自各种联网传感器,理想情况下,我想建立一个长轮询方法,而不是当前每 15 分钟轮询一次的方法(计算统计数据和写入数据库本身的限制)。数据输入后,我将原始版本存储在 MySQL,让分析工具在这些数据上松散,并将统计信息存储在另外几张表中。所有这些都是使用 Django 呈现的。

我需要的关系特征 -

  • [Cassandra API 中的 SliceRange 似乎可以满足这一点]
  • 的顺序
  • 分组
  • 多个表之间的多对多关系[Cassandra SuperColumns 似乎适合一对多]
  • Sphinx 为我提供了一个不错的全文引擎,所以这也是必需品。 [在 Cassandra 上,Lucandra 项目似乎满足了这一需求]

我的主要问题是数据读取非常慢(写入也不那么热)。我现在不想在它上面投入大量资金和硬件,我更喜欢可以随时间轻松扩展的东西。从这个意义上说,垂直扩展 MySQL 并非易事(或便宜)。

基本上,在阅读了很多关于 NOSQL 的内容并尝试了 MongoDB、Cassandra 和 Voldemort 之类的东西之后,我的问题是,

  • 在中型 EC2 实例上,我是否会通过转移到 Cassandra 之类的东西在读/写方面获得任何好处? This article (pdf)似乎确实暗示了这一点。目前,我会说每分钟几百次写入将是常态。对于读取 - 由于数据每 5 分钟左右更改一次,因此缓存失效必须很快发生。在某些时候,它也应该能够处理大量并发用户。即使创建了索引,在 MySQL 对大型表进行一些连接时,应用程序的性能也会受到影响——大约 32k 行的东西需要一分钟以上的时间来呈现。 (这也可能是 EC2 虚拟化 I/O 的产物)。表的大小约为 4-5 百万行,大约有 5 个这样的表。

  • 鉴于 CAP 定理和最终一致性,每个人都在谈论在多个节点上使用 Cassandra。但是,对于一个刚刚开始发展的项目,是否有意义 部署单节点 cassandra 服务器?有什么注意事项吗?例如,它可以取代 MySQL 作为 Django 的后端吗? [这是推荐的吗?]

  • 如果我确实要转移,我猜我将不得不重写应用程序的某些部分来做更多的“管理”,因为我必须进行多次查找来获取行。

  • 将 MySQL 用作键值存储而不是关系引擎是否有意义?这样我就可以利用大量可用的稳定 API 以及稳定的引擎(并根据需要使用关系)。 (Brett Taylor 来自 Friendfeed 的帖子 - http://bret.appspot.com/entry/how-friendfeed-uses-mysql)

我们将不胜感激任何已经完成转变的人的见解!

谢谢。

最佳答案

Cassandra 和当今可用的其他分布式数据库不提供您习惯使用 sql 的那种即席查询支持。这是因为您无法通过连接高效地分发查询,因此重点是反规范化。

但是,Cassandra 0.6(明天正式发布测试版,但如果您不耐烦,您可以自己从 0.6 分支构建)支持 Hadoop map/reduce 进行分析,这听起来很适合您。

Cassandra 为轻松添加新节点提供了出色的支持,甚至可以添加到一个初始组。

也就是说,以每分钟几百次写入的速度,您可以在很长很长一段时间内使用 mysql。 Cassandra 在作为键/值存储(甚至更好,键/列族)方面要好得多,但 MySQL 在作为关系数据库方面要好得多。 :)

目前尚无对 Cassandra(或其他 nosql 数据库)的 django 支持。他们正在讨论为 1.2 之后的下一个版本做点什么,但根据与 pycon 的 django 开发人员的交谈,没有人真正确定那会是什么样子。

https://stackoverflow.com/questions/2332113/

相关文章:

mysql - 为什么 MySQL 允许没有聚合函数的 "group by"查询?

javascript - 哪些 MySQL 驱动程序可用于 node.js?

sql - 从表中删除所有

mysql - 如何在不丢失列数据的情况下更改 MySQL 表的列位置?

mysql - MySQL中给定子字符串的最后一个索引

sql - MySQL:比较两个表之间的差异

sql - MySQL GROUP BY 两列

sql - 如何查找具有包含小写字母的值的行

mysql - 无法通过 phpmyadmin 导入数据库 文件过大

python - 如何将数据插入 MySQL 数据库?