2017-10-11 52 views
3

參考文獻:胡蜂 - 質子:定製桶裝&查詢

ID方案

Format: id:<namespace>:<document-type>:<key/value-pairs>:<user-specified> 

http://docs.vespa.ai/documentation/content/buckets.html 
http://docs.vespa.ai/documentation/content/idealstate.html 

其可以通過使用32到結構限定桶裝邏輯在用戶數據LSB在文檔ID格式(N/G選擇)。

然而,查詢邏輯並不十分清楚如何根據事先做出的決定將查詢路由到特定的存儲區域。

例如,如果我可以定義壓縮範圍的n(數字),則可以將數據分割成時間範圍(開始時間/結束時間)。所有標記爲文件的文檔都將放在同一個存儲桶中(這將按照配置的文檔數/文件大小進行拆分)。

但是,我該如何編寫一個搜索查詢數據索引在這種方式? 是否有可能指示處理器選擇特定存儲區或存儲區範圍(如果分配算法可能已經移動存儲區)?

回答

4

您可以通過指定streaming.groupname查詢屬性在查詢中選擇一個存儲桶。

要麼在HTTP請求通過添加

&streaming.groupname=[group] 

或在由

query.properties().set("streaming.groupname","[group]"). 

一個搜索器如果需要多個存儲桶,則使用參數streaming.selection代替,它接受任何文檔選擇表達:http://docs.vespa.ai/documentation/reference/document-select-language.html

要指定例如兩個桶,請使用set streaming.selection(在HTTP請求或搜索器),以

id.group=="[group1]" and id.group=="[group2]" 

http://docs.vespa.ai/documentation/streaming-search.html

需要注意的是流媒體搜索應該只用於當每個查詢只需要尋找一個或幾個水桶。它避免了建立反向索引,這在特殊情況下更便宜(僅)。

+0

作爲一個索引可以推理,流模式相當昂貴並且不支持阻塞。 在索引非常大的數據集(> 100億個文檔)時使用了自定義分段標準,採用鍵值對似乎是一個好主意。然而,這樣做會迫使我使用流式搜索,並且我想要操作的數據的大小將不會很好地處理高成本。 任何建議索引的方式能夠有自定義桶(colocating文檔),並獲得最佳性能和最小尺寸? – shwetank

+0

更具體地說,如果我不會採用鍵值代碼方案,我該如何優化查詢/搜索以針對我可以在索引本身時定義的窮舉集? 例如在時間範圍內購買的所有視頻廣告(這是廣告服務器上的一個已知且不斷增長的設置)。 如果將這些數據放入開放式分包方案中,那麼考慮到可見性延遲的最低成本查找是什麼。 – shwetank

+0

流式搜索可避免反向索引,這意味着只有在每個查詢中只搜索一小塊總數據時纔有意義,並且可以預先確定這些塊(通常用於個人數據)。 – Jon