按非主键列搜索 Cassandra 的最佳方法

Best way to search Cassandra by Non primary key column

我正在将历史时间序列数据存储到 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'
};

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

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

我在 table 中有 20 多万条记录。

最好的方法是什么?

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

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

我不确定你所说的创建辅助 table 是什么意思,但它可以解决你的问题。例如,如果您计划将 json 完全分解为列,然后在相关列上使用索引。 如果您可以在 post.

中添加一些示例,将会更容易理解您的问题

请使用 DSE Cassandra 的 Solr 或 Spark 特性,它为非主键列提供了有用的功能。