首页 > 解决方案 > 按非主键列搜索 Cassandra 的最佳方法

问题描述

我将历史时间序列数据存储到 Cassandra 中。

cassandra@cqlsh>CREATE TABLE data."InstrumentTimeSeries" (
    key blob,
    column1 bigint,
    value blob,
    PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE
AND bloom_filter_fp_chance = 0.01
AND comment = ''
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE'
AND caching = {
    'keys' : 'ALL',
    'rows_per_partition' : 'NONE'
}
AND compression = {
    'sstable_compression' : ''
}
AND compaction = {
    'class' : 'SizeTieredCompactionStrategy'
};

在“值”列中,我在序列化之后存储了整个 json。现在我想根据存储在 value 列中的 json 中的一些键来获取记录。

  1. 我可以通过根据要求添加新的聚类列来创建重复表。或者
  2. 我能想到Secondary INDEX

我在表中有 20+ 百万条记录。

最好的方法是什么?

标签: cassandradata-modelingcqlshsecondary-indexes

解决方案


如果我的理解是正确的,您将价格数据作为 json 存储在您的值列中。我认为基本上定义了一个高基数列。在这种情况下,特别是如果您有很多记录,则不建议对其进行索引。

你可以在这里找到进一步的解释: https ://docs.datastax.com/en/cql/3.3/cql/cql_using/useWhenIndex.html#useWhenIndex__when-no-index

我不确定创建辅助表是什么意思,但它可以解决您的问题。例如,如果您打算将 json 完全分解为列,然后在相关列上使用索引。如果您可以在帖子中添加一些示例,将更容易理解您的问题。


推荐阅读