MongoDB – 使用模式構建之屬性模式

Kingmax發表於2019-06-27

簡單描述:

直接進入瞭解屬性模式。它特別適合以下的情況:

  1. 有一個大的文件,但是它其實擁有一些相似的欄位,而且這些欄位的一個子集具有相同的特徵,最後其實需要對這些子集欄位進行排序或者查詢;
  2. 實際上也不是所有文件都會出現需要的排序欄位;
  3. 或者上述兩個條件均滿足

事實上考慮到效能方面的原因,為了優化搜尋可能需要許多索引才能照顧到這些子集。但是建立越多的索引也只會導致效能的下降。屬性模式為這種情況提供了一個很好的解決方案。

例項:

一個訂單資料文件,其實是有很多需要記錄的時間,比如建立時間,支付時間,發貨時間等等。在設計資料結構的時候當然第一時間就會想到如圖:

直接結構設計

實際上這種設計在時間型別比較少的情況下是沒有太大問題,但是結合了實際業務場景,一張訂單的時間當然不會太少,有時候為了優化排序,不得不建立相應的所以,現在問題就來的,根據這麼多欄位逐個建立索引那可能建立很多,這樣反而會降低整體查詢的效能。那麼這時候使用屬性模式就很合適了。如下圖:

屬性模式結構設計

如果訂單資料結構考慮使用了這種模式後,就不需要反覆為相似的欄位子集建立索引,大大提高查詢效率。

結論:

屬性模式針對每個文件中許多類似欄位提供了更簡單的文件索引。通過將這個資料子集移動到一個鍵值子文件中,我們可以使用不確定的欄位名,為資訊新增額外的限定符,並更清楚地說明原始欄位和值的關係。當我們使用屬性模式時,由於需要的索引更少,查詢變得更簡單更快。

看看自己是不是一個靠譜的程式設計師,來做題試試。https://job.xyh.io

相關文章