通过非主键列

时间:2018-04-26 11:01:13

标签: cassandra data-modeling cqlsh secondary-indexes

我将历史时间序列数据存储到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。 现在我想从存储在value列中的json中获取一些键的记录。

  1. 我可以通过添加新的聚类列来创建重复的表 按要求。或
  2. 我能想到Secondary INDEX
  3. 我在表中有2千多万条记录。

    最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

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

您可以在此处找到进一步说明: https://docs.datastax.com/en/cql/3.3/cql/cql_using/useWhenIndex.html#useWhenIndex__when-no-index

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

答案 1 :(得分:0)

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