Cassandra和行缓存

时间:2016-09-21 14:59:07

标签: cassandra

我想在Cassandra中使用行缓存,但我不明白它是如何工作的。 我在cassandra.yaml(2GB分配)中启用了行缓存并更改了架构:

ALTER TABLE d
with caching = {
    'keys' : 'ALL',
    'rows_per_partition' : '36000'
};

密钥缓存工作正常,命中率为90%,而对于行缓存,我从nodetool info看到这些数字:

Row Cache : entries 2, size 2 bytes, capacity 1.95 GB, 1620 hits, 39699640 requests, 0.000 recent hit rate, 0 save period in seconds

如您所见,缓存只包含2个条目,而我已对该表上的所有条目执行了4M +查询。

有什么想法吗?我应该调查什么才能理解为什么不使用行缓存?

更新1 感谢Chris,我已经用row_cache_save_period = 14400重新配置了集群。但是我没有看到任何变化。

Row Cache : entries 0, size 0 bytes, capacity 1.95 GB, 0 hits, 85098 requests, 0.000 recent hit rate, 14400 save period in seconds

更新2 这是架构定义:

CREATE TABLE d_t (
    id bigint,
    xid bigint,
    ts timestamp,
    avg double,
    ce double,
    cg double,
    p double,
    w double,
    c double,
    sum double,
    last double,
    max double,
    min double,
    p75 double,
    p90 double,
    p95 double,
    squad double,
    sumq double,
    wavg double,
    weight double,
    PRIMARY KEY ((id), xid, ts)
) WITH CLUSTERING ORDER BY (xid DESC, ts DESC)
and  compaction = {'class': 'SizeTieredCompactionStrategy'} 
and gc_grace_seconds=86400
and caching = { 'keys' : 'ALL', 'rows_per_partition':'36000' }
and min_index_interval = 2
and max_index_interval = 20;

更新3

使用Cassandra 3.0.9

2 个答案:

答案 0 :(得分:3)

您设置了cmake_minimum_required(VERSION 3.4.1) set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=gnu++11") include_directories(.) include_directories(./other) set(my_SRCS jniInterface.cpp etc.cpp) add_library(mylibrary SHARED ${my_SRCS}) target_link_libraries(mylibrary atomic log) 选项。您还需要将row_cache_size_in_mb设置为row_cache_save_period(默认值)。这会禁用它。这显示在消息的0部分。

答案 1 :(得分:1)

我明白了。与其他用户共享。 在3.0.x行缓存实现中存在一些错误,并且最有问题的一点是'聚类顺序由'条款。删除order by后,行缓存开始工作。我已经在3.9上对此进行了测试。 但是,如果where条件仅包含分区键,则使用行缓存。如果指定了群集列上的过滤器,则不评估缓存。 这真的很奇怪,但就是这样。以下是更多详细信息:https://issues.apache.org/jira/browse/CASSANDRA-8646