对于二进制bson字段,mongo是否出于任何原因使用子类型

时间:2017-02-14 21:35:18

标签: mongodb bson

我有一个二进制字段,我存储在mongo中。该值目前是MD5哈希值,但未来可能会发生变化。我试图决定使用什么bson二进制子类型。具体来说,我不确定是否应该使用BSON.BSON_BINARY_SUBTYPE_DEFAULT或BSON.BSON_BINARY_SUBTYPE_MD5。 mongo是否能够使用此子类型来执行任何类型的优化?例如,如果它知道值是MD5,它可以构建更智能的索引吗?

1 个答案:

答案 0 :(得分:0)

MongoDB可以使用“隐藏”的bindata密钥存储散列索引。

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

如果您不希望执行此特定索引所使用的通配符查询,则哈希索引可以将可索引字段“缩小”或“展开”向下/向上扩展到已知大小。这意味着您可以使用散列函数指定的长度索引键(可能长度为32个字节)来索引一个非常长的字符串(长4MB)

应用程序不需要了解有关散列函数或内部的任何信息,您只能看到更快的查询结果,但代价是潜在但非常不可能的散列冲突。

然后还有应用程序可用的按位bindata运算符,包括要存储的bindata类型。最明显的用例是存储日志的Web应用程序,包括用户IP地址作为二进制数据和用户定义的子类型。

您的查询可以使用$ bitsAllSet来使用标准网络掩码来查询从特定网络范围建立的连接。 MongoDB完全有能力检查

  1. 文档的键包含正确的子类型(用户定义和 不是UUID / MD5)
  2. 如果第一场比赛通过,它将执行 稍微昂贵的按位操作。
  3. https://docs.mongodb.com/v3.2/reference/operator/query-bitwise/