如何评价Cassandra的性能?

How to evaluate the performance of Cassandra?

我是 Cassandra 的新手。我研究了 Cassandra 数据库并进行了一些测试,我遇到了一些问题:

  1. 鉴于 Cassandra 鼓励数据的非规范化和重复,当存在于多个列族中的数据仅从一个列族更新时,如何保证数据一致性?

  2. table中的列数影响查询性能?

  3. 查询返回的记录数越大,性能越差是真的吗?

  4. Cassandra中的mapreduce在什么情况下有用?

Given that Cassandra encourage denormalization and duplication of
data, when data that are present in multiple column families are
updated from just one of the column families how data consistency is guaranteed?

这就是在 Cassandra 中引入 BATCH 的原因。即使使用 BATCH,您仍然处于分布式系统中,并且在对数据建模时需要这样思考。由于您没有具体问题,我们将继续从理论上讨论。

The number of columns in a table affects query performance?

与其说是列数,不如说是每个单独分区的大小。分区越大,Cassandra 的一些内部机制(例如压缩)就越难工作。如果您不熟悉数据在磁盘上的存储方式,我建议您查看 THIS 教程。

It's true that the greater the number of records returned by a query, its performance is worse?

这是物理学。更多数据 = 更多 IO、带宽、GC 收集 ETC 的对象。鉴于 Cassandra 是作为事务性数据存储构建的,它不是为超大数据 returns/full table 扫描构建的(很少有真正的分布式系统)。上面链接的教程很好地解释了。

What kind of circumstances is useful to use mapreduce in Cassandra?

如果您对 运行 Cassandra 上的分析感兴趣,我建议您使用 Spark,因为在商业和开放领域,已经有很多工作可以优化 Spark 和 Cassandra 的关系源级别。如果您对 Cassandra 的工作方式感到满意table,如果您有兴趣在 Cassandra 上进行任何类型的分析,我建议您查看 THIS 教程。它涉及商业产品,但 concepts/tutorials 也将适用于开源。

  1. 如果您的意思是如何在 Cassandra 中支持非规范化数据的一致性,答案是 - 仅使用自定义逻辑。但是一旦Cassandra不支持事务(关系数据库中事务的意思,不是原子操作),这是一个相当困难的任务。其实,如果你需要相关数据处于强一致状态,你应该使用关系型数据库。
  2. 它在某些方面确实如此,但考虑不多。
  3. 这可能取决于查询本身,但通常情况下性能会下降,因为您需要通过网络传输更多数据。
  4. 例如,当您想要进行完整 table 扫描时,将 MapReduce 与 Cassandra 结合使用可能会很有用。这与我们查询未索引字段时关系数据库所做的非常相似。他们进行全面扫描比较字段值。不过,MapReduce 逻辑可能更复杂。例如,出于分析目的。