Riak:按键前缀搜索



我是Riak的新手,我一直在阅读Riak文档中的这一章。它表明,通过向存储桶和键添加结构信息,可以克服键/值操作的一些限制。

尽管本文陈述了一个关于如何构建此类密钥的示例:

传感器数据键可以以 sensor_ 或 temp_sensor1_ 开头,后跟时间戳 (例如 sensor1_2013-11-05T08:15:30-05:00(

没有提到如何按键前缀(例如sensor1_(查询数据的方法。环顾堆栈溢出,我发现了这个问题。其中提到了MapReduce和键过滤作为可能的解决方案。但是有关密钥筛选器的文档指出,它们是即将弃用的功能。我还检查了 Riak 搜索作为一种可能的方法,但无法找到按键前缀查询数据的方法。

我的问题是:按键前缀搜索数据的最佳方法是什么?我将不胜感激一个例子。

搜索键前缀的最佳方法是,如果不需要,就不要这样做,即如果可以的话,围绕该搜索模式进行设计。执行此操作的主要方法是使用应用程序可以轻松计算的确定性密钥。也就是说,如果您无法避免构建应用程序以需要搜索键前缀,则可以做几件事(所有这些都有其缺点(。

  1. 关键筛选器 - http://docs.basho.com/riak/latest/dev/references/keyfilters/- 正如您已经指出的,这些筛选器已标记为已弃用,此时不建议使用。
  2. MapReduce - http://docs.basho.com/riak/latest/dev/advanced/mapreduce/- 如果你可以批量查询,但不适合实时查询,这是一个不错的选择。如果预计算查询有帮助,则可以缓存查询结果。
  3. Riak Search 2.0 (Solr( - http://docs.basho.com/riak/latest/dev/using/search/- 从应用程序的角度来看,这可能是最简单的实现方法,并允许使用以下查询来查询密钥:"curl "$RIAK_HOST/search/sensor?wt=json&q=_yz_rk:sensor1_*"'。使用搜索确实会比基于直接键的查询降低性能,但您可以缓存查询。
  4. 数据建模 - 如上所述,直接按键查询始终将提供最佳性能。一种选择是利用 Riak 的数据类型 (CRDT( 并创建一个使用集的存储桶。您可以为每个传感器创建一个集,其中包含与第一个存储桶中的该传感器关联的键列表。然后,您可以迭代集合中的键,并执行多获取以返回所有相关记录。

希望这能给你一些想法。

最新更新