最近有很多关于卡桑德拉的话题。
Twitter, Digg, Facebook等都在使用它。
什么时候有意义:
使用卡桑德拉, 不用卡桑德拉,还有 使用RDMS而不是Cassandra。
最近有很多关于卡桑德拉的话题。
Twitter, Digg, Facebook等都在使用它。
什么时候有意义:
使用卡桑德拉, 不用卡桑德拉,还有 使用RDMS而不是Cassandra。
当前回答
NoSQL的一般思想是,您应该使用最适合您的应用程序的数据存储。如果您有一个财务数据表,请使用SQL。如果您的对象需要复杂/缓慢的查询才能映射到关系模式,请使用对象或键/值存储。
当然,你遇到的任何现实问题都处于这两个极端之间,没有一个解决方案是完美的。您需要考虑每个存储的功能以及使用其中一个的后果,这将非常具体于您试图解决的问题。
其他回答
another situation that makes the choice easier is when you want to use aggregate function like sum, min, max, etcetera and complex queries (like in the financial system mentioned above) then a relational database is probably more convenient then a nosql database since both are not possible on a nosql databse unless you use really a lot of Inverted indexes. When you do use nosql you would have to do the aggregate functions in code or store them seperatly in its own columnfamily but this makes it all quite complex and reduces the performance that you gained by using nosql.
Apache cassandra是一个分布式数据库,用于跨许多商用服务器管理大量结构化数据,同时提供高可用性服务,没有单点故障。
该架构完全基于上限定理,即可用性和分区容忍,有趣的是最终一致。
不要使用它,如果你不存储数据卷的机架集群, 如果您不存储时间序列数据,请不要使用, 不要使用如果你不分区你的服务器, 如果你要求强烈的一致性,请不要使用。
Mongodb有非常强大的聚合函数和一个富有表现力的聚合框架。它具有许多开发人员习惯于从关系数据库世界中使用的特性。例如,它的文档数据/存储结构允许比Cassandra更复杂的数据模型。
当然,所有这些都是有代价的。因此,当您选择数据库(NoSQL、NewSQL或RDBMS)时,请考虑您要解决的问题和可伸缩性需求。没有一个数据库可以完成所有的工作。
Right. It makes sense to use Cassandra when you have a huge amount of data, a huge number of queries but very little variety of queries. Cassandra basically works by partitioning and replicating. If all your queries will be based on the same partition key, Cassandra is your best bet. If you get a query on an attribute that is not the partition key, Cassandra allows you to replicate the whole data with a new partition key. So now you have 2 replicas of the same data with 2 different partition keys.
这就引出了你的下一个问题。什么时候不用卡桑德拉。正如我提到的,Cassandra通过为每个新的分区键复制完整的数据库来扩展。但你不能一遍又一遍地复制。因此,当你有大量的查询,即每个查询在where子句中有不同的列时,Cassandra不是一个好的选择。
现在是第三个问题。使用RDBMS的关键在于需要ACID属性。如果您正在构建类似于支付服务的东西,并且希望每个交易都是隔离的,每个交易要么完成要么根本不发生,即使系统出现故障,更改仍然是持久的,并且在交易完成之前和之后各银行账户的资金是一致的,那么RDBMS是帮助您实现这一目标的唯一选择。
这篇文章实际上解释了整个事情,特别是什么时候使用Cassandra或不使用(相对于其他一些NoSQL选项)问题的一部分——>选择最好的数据库。一定要去看看。
编辑:为了回答proximab评论中的问题,当我们想到银行系统时,我们立即认为“ACID是最好的解决方案”。但即使是银行系统也由几个子系统组成,这些子系统甚至可能不处理任何与交易相关的数据,如账户持有人的个人信息、账户对账单、信用卡详细信息、信用历史等。
All of this information needs to be stored in some database or the another. Now if you store the account related information like account balance, that is something that needs to be consistent at all times. For example, if you try to send money from account A to account B, then the money that disappears from account A should instantaneousy show up in account B, and it cannot be present in both accounts at the same time. This system cannot be inconsistant at any point. This is where ACID is of utmost importance.
另一方面,如果您正在保存信用卡详细信息或信用记录,不应该落入坏人之手,那么您需要一些只允许授权用户访问的东西。我相信这是卡桑德拉支持的。也就是说,像信用记录和信用卡交易这样的数据,我认为这是一个不断增长的数据。此外,你可以查询的数据也只有这么多,即它有非常有限的查询数量。这两个条件使Cassandra成为一个完美的解决方案。
NoSQL的一般思想是,您应该使用最适合您的应用程序的数据存储。如果您有一个财务数据表,请使用SQL。如果您的对象需要复杂/缓慢的查询才能映射到关系模式,请使用对象或键/值存储。
当然,你遇到的任何现实问题都处于这两个极端之间,没有一个解决方案是完美的。您需要考虑每个存储的功能以及使用其中一个的后果,这将非常具体于您试图解决的问题。