Riak:按键前缀搜索

时间:2014-12-17 10:23:17

标签: erlang riak riak-search

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

虽然文章陈述了如何构建这样一个密钥的例子:

  

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

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

我的问题是:按密钥前缀搜索数据的最佳方法是什么?我非常感谢一个例子。

1 个答案:

答案 0 :(得分: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&#34 ; $ RIAK_HOST /搜索/传感器重量= JSON&安培; q = _yz_rk:传感器1 _ *"&#39 ;.使用搜索确实会对直接基于密钥的查询产生性能影响,但您可以缓存查询。
  4. 数据建模 - 直接通过密钥查询总是能够提供如上所述的最佳性能。一种选择是利用Riak的数据类型(CRDT)并创建一个使用集合的存储桶。您可以为每个传感器创建一个集合,其中包含与第一个存储桶中的传感器关联的键列表。然后,您可以迭代集合中的键并执行多次获取以返回所有相关记录。
  5. 希望这会给你一些想法。