2014-10-22 45 views
0

是否有一種方法可以獲取鍵值/值格式下的所有對象,這些對象在一個相似的二級索引值下。我知道我們可以得到一個二級索引(桶/ {{bucketName}}/index/{{index_name}}/{{index_val}})的鍵列表。但不知何故,我的要求是如果我能得到所有的物體。我不希望爲每個關鍵字執行單獨的查詢,以便在有方法的情況下單獨獲取對象詳細信息。在Riak中獲取具有相似二級索引的對象?

我對Riak完全陌生,我完全是一個前端人物,所以如果我問的是新手級別,請耐心等待。

回答

0

在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() 
相關問題