簡體   English   中英

MongoDb中優化復合索引搜索的算法

[英]Algorithm for optimising compound index search in MongoDb

我有一個集合X ,必須在其上應用過濾器。

篩選器另存為單獨的實體( 集合篩選器 ),並且它保存的唯一數據是字段名稱和應用於該字段名稱的條件

過濾器示例:

名字叫斯蒂芬,年齡在10、20之間

基本上,我需要改進的事實是,過濾器中的每個字段都是在創建過濾器時添加的索引。

唯一匹配的結構是過濾字段上的復合索引。

總之,問題是當我有一個類似的過濾器時:

名字叫斯蒂芬,年齡在10,20歲之間

我在MongoDb中的復合索引將為:{'名稱':1,'年齡':1}

但是,如果我添加另一個過濾器,則可以說:年齡為10,名稱為Adrian,身高在170180之間

復合索引為:{'Age':1,'Name':1,'Height':1}

{'名稱':1,'年齡':1} <> {'年齡':1,'名稱':1,'高度':1}

我該怎么做才能使最后一個索引與第一個索引和另一個索引相適應。

如果我還沒露骨的話,請告訴我。

解決此問題的最干凈的方法是索引交集 ,它目前正在開發中。 這樣,每個標准的索引就足夠了。

同時,我看到兩個選擇:

  1. 使用一個單獨的搜索數據庫,該數據庫根據您的條件返回相關的ID,然后在MongoDB中使用$in查詢實際文檔。 有很多工具都使用這種方法,但是這會增加很多開銷,因為您需要針對第二個數據庫進行編碼和管理,使數據保持同步等。
  2. 使用混合索引和“無限范圍查詢”的巧妙組合。 例如,您可以說,年齡(0,200)范圍內的查詢不會從結果集中丟棄任何人,高度查詢也不會在0到400之間。

那可能不是最干凈的方法,它的效率在很大程度上取決於查詢的細節,因此可能需要進行一些微調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM