我想在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
答案 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