我最近在 Cassandra 上做了很多阅读,特别是如何构造行以利用索引/排序,但有一件事我仍然不清楚;您应该在列族 (CF) 行中包含多少个“索引”项(或过滤器,如果您愿意的话)?
具体来说:我正在构建一个应用程序,并将使用 Cassandra 来归档日志数据,我将使用这些数据进行分析。
分析搜索的示例类型将包括(按日期范围):
- 对特定站点部分的总访问量
- 按国家/地区划分的总访问量
- 流量来源
我打算以 JSON 格式存储整个日志对象,但是为了避免必须通过每个项目来获取基本数据,或者为了获取基本数据而创建多个 CF,我很想知道包含这些是否是个好主意上面的“过滤器”作为列(复合列段)?
例子:
Row Key | timeUUID:data | timeUUID:country | timeUUID:source |
======================================================
timeUUID:section | JSON Object | USA | example.com |
因此,从结构中可以看出,行键将是 timeUUID(例如每天)加上我想要获取统计信息的站点部分的复合键。这让我可以很容易地查询日期范围。
接下来,我的困境,列。带有 timeUUID 的复合列名称让我可以排序和做一个基于时间的切片,但是这个概念有意义吗?
当前的“最佳实践”是否可以接受这种类型的结构,还是会不赞成?是否建议为我要查询的每个指标创建一个单独的“索引”CF?(即使它像这样简单?)
我宁愿第一次就做对,而不是以后必须重构数据和重构我的应用程序代码。