如何评估Cassandra的性能?

时间:2015-12-10 16:05:12

标签: mapreduce cassandra cassandra-2.0 query-performance

我是Cassandra的新人。我已经研究并对Cassandra数据库进行了一些测试,我得到了一些问题:

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

  2. 表中的列数会影响查询效果吗?

  3. 确实,查询返回的记录数越多,其性能就越差?

  4. 在Cassandra中使用mapreduce有什么用处?

2 个答案:

答案 0 :(得分:2)

  

鉴于Cassandra鼓励非正规化和重复   数据,当多列系列中存在的数据为
时   仅从其中一个列族更新数据一致性   保证?

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

  

表中的列数会影响查询性能吗?

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

  

查询返回的记录数越大越好,   它的表现更差?

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

  

在Cassandra中使用mapreduce有什么用处?

如果您对在Cassandra上运行分析感兴趣,我建议使用Spark,因为在商业和开源级别上已经有很多工作要优化Spark和Cassandra的关系。当您对Cassandra的工作原理感到满意时,如果您对在Cassandra上进行任何类型的分析感兴趣,我建议您查看THIS教程。它讨论商业产品,但概念/教程也适用于开源。

答案 1 :(得分:0)

  1. 如果你的意思是如何支持Cassandra中非规范化数据的一致性,答案 - 只使用自定义逻辑。但是一旦Cassandra不支持事务(关系数据库中的事务意义,而不是原子操作),这是一项相当困难的任务。实际上,如果您需要相关数据处于强一致状态,则应使用关系数据库。
  2. 它在某种程度上确实存在,但没有那么多考虑它。
  3. 这可能取决于查询本身,但通常情况下性能会下降,因为您需要通过网络传输更多数据。
  4. 例如,当您想要进行全表扫描时,使用MapReduce和Cassandra可能很有用。它与查询未索引字段时关系数据库的作用非常相似。他们进行全扫描比较字段值。但是,MapReduce逻辑可能更复杂。例如,用于分析目的。