是否有一種方法可以獲取鍵值/值格式下的所有對象,這些對象在一個相似的二級索引值下。我知道我們可以得到一個二級索引(桶/ {{bucketName}}/index/{{index_name}}/{{index_val}})的鍵列表。但不知何故,我的要求是如果我能得到所有的物體。我不希望爲每個關鍵字執行單獨的查詢,以便在有方法的情況下單獨獲取對象詳細信息。在Riak中獲取具有相似二級索引的對象?
我對Riak完全陌生,我完全是一個前端人物,所以如果我問的是新手級別,請耐心等待。
是否有一種方法可以獲取鍵值/值格式下的所有對象,這些對象在一個相似的二級索引值下。我知道我們可以得到一個二級索引(桶/ {{bucketName}}/index/{{index_name}}/{{index_val}})的鍵列表。但不知何故,我的要求是如果我能得到所有的物體。我不希望爲每個關鍵字執行單獨的查詢,以便在有方法的情況下單獨獲取對象詳細信息。在Riak中獲取具有相似二級索引的對象?
我對Riak完全陌生,我完全是一個前端人物,所以如果我問的是新手級別,請耐心等待。
在Riak中,有時候更好的辦法是對每個鍵進行單獨的查找。來自其他數據庫,這似乎很奇怪,可能效率低下,但是你可能會發現你的查詢將比索引和一堆單個對象得到更快,而不是一次去所有對象的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代碼演示的地圖/減少對所有對象(返回的列表{鍵:文檔}對象):
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()