【问题标题】:cassandra Read performance with Collectioncassandra 使用 Collection 读取性能
【发布时间】:2015-09-03 08:11:07
【问题描述】:

我在 cassandra 中定义了以下列族

CREATE TABLE metric (
period int,
rollup int,
tenant text,
path text,
time bigint,
data list<double>,
PRIMARY KEY ((tenant, period, rollup, path), time)
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='NONE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};

数据列表的大小会影响 cassandra 的读取性能吗?如果是,我们如何衡量它..?

问题在于,对于给定的路径/周期/汇总组合,从 cassandra 查询 Data-Set1 以获取 8640 行(其中每行的数据列表中的元素数为 90)所花费的时间超过了时间需要查询数据集 2,它是 8640 行数据(其中每行的数据列表中的元素数为 10)。

另外,如果我在 10 个用户同时访问 Data-Set1 的情况下运行性能测试,那么我开始在后端看到 cassandra 超时,并且它会在垃圾收集中花费大量时间,但是当我这样做时不会发生同样的情况同样通过查询 Data-Set2。

所以我得出结论,数据列表中的元素数量正在影响性能。

您是否在您的 cassandra 堆栈中看到类似的性能问题......?

【问题讨论】:

    标签: performance cassandra cql


    【解决方案1】:

    我认为一个系列中的 90 件商品不会有什么大不了的,但在你的情况下,我猜是这样。问题是当你查询一个集合列时,Cassandra 不能只返回集合的一部分。它必须返回整个列(集合)。该操作不是免费的,但我认为 90 次双打不会有什么大不了的。

    要尝试的一件事是打开跟踪。这应该让您了解 Cassandra 在运行查询时正在做什么。

    aploetz@cqlsh:stackoverflow> tracing on;
    

    通常,开启追踪功能会引导您找到铜像。

    它在垃圾收集上花费了很多时间

    您是否使用任何特殊的 JVM 设置?每个节点有多少 RAM?中断正常操作的 GC 表明(对我而言)您的 JVM 堆设置可能存在问题。 Tuning Java Resources 上的 DataStax 文档表明您应该根据节点的 RAM 使用以下指南来调整堆大小:

    System Memory       Heap Size
    
    Less than 2GB       1/2 of system memory
    2GB to 4GB          1GB
    Greater than 4GB    1/4 system memory, but not more than 8GB
    

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2023-03-27
      • 2020-01-26
      • 2016-08-16
      • 2013-05-06
      • 2012-05-31
      • 2016-01-05
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多