

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定信標分割
<a name="configuring-beacon-partitioning"></a>

本節說明如何設定信標分割，以及它如何影響信標衍生、查詢行為和安全性保證。分割適用於所有信標，並提供分佈值、限制頻率洩漏和控制查詢廣發的一致模型。了解分割區計數和分割區指派如何一起運作，可協助您選擇在隱私權、效能和操作安全性之間取得平衡的組態。

## 分割區組態概觀
<a name="configuring-beacon-partitioning.overview"></a>

 分割是在邏輯資料表層級設定，並統一套用至所有標準信標。每個邏輯資料表定義單一分割結構描述，由兩個參數控制：**maximumNumberOfPartitions** 和 **defaultNumberOfPartitions**。

## maximumNumberOfPartitions
<a name="configuring-beacon-partitioning.maximumNumberOfPartitions"></a>

 `maximumNumberOfPartitions` 欄位定義資料表在其生命週期內可能使用的分割區數量上限。此值：
+ 決定可能的查詢廣發上限。
+ 可以隨著資料量或安全需求的變化而增加。
+ 資料存在後不得減少。

## defaultNumberOfPartitions
<a name="configuring-beacon-partitioning.defaultNumberOfPartitions"></a>

 `defaultNumberOfPartitions` 欄位指定未明確宣告其分割區計數的標準信標使用多少分割區。此值：
+  必須滿足 `1 ≤ defaultNumberOfPartitions ≤ maximumNumberOfPartitions ≤ 255`。
+  可以增加，但絕對不能在項目寫入後減少。
+  將此值設定為與 相同的值，`maximumNumberOfPartitions`除非您刻意想要限制個別信標可以使用的分割區數量。當屬性具有較小或充分了解的值空間、當屬性查詢頻率很高，或您想要降低查詢廣發和查詢成本時，限制信標的分割區數量會很有用。限制分割區會交換一些隨機性和分佈優勢，以提高查詢效率和可預測性。對於大多數屬性，使用完整的可用分割區集可在隱私權保護和彈性之間取得最佳平衡。

## 使用 PartitionSelector 指派分割區
<a name="configuring-beacon-partitioning.partition-selector"></a>

 名為 的使用者提供的函數會在寫入時將每個項目`PartitionSelector`指派給分割區。它會決定分割區編號：

```
GetPartitionNumber(item, numberOfPartitions, logicalTableName) -> PartitionNumber
```

 您可以在選擇器中將網域知識編碼為：
+ 在多個分割區之間分佈高頻率值。
+ 持續將罕見的值指派給單一分割區。
+ 針對一般用途工作負載使用預設隨機選取器。

 信標衍生包含選取的分割區編號，永遠不會直接公開在加密的項目或信標值中。

## 在標準信標上設定分割區計數
<a name="configuring-beacon-partitioning.standard-beacons"></a>

 根據預設，所有標準信標都會使用 `defaultNumberOfPartitions`。您可以設定 來選擇性地限制個別信標`numberOfPartitions`。這在以下情況很有用：
+ 基礎資料已大致統一分佈。
+ 預期查詢工作負載會傳回非常小的結果集。
+ 減少查詢廣發功能可大幅改善效能。

 對於限制信標，信標衍生期間使用的有效分割區會計算為：

```
effectivePartition = itemPartition % numberOfPartitions
```

 只有在必要且經過適當的安全性審查時，才套用信標層級限制。不正確的限制可能會削弱匿名保證，或使現有項目在查詢期間無法連線。



### 組態語法範例
<a name="w2aac15c27c17c13c15"></a>

------
#### [ 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()?,
```

------