【问题标题】:How to evaluate the performance of Cassandra?如何评价 Cassandra 的性能?
【发布时间】:2016-03-16 08:37:46
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: mapreduce cassandra cassandra-2.0 query-performance


    【解决方案1】:

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

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

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

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

    确实,查询返回的记录数越多, 它的性能更差?

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

    在Cassandra中什么情况下使用mapreduce有用?

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

    【讨论】:

    • 关于第一个问题,如果我有两个表,A 和 B,具有相同的数据和相同的列,只是主键不同。如果我更改表 A 中的一行的值,这个更改是否可能会在表 B 中传播?
    • 嗨,彼得 - 还没有。基于我所见过的一些 JIRA,沿着这些方向有一些发展,但就目前而言,更新必须同时发生(来自应用程序)以保持表之间的一致性。
    【解决方案2】:
    1. 如果您的意思是如何在 Cassandra 中支持非规范化数据的一致性,答案是 - 仅使用自定义逻辑。但是一旦 Cassandra 不支持事务(关系数据库中的事务,而不是原子操作),这是一项相当困难的任务。实际上,如果您需要相关数据处于强一致状态,您应该使用关系数据库。
    2. 在某些方面确实有作用,但考虑得并不多。
    3. 这可能取决于查询本身,但通常情况下性能会降低,因为您需要通过网络传输更多数据。
    4. 例如,当您想要进行全表扫描时,将 MapReduce 与 Cassandra 结合使用可能会很有用。这与我们查询未索引字段时关系数据库所做的非常相似。他们进行全面扫描比较字段值。不过,MapReduce 逻辑可能更复杂。例如,出于分析目的。

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2012-08-08
      • 2014-05-15
      • 2012-02-02
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多