Accumulo:如何为数据建立索引以实现高效查询



我需要一个高效的索引模式来存储警报。每个警报具有以下属性:

  • alertId
  • 时间戳
  • 类型
  • 位置

我需要执行以下查询:

  • 在定义的日期范围内创建了多少个警报
  • 在定义的日期范围内创建了多少个X类型的警报
  • 在定义的日期范围内,从位置Y创建了多少个警报

我最初的想法是索引如下:

ROWID -> alertId_timestamp,
CF -> attribute (type, location),
CQ -> value

然而,我认为对于我的#2&3个查询用例。我应该如何索引我的数据?

如果你知道这些将是你唯一的查询,你可以这样插入你的数据:

RowID     |  CF    |  CQ    | Value 
Timestamp | "TYPE" | <type> | alertID
Timestamp | "LOC"  | <loc>  | alertID

是的,您正在插入2倍的数据,但这是"大数据",对吧,所以存储空间应该不是一个大问题。您的所有查询都是基于时间的,并且只是进行计数,因此您应该将时间戳作为RowID,这样您就可以对行执行Range,并使用fetchColumnFamily或在CF/CQ上筛选您想要的内容。如果你知道你只想寻找特定的类型/位置,你也可以尝试将CF/CQ组合在一起,比如"TYPE_Foo"one_answers"LOC_Boston",但如果你想找到所有/范围的类型/地点,这会限制你。请注意,您可能还想使用某种迭代器来进行服务器端聚合。Accumulo支持聚合吗?

最新更新