View a markdown version of this page

配置信标分区 - AWS 数据库加密 SDK

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置信标分区

本节介绍信标分区是如何配置的,以及它如何影响信标派生、查询行为和安全保障。分区适用于所有信标,为分布值、限制频率泄漏和控制查询扇出提供了一致的模型。了解分区计数和分区分配是如何协同工作的,可以帮助您选择在隐私、性能和操作安全之间取得平衡的配置。

分区配置概述

分区是在逻辑表级别配置的,并且统一应用于所有标准信标。每个逻辑表都定义了一个分区方案,该方案由两个参数控制:最大值NumberOfPartitions和默认值NumberOfPartitions

最大值 NumberOfPartitions

maximumNumberOfPartitions字段定义了表在其生命周期内可以使用的分区数量的上限。这个值:

  • 确定可能的最大查询扇出范围。

  • 可以随着数据量或安全要求的变化而增加。

  • 数据存在后不得减少。

默认 NumberOfPartitions

defaultNumberOfPartitions字段指定未明确声明自己的分区计数的标准信标使用了多少分区。这个值:

  • 必须满足1 ≤ defaultNumberOfPartitions ≤ maximumNumberOfPartitions ≤ 255

  • 可以增加,但绝不能在写完物品后减少。

  • maximumNumberOfPartitions除非您故意限制单个信标可以使用的分区数量,否则请将此值设置为与之相同的值。当属性的值空间较小或易于理解时、查询该属性的频率非常高,或者想要减少查询扇出和查询成本时,限制信标的分区数量会很有用。限制分区可以用一些随机性和分布优势来提高查询效率和可预测性。对于大多数属性,使用全套可用分区可以在隐私保护和灵活性之间取得最佳平衡。

使用 a 进行分区分配 PartitionSelector

用户提供的名为的函数在写入时将每个项目PartitionSelector分配给一个分区。它决定了分区号:

GetPartitionNumber(item, numberOfPartitions, logicalTableName) -> PartitionNumber

您可以在选择器中将领域知识编码为:

  • 将高频值分布到多个分区。

  • 一致地为单个分区分配稀有值。

  • 对于通用工作负载,使用默认的随机选择器。

信标派生包含选定的分区号,该分区号永远不会直接暴露在加密项目或信标值中。

在标准信标上配置分区计数

默认情况下,所有标准信标都使用defaultNumberOfPartitions。您可以选择通过设置numberOfPartitions来限制单个信标。这在以下情况下很有用:

  • 基础数据已经大致均匀分布。

  • 查询工作负载预计将返回非常小的结果集。

  • 减少查询扇出可以显著提高性能。

对于受约束的信标,信标推导过程中使用的有效分区计算为:

effectivePartition = itemPartition % numberOfPartitions

只有在必要时才应用信标级别的限制,并进行适当的安全审查。不正确的约束可能会削弱匿名性保证,或者使查询期间无法访问现有项目。

示例配置语法

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beaconName") .length(beaconLengthInBits) .numberOfPartitions(number) .build(); standardBeaconList.add(exampleStandardBeacon);
C# / .NET
var standardBeaconList = new List<StandardBeacon>(); StandardBeacon exampleStandardBeacon = new StandardBeacon { Name = "beaconName", Length = 10, NumberOfPartitions = number }; standardBeaconList.Add(exampleStandardBeacon);
Rust
let standard_beacon_list = vec![ StandardBeacon::builder() .name("beacon_name") .length(beacon_length_in_bits) .number_of_partitions(number) .build()?,