何时不应使用Cassandra?

227

最近有很多与 Cassandra 相关的讨论。

Twitter、Digg、Facebook 等大型网站都在使用它。

什么时候需要使用Cassandra:

  • 需要使用Cassandra时
  • 不需要使用Cassandra时
  • 使用关系型数据库替代Cassandra时

8
可能应该添加一个警告?这基本上只涉及NoSQL和关系型数据库的比较,这在我的个人看法中很主观。 - Ed James
3
请问这个系统适合用于消息传递吗?我认为如果Twitter在使用它,那么应该是可以的,不过他们可能并没有在Twitter的所有功能中都使用它? - Luke
http://techblog.bozho.net/?p=232 - Bozho
18个回答

4

让我们来看一些真实世界的案例:

http://planetcassandra.org/apache-cassandra-use-cases/

在这篇文章中:http://planetcassandra.org/blog/post/agentis-energy-stores-over-15-billion-records-of-time-series-usage-data-in-apache-cassandra

他们详细阐述了为什么没有选择MySql,原因是数据库同步太慢。

(还由于2段提交、FK、PK)


Cassandra基于Amazon Dynamo论文

特点:

稳定性

高可用性

备份表现良好

读写比HBase(Java中的BigTable克隆)更好。

wiki http://en.wikipedia.org/wiki/Apache_Cassandra

他们的结论是:

We looked at HBase, Dynamo, Mongo and Cassandra. 

Cassandra was simply the best storage solution for the majority of our data.

截至2018年,

如果您需要后向支持,我建议使用ScyllaDB来替换经典的Cassandra。

Postgres kv插件也比Cassandra更快。不过它没有多实例可扩展性。


你不必只使用一种数据库技术。实际上,你可以组合使用,根据具体问题选择适当的技术。 - Pepito Fernandez

3
另一个使选择变得更容易的情况是当您想要使用聚合函数(如sum、min、max等)和复杂查询(如上述金融系统中的查询)时,关系型数据库可能比nosql数据库更方便,因为在nosql数据库上两者都不可能,除非您使用大量的倒排索引。如果您确实使用了nosql,则必须在代码中执行聚合函数或将它们单独存储在其自己的列族中,但这会使一切变得相当复杂,并减少您使用nosql所获得的性能。

CouchDB允许轻松计算聚合函数,如http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Reduce_Functions所示。从技术上讲,这是“在代码中”,但它并不像使用Cassandra那样“复杂”。 - user359996
2
其实我同意编写聚合代码可能需要一天的时间,但是你可以编写它以在后端服务器上运行,这将使用接近于0个数据库周期。使用SQL数据库,您只需编写一行即可获得结果,这可能需要5分钟,但每次运行时都会减慢整个数据库。因此,两种方法都有优缺点。例如,我的银行在夜间关闭所有网站访问约10到15分钟。他们肯定在使用COBOL,但这是一个非常相似的问题。 - Alexis Wilke

2

Cassandra是一个不错的选择,如果:

  1. 您的数据库不需要ACID属性。

  2. 您需要在数据库上进行大量和大规模的写入操作。

  3. 您需要与Big Data、Hadoop、Hive和Spark集成。

  4. 您需要实时数据分析和报告生成。

  5. 您需要一个出色的容错机制。

  6. 您需要一个同质系统。

  7. 您需要进行大量自定义调整。


1
如果您需要具有SQL语义的完全一致的数据库,Cassandra不是您的解决方案。Cassandra支持键值查找,而不支持SQL查询。Cassandra中的数据是“最终一致”的。对数据的并发查找可能会不一致,但最终查找是一致的。
如果您需要严格的语义并需要支持SQL查询,请选择其他解决方案,如MySQL、PostGres或将Cassandra与Solr结合使用。

1
Cassandra查询语言(CQL)与SQL非常相似。实际上,我认为对于那些寻求类似SQL接口的人来说,CQL是Cassandra优于其他NoSQL选项的一个优势。 - arussell84
2
Cassandra 在技术上并不是最终一致性的。Cassandra 可以让你在一致性和可用性之间进行权衡。Cassandra 基本上是在平衡 CAP 定理。你可以拥有最终一致性写入,然后读取一致性,反之亦然,或者在两者上都保持一致,这完全取决于你的复制因子以及读/写水平。我知道答案中加上了“最终一致性”引号可能就是为了这个原因,但我觉得需要一些澄清。 - tsturzl

1

Apache cassandra是一个分布式数据库,用于管理大量结构化数据,跨多个普通服务器提供高度可用的服务和无单点故障。

该架构基于CAP定理,即可用性、分区容错和有趣的最终一致性。

如果您不在集群中存储大量数据,则不要使用它, 如果您不存储时间序列数据,则不要使用它, 如果您不分区服务器,则不要使用它, 如果您需要强一致性,则不要使用它。


强一致性保证,服务器始终采用写操作,并且每个读操作都提供最新的数据。 - Remario

0
根据DataStax的说法,当需要以下情况时,Cassandra不是最佳选择:
1.高端硬件设备。 2.需要ACID兼容性且无需回滚(例如银行交易)。

0

Mongodb拥有非常强大的聚合函数和表达式聚合框架。它具有许多开发人员习惯于使用的关系数据库世界中的功能。与Cassandra相比,它的文档数据/存储结构允许更复杂的数据模型。

当然,所有这些都伴随着权衡。因此,当您选择数据库(NoSQL、NewSQL或RDBMS)时,请查看您要解决的问题以及您的可扩展性需求。没有一个数据库可以解决所有问题。


0
  • 它不支持跨表的完整事务管理。
  • 不支持二级索引。
  • 必须依赖于 Elastic search / Solr 进行二级索引,并且必须编写自定义同步组件。
  • 不是 ACID 兼容系统。
  • 查询支持有限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接