在 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()