加密字段和启用的查询
使用Queryable Encryption时,可以使用加密模式在集合级别定义加密字段。 加密字段并启用查询会增加存储要求并影响查询性能。 您可以为相等查询或范围查询配置加密字段,但不能同时为两者配置加密字段。 配置预期查询类型的字段。
有关创建加密模式和配置查询的说明,请参阅创建加密模式。
支持的查询类型和行为
有关支持的查询运算符和加密字段行为的列表,请参阅支持的查询运算符。
客户端和服务器模式验证
MongoDB支持使用模式验证来实施对集合中的特定字段进行加密。 使用自动Queryable Encryption的客户端的行为因数据库连接配置而异:
如果连接
encryptedFieldsMap
对象包含指定集合的密钥,则客户端使用该对象执行自动Queryable Encryption,而不是使用远程模式。 至少,本地规则必须加密远程模式加密的所有字段。如果连接
encryptedFieldsMap
对象不包含指定集合的密钥,客户端会下载并使用该集合的服务器端远程模式。重要
远程模式行为
使用远程模式时:
客户端相信服务器具有有效的模式
客户端仅使用远程模式来执行自动 Queryable Encryption。客户端不会实施该模式中指定的任何其他验证规则。
启用查询时的注意事项
您可以将加密字段设为可查询。 要更改哪些字段已加密或可查询,请重建集合的加密模式并重新创建集合。
如果不需要查询加密字段,则可能不需要启用对该字段的查询。 您仍然可以通过查询其他可查询或未加密的字段来检索文档。
对于每个加密的集合, MongoDB都会创建两个元数据集合,从而增加存储空间。 MongoDB为每个加密字段创建一个索引,这会增加对该字段执行写入操作的持续时间。 当写入操作更新索引字段时, MongoDB会更新相关索引。
配置加密字段以实现最佳搜索和存储
MongoDB提供了以下参数以方便调试和性能调优:
min, max
查询类型:仅限范围查询。
类型:必须与字段的
bsonType
匹配。如果
bsonType
为decimal
或double
,则为必填项。 可选,但如果为int
、long
或date
,则强烈建议使用。 默认为bsonType
最小值和最大值。尽可能指定字段的最小和最大(含)可查询值,因为更小的边界可以提高查询效率。如果查询的值超出这些范围, MongoDB将返回错误。
sparsity
查询类型:仅限范围查询。
类型:
1
-4
之间的整数。可选。默认值为
2
。影响MongoDB对范围值进行索引的彻底程度。 低稀疏性(密集索引)可提高查询性能,但会在每次插入或更新操作的加密元数据集合中存储更多文档,从而导致更大的存储开销。 高稀疏度则相反。
precision
查询类型:仅限范围查询。
类型:整数。
可选。仅当
bsonType
为double
或decimal
时才允许。如果未设置, MongoDB将使用与bsonType
相同的最大精度,即double
或decimal
。确定在查询
double
或decimal
字段时考虑多少位数字。每增加一个数字,就会增加存储开销,并对可搜索范围和索引生成产生很大影响。此参数限制范围查询的精度。尽管加密值仍以全精度存储,但不同的precision
值会影响查询输出。
trimFactor
查询类型:仅限范围查询。
类型:整数。
可选。默认值为
6
。trimFactor
控制并发插入和更新的吞吐量。较高的trimFactor
会提高并发插入和更新的吞吐量,但会费用某些范围读取操作的速度。较低的trimFactor
则执行相反操作。
contention
查询类型:相等和范围查询。
类型:整数。
可选。默认值为
8
。并发写操作,例如在多个文档中连续插入相同的字段/值对,可能会导致争用:即延迟操作的冲突。
通过Queryable Encryption, MongoDB使用内部计数器跟踪加密集合中每个字段/值对的出现次数。 争用因子对该计数器进行分区,类似于大量。 这样可以最大限度地减少使用
insert
、update
或findAndModify
连续添加或修改具有相同字段/值对的加密字段时递增计数器的问题。contention = 0
创建一个大量,在索引0处包含一个元素。contention = 4
会在索引0 - 4处创建一个包含5个元素的大量。 MongoDB在插入期间递增随机大量元素。未设置时,
contention
默认为8
,可为大多数工作负载提供高性能。 较高的争用可提高低关联基数字段上的插入和更新操作的性能,但会降低查找性能。您可以选择在可查询字段上包含
contention
,以更改该值的默认8
。有关争用因素及其加密影响的更全面信息,请参阅 MongoDB 的Queryable Encryption技术论文中的“第9节:指南”。