【问题标题】:Getting the objects with similar secondary index in Riak?在 Riak 中获取具有相似二级索引的对象?
【发布时间】:2014-10-23 05:01:35
【问题描述】:

有没有办法以键/值格式获取位于一个相似二级索引值下的所有对象。我知道我们可以获得一个二级索引的键列表(bucket/{{bucketName}}/index/{{index_name}}/{{index_val}})。但不知何故,我的要求是,如果我也能得到所有的对象。如果有办法,我不想对每个键执行单独的查询以分别获取对象详细信息。

我对 Riak 完全陌生,我完全是一个前端人员,所以如果我问的问题属于新手级别,请多多包涵。

【问题讨论】:

    标签: ajax angularjs riak


    【解决方案1】:

    在 Riak 中,有时更好的方法是对每个键进行单独的查找。来自其他数据库,这似乎很奇怪,而且可能效率低下,但是您可能会发现您的查询在索引和一堆单个对象上的速度比一次对所有对象的 map/reduce 更快。

    尝试这两种方法,看看哪种方法最适合您的数据集 - 影响这一点的变量是:被查询数据的大小;每个文件的大小;集群的力量;加载集群下等。

    演示索引和单独获取的 Python 代码(如果您获取的数据很大,则此方法可以在客户端上提高内存效率,因为您不需要存储 all内存中的对象):

    query = riak_client.index("bucket_name", 'myindex', 1)
    query.map("""
        function(v, kd, args) {
            return [v.key];
        }"""
    )
    results = query.run()
    
    bucket = riak_client.bucket("bucket_name")
    for key in results:
        obj = bucket.get(key)
        # .. do something with the object
    

    演示所有对象的 map/reduce 的 Python 代码(返回 {key:document} 对象的列表):

    query = riak_client.index("bucket_name", 'myindex', 1)
    query.map("""
        function(v, kd, args) {
            var obj = Riak.mapValuesJson(v)[0];
            return [ {
                'key': v.key,
                'data': obj,
            } ];
        }"""
    )
    results = query.run()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多