cassandra - 按非主键列搜索 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 中的一些键来获取记录。
- 我可以通过根据要求添加新的聚类列来创建重复表。或者
- 我能想到Secondary INDEX
我在表中有 20+ 百万条记录。
最好的方法是什么?
解决方案
如果我的理解是正确的,您将价格数据作为 json 存储在您的值列中。我认为基本上定义了一个高基数列。在这种情况下,特别是如果您有很多记录,则不建议对其进行索引。
你可以在这里找到进一步的解释: https ://docs.datastax.com/en/cql/3.3/cql/cql_using/useWhenIndex.html#useWhenIndex__when-no-index
我不确定创建辅助表是什么意思,但它可以解决您的问题。例如,如果您打算将 json 完全分解为列,然后在相关列上使用索引。如果您可以在帖子中添加一些示例,将更容易理解您的问题。
推荐阅读
- elasticsearch - 有没有办法优化这个 CrateDB 关系查询?
- c# - 清除 Web 浏览器 cookie winforms C#
- c# - IEnumerable 到 DB 中的字符串
- java - 如何在 java-gnome 中创建自定义信号?
- android - 真值表 (Kotlin Android Studio)
- c++ - QT C++ 删除带有 * 的文件(名称包含)
- javascript - 将获取的数据存储在父组件中,什么是标准的 React 实践?
- javascript - 没有“访问控制允许来源”。我们应该如何解决?
- react-native - 如何在地图上绘制商店点(反应原生)
- ios - 如何最好地将巨大的 .sqlite 数据库移动到旧的低内存 iOS 设备上的新目录?