【发布时间】:2023-03-27 13:59:02
【问题描述】:
我的 Cassandra 表具有以下架构
CREATE TABLE cachetable1 (
id text,
lsn text,
lst timestamp,
PRIMARY KEY ((id))
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='{"keys":"ALL", "rows_per_partition":"ALL"}' AND
comment='' AND
dclocal_read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
read_repair_chance=0.000000 AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};
上表包含 2.21 亿行(大约 16 GB 数据)。 CassandraDaemon 使用 4GB 堆空间运行,我为行缓存配置了 4GB 内存。我正在尝试像这样从我的 java 代码中运行选择查询
for(int i = 0; i < 1000; i ++)
{
int id = random.nextInt(20000000 - 0) + 0;
for(j = id; j <= id + 100; j++)
{
ls.add(j+"");
}
Statement s = QueryBuilder.select("lst","lsn").from("ks1" , "cachetable1").where(QueryBuilder.in("id",ls.toArray()));
s.setFetchSize(100);
ResultSet rs=sess.execute( s );
List<Row> lsr=rs.all();
for(Row rw:lsr)
{
//System.out.println(rw.toString());
count++;
}
ls.clear();
}
在上面的代码中,我试图获取 10 万条记录。但是读取/获取性能非常糟糕。获取 10 万行需要 400-500 秒。有没有更好的方法通过 Java 从 Cassandra 读取/获取记录?除了行缓存大小和 Cassandra 堆大小之外,是否需要进行一些调整?
【问题讨论】: