2017-02-14 55 views
0

我有一個二進制字段,我正在mongo中存儲。此值目前是MD5散列值,但未來可能會發生變化。我試圖決定使用什麼bson二進制子類型。具體來說,我不確定我是否應該使用BSON.BSON_BINARY_SUBTYPE_DEFAULT或BSON.BSON_BINARY_SUBTYPE_MD5。 mongo能夠使用這個子類型來執行任何類型的優化嗎?例如,如果知道值是MD5,它可以構建更智能的索引嗎?對於二進制bson字段,mongo是否出於任何原因使用子類型

+0

但這些亞型僅僅是BSON規範的一部分,它沒有看到的東西與MongoDB服務器本身,數據庫中的一切存儲爲BSON,其子類型是枚舉類型你在你的應用程序中使用。 – Euclides

+0

@Euclides我想這是我的問題。是僅適用於應用程序端邏輯的子類型,還是Mongo利用這些子類型進行任何優化? – herbrandson

+0

是的,它只適用於應用程序端邏輯。有一些名爲散列索引的內容,但根據文檔,MongoDB支持任何單個字段的散列索引,但即便如此,它並不涉及您正在查看的子類型。 – Euclides

回答

0

MongoDB可以使用「hidden」bindata鍵存儲散列索引。

https://docs.mongodb.com/manual/core/index-hashed/

如果你從來沒有要執行這個特定的索引,哈希索引可以「縮小」或「擴大」可轉位場下/上一個已知尺寸派出一個通配符查詢。這意味着你可以使用由散列函數指定長度的索引鍵(長度可能爲32個字節)來索引一個非常長的字符串(4MB長)

應用程序不需要知道任何關於散列函數或內部,你只會看到更快的查詢結果,但犧牲了潛在的但非常不可能的散列衝突。

然後,應用程序也可以使用按位bindata運算符,包括要存儲哪種類型的bindata。最明顯的用例是存儲日誌的Web應用程序,包括用戶IP地址作爲二進制數據和用戶定義的子類型。

您的查詢可以使用$ bitsAllSet來使用標準網絡掩碼來查詢從特定網絡範圍進行的連接。 MongoDB是完全有能力檢查

  1. 文檔的密鑰包含正確的子類型(用戶定義和 不UUID/MD5)
  2. 如果第一匹配的推移,它會執行 稍貴位運算。

https://docs.mongodb.com/v3.2/reference/operator/query-bitwise/

相關問題