Docs 菜单
Docs 主页
/
数据库手册
/ / / / /

加密字段和启用的查询

使用Queryable Encryption时,可以使用加密模式在集合级别定义加密字段。 加密字段并启用查询会增加存储要求并影响查询性能。 您可以为相等查询或范围查询配置加密字段,但不能同时为两者配置加密字段。 配置预期查询类型的字段。

有关创建加密模式和配置查询的说明,请参阅创建加密模式。

有关支持的查询运算符和加密字段行为的列表,请参阅支持的查询运算符。

Queryable Encryption需要服务器端加密模式来实施对集合中的特定字段加密。使用自动Queryable Encryption的客户端的行为因数据库连接配置而异:

  • 至少,本地规则必须加密与服务器上远程模式相同的字段。

  • 如果连接 encryptedFieldsMap对象包含指定集合的密钥,则客户端使用该对象执行自动Queryable Encryption,而不是使用远程模式。

  • 如果连接 encryptedFieldsMap对象不包含指定集合的密钥,客户端将下载并使用该集合的远程模式。

    重要

    远程模式行为

    使用远程模式时:

    • 客户端相信服务器具有有效的模式

    • 客户端仅使用远程模式来执行自动 Queryable Encryption。客户端不会实施该模式中指定的任何其他验证规则。

在创建集合之前,决定哪些字段应该加密和/或可查询。要更改哪些字段已加密或可查询,需要重建集合的加密模式并重新创建集合。

如果不需要查询加密字段,则可能不需要启用对该字段的查询。 您仍然可以通过查询其他可查询或未加密的字段来检索文档。

对于每个加密的集合, MongoDB都会创建两个元数据集合,从而增加存储空间。 MongoDB为每个加密字段创建一个索引,这会增加对该字段执行写入操作的持续时间。 当写入操作更新索引字段时, MongoDB会更新相关索引。

MongoDB提供了以下参数以方便调试和性能调优:

min, max

查询类型:range

类型:必须与字段的bsonType匹配。

如果bsonTypedecimaldouble ,则为必填项。 可选,但如果为intlongdate ,则强烈建议使用。 默认为bsonType最小值和最大值。

尽可能指定字段的最小和最大(含)可查询值,因为更小的边界可以提高查询效率。 如果查询的值超出这些范围, MongoDB将返回错误。

警告

前缀、后缀和子字符串查询处于公共预览状态

Queryable Encryption前缀、后缀和子字符串查询在MongoDB 8.2 的公共预览版中可用。请勿在生产环境中启用这些查询类型。公共预览功能将与 GA功能不兼容,您必须删除任何启用这些查询的集合。

strMaxLength

查询类型:substringPreview

类型:1 -60 (含)之间的整数。

子字符串索引字段的最大允许长度。尝试插入更长的字符串会返回错误。

重要

您可以通过设置fleDisableSubstringPreviewParameterLimits 来覆盖字符限制,但对较长的字符串运行子字符串查询会对性能产生重大影响。

strMinQueryLength

查询类型:prefixPreviewsuffixPreviewsubstringPreview

类型:正整数。

  • 对于 prefixPreviewsuffixPreview 查询,必须为 >= 1。

  • 对于 substringPreview 查询,必须为 >= 2。

允许的最小前缀/后缀/子字符串长度。尝试查询较短的字符串会返回错误。

strMaxQueryLength

查询类型:prefixPreviewsuffixPreviewsubstringPreview

类型:正整数 -1 对于prefixPreview 或 查询,其值必须 >=suffixPreview 。2 -10 对于substringPreview 查询,必须为 - (含)。

要查询的最大允许前缀/后缀/子字符串长度。尝试查询更长的字符串会返回错误。

重要

此设置会严重影响查询性能。尽可能限制最大查询长度。

caseSensitive

查询类型:prefixPreviewsuffixPreviewsubstringPreview

类型:布尔值

可选。默认值为 true

前缀/后缀/子字符串查询是否区分大小写。设置为 false 以进行不区分大小写的匹配。

diacriticSensitive

查询类型:prefixPreviewsuffixPreviewsubstringPreview

类型:布尔值

可选。默认值为 true

前缀/后缀/子字符串查询是否必须匹配变音标记。设置为 false 以进行不区分变音符号的匹配。

警告

这些参数仅供高级用户使用。默认值适用于大多数使用案例,并且仅应在使用案例需要时进行修改。

sparsity

查询类型:range

类型: 1 - 4之间的整数。

可选。默认值为 2。

影响MongoDB对范围值进行索引的彻底程度。 低稀疏性(密集索引)可提高查询性能,但会在每次插入或更新操作的加密元数据集合中存储更多文档,从而导致更大的存储开销。 高稀疏度则相反。

precision

查询类型:range

类型:整数。

可选。 仅当 bsonTypedoubledecimal 时才允许。如果未设置, MongoDB将使用与 bsonType 相同的最大精度,即 doubledecimal

限制在查询 doubledecimal字段时考虑的点后的位数。其他数字将被舍去,而不是四舍五入。示例,1 的 precision10.18 视为 10.1 进行查询。加密的值仍存储为 10.18

指定 precision 并尽可能限制它。每一位数字都会增加存储开销,并对可搜索范围和索引生成产生很大影响。

trimFactor

查询类型:range

类型:整数。

可选。默认值为 6。

trimFactor 控制并发插入和更新的吞吐量。较高的 trimFactor 会提高并发插入和更新的吞吐量,但会费用某些范围读取操作的速度。较低的 trimFactor 则执行相反操作。

contention

查询类型:equalityrangeprefixPreviewsuffixPreviewsubstringPreview

类型:整数。

可选。默认值为 8。

并发写操作,例如在多个文档中连续插入相同的字段/值对,可能会导致争用:即延迟操作的冲突。

通过Queryable Encryption, MongoDB使用内部计数器跟踪加密集合中每个字段/值对的出现次数。 争用因子对该计数器进行分区,类似于大量。 这样可以最大限度地减少使用insertupdatefindAndModify连续添加或修改具有相同字段/值对的加密字段时递增计数器的问题。 contention = 0创建一个大量,在索引0处包含一个元素。 contention = 4会在索引0 - 4处创建一个包含5个元素的大量。 MongoDB在插入期间递增随机大量元素。

未设置时, contention默认为8 ,可为大多数工作负载提供高性能。 较高的争用可提高低关联基数字段上的插入和更新操作的性能,但会降低查找性能。

您可以选择在可查询字段上包含 contention,以更改该值的默认8。

有关争用因素及其加密影响的更全面信息,请参阅9 MongoDB 的 Queryable Encryption技术论文中的“第 节:指南”。

后退

Fundamentals

在此页面上