У меня есть двоичное поле, которое я храню в монго. Значение представляет собой хеш MD5 на данный момент, но есть шанс, что это может измениться в будущем. Я пытаюсь решить, какой двоичный подтип bson использовать. В частности, я не уверен, следует ли использовать BSON.BSON_BINARY_SUBTYPE_DEFAULT или BSON.BSON_BINARY_SUBTYPE_MD5. Способно ли монго использовать этот подтип для выполнения каких-либо оптимизаций? Например, может ли он построить более интеллектуальные индексы, если он знает, что это MD5?Для двоичных полей bson mongo использует подтип по любой причине
ответ
MongoDB может хранить хешированный индекс, используя «скрытые» ключи привязки.
https://docs.mongodb.com/manual/core/index-hashed/
Если вы не хотите, чтобы выполнить запрос подстановочного выставлял этот конкретным индекс, индекс хэша может «сжиматься» или «расширение» Индексируемо полем вниз/до известного размера. Это означает, что вы можете индексировать очень длинную строку (длиной 4 МБ) с помощью указательного ключа длины, заданного функцией хэширования (возможно, длиной 32 байта).
Приложение не нуждается ни в чем знать о функции хеширования или внутри, вы увидите только более быстрые результаты запроса за счет потенциальных, но чрезвычайно маловероятных хеш-коллизий.
Тогда есть также побитовые операторы привязки, доступные для приложения, включая тип привязки, который вы хотите сохранить. Наиболее очевидным случаем является веб-приложение, хранящее журналы, включая IP-адрес пользователя в виде двоичных данных и подтип, определенный пользователем.
Ваш запрос может использовать $ bitsAllSet для использования стандартных сетевых масок для запроса того, какие соединения были сделаны из определенного сетевого диапазона. MongoDB вполне способен проверить, что
- ключ документа содержит правильный подтип (определяется пользователем и не UUID/MD5)
- если первый матч проходит, он будет выполнять несколько более дорогостоящую операцию побитового ,
https://docs.mongodb.com/v3.2/reference/operator/query-bitwise/
Но эти подтипы являются только частью спецификации BSON, он не должен увидеть что-то с сервером MongoDB сами по себе, в базе данных все сохраняется как BSON, подтипы являются перечисляемые типы, вы используете в своем приложении. – Euclides
@Euclides Я думаю, это мой вопрос. Являются ли подтипы только для прикладной логики, или Монго использует эти подтипы для каких-либо оптимизаций? – herbrandson
Да, это только для логики приложения. Есть что-то названное хешированным индексом, но согласно документации MongoDB поддерживает хешированные индексы любого отдельного поля, но даже в этом случае речь идет не о подтипах, на которые вы смотрите. – Euclides