在Riak中获取具有类似二级索引的对象?

时间:2014-10-22 10:56:10

标签: ajax angularjs riak

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

我对Riak来说是全新的,我完全是一个前端人员,所以如果我问的问题是新手级别,请耐心等待。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

Python代码演示所有对象的map / reduce(返回{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()