1

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

尽管文章说明了如何构建此类密钥的示例:

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

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

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

4

1 回答 1

2

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

  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) 并创建一个使用集合的存储桶。您可以为每个传感器创建一个集合,其中包含与第一个存储桶中该传感器关联的键列表。然后您可以遍历集合中的键并执行多次获取以返回所有关联的记录。

希望这能给你一些想法。

于 2014-12-17T14:41:02.070 回答