【发布时间】:2020-08-29 02:31:30
【问题描述】:
我在 Scylladb 中有一张这样的表。为了清楚起见,我从下表中删除了很多列,但总的来说,这张表总共有大约 25 列。
CREATE TABLE testks.client (
client_id int,
lmd timestamp,
cola list<text>,
colb list<text>,
colc boolean,
cold int,
cole int,
colf text,
colg set<frozen<colg>>,
colh text,
PRIMARY KEY (client_id, lmd)
) WITH CLUSTERING ORDER BY (lmd DESC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'}
AND comment = ''
AND compaction = {'class': 'TimeWindowCompactionStrategy', 'compaction_window_size': '1', 'compaction_window_unit': 'DAYS'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 172800
AND max_index_interval = 1024
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
现在我们的查询模式是这样的。我的IN 子句中可以有多个50 clientIds。
select * FROM testks.client WHERE client_id IN ? PER PARTITION LIMIT 1
几个问题:
- 在线阅读后,由于明显的性能原因,
IN子句似乎不好,所以有没有办法针对我的查询模式优化我的表,或者 Cassandra/Scylladb 不是这个的好用例? - 我们使用 C# 驱动程序执行上述查询,我们发现我们的数据模型和查询模式存在性能问题。执行单个客户端 ID 异步更好还是我应该继续使用所有客户端 ID 进行
IN子句查询?
我们在一个 DC 中运行 6 个节点集群,RF 为 3。我们作为本地仲裁进行读/写。
【问题讨论】:
标签: database-design cassandra scylla