最近有很多关于卡桑德拉的谈话.
Twitter,Digg,Facebook等都使用它.
什么时候有意义:
用Cassandra,
不要使用Cassandra,而且
使用RDMS而不是Cassandra.
ajay.. 155
没有像银弹一样的东西,一切都是为解决具体问题而建立的,并且各有利弊.这取决于你,你有什么问题陈述,以及什么是最适合该问题的解决方案.
我会按照你问他们的顺序逐一回答你的问题.由于Cassandra基于NoSQL系列数据库,因此在我回答您的问题之前,了解为何使用NoSQL数据库非常重要.
为什么要使用NoSQL
对于RDBMS,做出选择非常简单,因为此类别中的所有数据库(如MySQL,Oracle,MS SQL,PostgreSQL)都提供了几乎与ACID属性相同的解决方案.在NoSQL方面,决策变得困难,因为每个NoSQL数据库都提供不同的解决方案,您必须了解哪一个最适合您的应用程序/系统要求.例如,MongoDB适用于系统需要无架构文档存储的用例.HBase可能适合搜索引擎,分析日志数据,或任何需要扫描巨大的二维无连接表的地方.Redis旨在为各种数据结构(如树,队列,链表等)提供内存搜索,并且非常适合制作实时排行榜,pub-sub类型的系统.同样,此类别中的其他数据库(包括Cassandra)适用于不同的问题陈述.现在让我们转到原始问题,然后逐一回答.
什么时候使用Cassandra
作为NoSQL系列的一部分,Cassandra提供了一个解决问题的解决方案,其中一个要求是拥有一个非常繁重的写入系统,并且您希望在存储的数据之上拥有一个响应迅速的报告系统.考虑Web分析的用例,其中为每个请求存储日志数据,并且您希望围绕它构建分析平台,以实时方式按浏览器,IP等计算每小时的点击次数.您可以参考此博客文章,以了解有关Cassandra适合的用例的更多信息.
何时使用RDMS而不是Cassandra
Cassandra基于NoSQL数据库,不提供ACID和关系数据属性.如果您对ACID属性有强烈要求(例如财务数据),那么Cassandra就不适合.显然,你可以为此做一个解决方法,但是你最终会编写大量的应用程序代码来模拟ACID属性,并且会很快失去市场.使用Cassandra管理这种系统对你来说既复杂又乏味.
何时不使用Cassandra
如果上述解释有意义,我认为不需要回答.
没有像银弹一样的东西,一切都是为解决具体问题而建立的,并且各有利弊.这取决于你,你有什么问题陈述,以及什么是最适合该问题的解决方案.
我会按照你问他们的顺序逐一回答你的问题.由于Cassandra基于NoSQL系列数据库,因此在我回答您的问题之前,了解为何使用NoSQL数据库非常重要.
为什么要使用NoSQL
对于RDBMS,做出选择非常简单,因为此类别中的所有数据库(如MySQL,Oracle,MS SQL,PostgreSQL)都提供了几乎与ACID属性相同的解决方案.在NoSQL方面,决策变得困难,因为每个NoSQL数据库都提供不同的解决方案,您必须了解哪一个最适合您的应用程序/系统要求.例如,MongoDB适用于系统需要无架构文档存储的用例.HBase可能适合搜索引擎,分析日志数据,或任何需要扫描巨大的二维无连接表的地方.Redis旨在为各种数据结构(如树,队列,链表等)提供内存搜索,并且非常适合制作实时排行榜,pub-sub类型的系统.同样,此类别中的其他数据库(包括Cassandra)适用于不同的问题陈述.现在让我们转到原始问题,然后逐一回答.
什么时候使用Cassandra
作为NoSQL系列的一部分,Cassandra提供了一个解决问题的解决方案,其中一个要求是拥有一个非常繁重的写入系统,并且您希望在存储的数据之上拥有一个响应迅速的报告系统.考虑Web分析的用例,其中为每个请求存储日志数据,并且您希望围绕它构建分析平台,以实时方式按浏览器,IP等计算每小时的点击次数.您可以参考此博客文章,以了解有关Cassandra适合的用例的更多信息.
何时使用RDMS而不是Cassandra
Cassandra基于NoSQL数据库,不提供ACID和关系数据属性.如果您对ACID属性有强烈要求(例如财务数据),那么Cassandra就不适合.显然,你可以为此做一个解决方法,但是你最终会编写大量的应用程序代码来模拟ACID属性,并且会很快失去市场.使用Cassandra管理这种系统对你来说既复杂又乏味.
何时不使用Cassandra
如果上述解释有意义,我认为不需要回答.
在评估分布式数据系统时,您必须考虑CAP定理 - 您可以选择以下两项:一致性,可用性和分区容差.
Cassandra是一个可用的分区容错系统,支持最终的一致性.有关更多信息,请参阅我写的这篇博客文章:NoSQL系统的可视指南.
Cassandra是一个特定问题的答案:当你拥有如此多的数据而不适合一台服务器时,你会怎么做?如何将您的所有数据存储在许多服务器上,不要破坏您的银行帐户,不要让您的开发人员疯狂?Facebook每天都会获得4TB的新压缩数据.这个数字最有可能在一年内增长两倍以上.
如果您没有这么多数据,或者您有数百万美元需要支付Enterprise Oracle/DB2集群安装以及设置和维护它所需的专家,那么您可以使用SQL数据库.
然而Facebook不再使用cassandra,现在使用MySQL几乎专门在应用程序堆栈中移动分区,以实现更快的性能和更好的控制.
NoSQL的一般概念是你应该使用最适合你的应用程序的数据存储.如果您有财务数据表,请使用SQL.如果您的对象需要复杂/慢速查询以映射到关系模式,请使用对象或键/值存储.
当然,您遇到的任何现实世界问题都介于这两个极端之间,并且两种解决方案都不是完美的.您需要考虑每个商店的功能以及使用其中一个的后果,这将非常具体地解决您要解决的问题.
除了上面给出的关于什么时候使用以及什么时候不使用Cassandra的答案,如果你决定使用Cassandra,你可能想要考虑不使用Cassandra本身,而是使用其中的许多表兄弟之一.
上面的一些答案已经指出各种"NoSQL"系统与Cassandra共享许多属性,有一些小的或大的差异,并且可能比Cassandra本身更适合您的特定需求.
此外,最近(最初询问这个问题几年后),发布了一个名为Scylla的Cassandra克隆(请参阅https://en.wikipedia.org/wiki/Scylla_(database)).Scylla是Cassandra在C++中的一个开源重新实现,它声称具有比原始Java Cassandra更高的吞吐量和更低的延迟,同时与它大多兼容(在功能,API和文件格式中).所以,如果你已经在考虑Cassandra,你可能也想考虑Scylla.
在部署Cassandra的过程中与某人交谈时,它并不能很好地处理多对多的问题.他们正在做一个黑客工作来进行初步测试.我和一位Cassandra顾问谈过这件事,他说如果你有这个问题,他就不会推荐它.