database - name - cassandra使用场景




何时不使用Cassandra? (11)

@Paco对不起,你的泡沫破灭了,尤其是财务数据,交易一致性非常重要。 正如Cassandra等数据库所强调的那样,失败的脚本可能会产生副作用,其中可能包括一个表更新,另一个表不更新。 一个例子:100英镑从用户1的账户转移到用户2的账户。 交易记录在每个账户中,显示它从一个账户中删除并添加到另一个账户中。 当然这取决于你的设计。 在另一种情况下,向银行付款。 资金必须从一个帐户中删除并添加到另一个帐户。 缺乏一致性会导致资金从系统“失踪”或被重复计算。 无论哪种方式,银行都陷入困境。

事务一致性对业务至关重要的情况很多。 无论是由应用程序以安全有效的方式处理,还是数据库必须完全处理它,后者是“安全”选项。

通过cassandra缺乏联合支持也限制了它的使用,除非使用适当的其他应用程序。 在那个笔记上,缺少触发器功能,外键等等。它们最终归结为你所需要的。 例如,如果您是一家搜索服务提供商,并且拥有庞大的客户群,Cassandra可能就是一个完美的选择。 对于OLTP和另一方面的一些报告案例或较小的装载量,它可能完全不符合要求。

最近有很多与Cassandra有关的谈话。

Twitter,Digg,Facebook等都使用它。

什么时候有意义:

  • 使用Cassandra,
  • 不使用卡桑德拉和
  • 使用RDMS代替Cassandra。

Apache cassandra是一个分布式数据库,用于在许多商品服务器上管理大量结构化数据,同时提供高可用性服务并且没有单点故障。

该结构完全基于帽定理,该定理是可用性和分区容限,并且最终始终保持有趣。

不要使用它,如果你不在集群机架中存储数据量,如果你没有存储时间序列数据,请不要使用,如果你没有分配服务器,请不要使用,如果你需要强大的一致性,请不要使用。


NoSQL的基本思想是您应该使用最适合您的应用程序的数据存储区。 如果您有财务数据表,请使用SQL。 如果您的对象需要复杂/慢速查询映射到关系模式,请使用对象或键/值存储。

当然,你遇到的任何现实世界问题都是在这两个极端之间的某个地方,这两种解决方案都不是完美的。 您需要考虑每个商店的功能以及使用其中一种的后果,这对您尝试解决的问题非常具体。


卡桑德拉是一个很好的选择,如果:

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

  2. 数据库上会有大量的大量写入操作。

  3. 需要与大数据,Hadoop,Hive和Spark集成。

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

  5. 有一个令人印象深刻的容错机制的要求。

  6. 有一个同质系统的要求。

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


另一种使选择更容易的情况是当你想使用sum,min,max等复合查询的集合函数时(比如上面提到的财务系统),那么关系数据库可能比nosql数据库更方便,因为两者都是在nosql数据库中不可能,除非您真的使用了很多倒转索引。 当您使用nosql时,您必须在代码中执行集合函数,或将它们独立存储在自己的columnfamily中,但这会使它非常复杂并降低您使用nosql获得的性能。


在评估分布式数据系统时,您必须考虑CAP定理 - 您可以选择以下两项:一致性,可用性和分区容差。

Cassandra是一个支持最终一致性的可用分区容忍系统。 欲了解更多信息,请参阅我写的博客文章: NoSQL系统视觉指南


如果您需要具有SQL语义的完全一致的数据库,Cassandra不是您的解决方案。 Cassandra支持键值查找。 它不支持SQL查询。 卡桑德拉的数据是“最终一致的”。 并发查询数据可能不一致,但最终查找是一致的。

如果您需要严格的语义并需要对SQL查询的支持,请选择另一种解决方案,如MySQL,PostGres或将Cassandra与Solr结合使用。


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

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 : http://planetcassandra.org/blog/post/agentis-energy-stores-over-15-billion-records-of-time-series-usage-data-in-apache-cassandra

他们详细说明了他们没有选择MySql的原因是因为数据库同步速度太慢。

Cassandra就像Amazon Dynamo和其他高可用性NoSQL数据库一样。

功能稳定,可用性高。 备份执行尽可能快。 读和写

HBase更好,它也是一个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.

没有什么像一颗银弹,一切都是为了解决具体问题而建立的,并有其自身的优点和缺点。 这取决于你,你有什么问题陈述,什么是最适合该问题的解决方案。

我会尽量按照你问他们的顺序逐个回答你的问题。 由于Cassandra基于NoSQL系列数据库,因此在我回答您的问题之前,了解为什么要使用NoSQL数据库非常重要。

为什么要使用NoSQL

就RDBMS而言,做出选择是非常容易的,因为像MySQL,Oracle,MS SQL,PostgreSQL这样的所有数据库都提供了几乎相同的面向ACID属性的解决方案。 谈到NoSQL,这个决定变得很困难,因为每个NoSQL数据库都提供了不同的解决方案,您必须了解哪一个最适合您的应用/系统需求。 例如,MongoDB适合您的系统需要无模式文档存储的用例。 HBase可能适合搜索引擎,分析日志数据,或任何需要扫描庞大的二维无连接表的地方。 Redis旨在提供内存中搜索各种数据结构(如树,队列,链接列表等)的功能,可以非常适合制作实时排行榜和pub-sub类系统。 同样,这个类别中还有其他数据库(包括Cassandra),适用于不同的问题陈述。 现在让我们转到原始问题,并逐一回答。

何时使用Cassandra

作为NoSQL家族的一部分,Cassandra提供了一个解决方案,解决您的一个要求是写入系统非常繁重,并且您希望在存储的数据之上有一个相当响应的报告系统。 考虑Web分析的用例,其中为每个请求存储日志数据,并且您希望围绕它建立一个分析平台,以实时方式计算每小时,浏览器,IP等的点击次数。 您可以参考this博客文章,以更多地了解Cassandra适用的用例。

何时使用RDMS代替Cassandra

Cassandra基于NoSQL数据库,不提供ACID和关系数据属性。 如果您对ACID属性有强烈的要求(例如财务数据),Cassandra就不适合这种情况。 显然,你可以为此做一个解决方法,但是最终你会写很多应用程序代码来模拟ACID属性,并且会很快失去市场。 用Cassandra管理这种系统对你来说也是复杂而乏味的。

何时不使用Cassandra

如果上述解释有意义,我不认为需要回答。


除了上面给出的关于何时使用以及何时不使用Cassandra的回答,如果您决定使用Cassandra,您可能需要考虑不使用Cassandra本身,而是考虑不使用Cassandra本身,而是其中的许多表兄弟之一。

上面的一些答案已经指出了与Cassandra共享许多属性的各种“NoSQL”系统,这些系统有一些小的或很大的差异,并且可能比Cassandra本身更好,以满足您的特定需求。

此外,最近(最初提出这个问题后几年),一个名为Scylla的Cassandra克隆(见https://en.wikipedia.org/wiki/Scylla_(database) )被发布。 Scylla是C ++的Cassandra的开源重新实现,它宣称与原始的Java Cassandra相比具有显着更高的吞吐量和更低的延迟,并且与它大多兼容(功能,API和文件格式)。 所以如果你已经在考虑Cassandra,你也可以考虑Scylla。


  • 它不支持跨表的完整事务管理。
  • 二级索引不受支持。
  • 必须依赖弹性搜索/ Solr进行二级索引,并且必须编写自定义同步组件。
  • 不符合ACID标准的系统。
  • 查询支持有限。




cassandra