LoginSignup
3
2

More than 1 year has passed since last update.

Azure Cosmos DB - データの一意性

Last updated at Posted at 2022-02-26

データの一意性は、Partition Key と Unique keys で決まる。
Partition Key 、 Unique keys は、コンテナ作成時に設定する。
以下 Partition Key に/pk、Unique keys に/col1, /col2を設定した場合の例。

image.png

サンプルデータ

説明に使用するサンプルデータは以下形式とする。
ただし、データ INSERT 時に、id(一意の値)が自動的に追加される。

{
  "pk": String,
  "col1": Number,
  "col2": Number,
  "col3": Number
}

Partition Key

Partition Key を/pkとした場合、
pkidが一致するデータは INSERT、UPDATE 時に競合となる。

以下、競合パターンイメージ。

test-container
  │
  ├─ pk: A
  │      ├─ {pk: "A", id: "1", ...}  ※ Partition Key conflict ※
  │      ├─ {pk: "A", id: "2", ...}
  │      ├─ {pk: "A", id: "3", ...}
  │      └─ {pk: "A", id: "1", ...}  ※ Partition Key conflict ※
  │
  ├─ pk: B
  │      ├─ {pk: "B", id: "1", ...}
  │      ├─ {pk: "B", id: "2", ...}
  │      └─ {pk: "B", id: "3", ...}
  │

Partition Key を指定する必要がない場合、
デフォルトの/idのままにすることで、idが一致するデータは INSERT、UPDATE 時に競合となる。
参考: パーティション キーとして項目 ID を使用する

以下、競合パターンイメージ。

test-container
  │
  ├─ id: "1"
  │       └─ {pk: "A", id: "1", ...}  ※ Partition Key conflict ※
  │
  ├─ id: "2"
  │       └─ {pk: "A", id: "2", ...}
  │
  ├─ id: "3"
  │       └─ {pk: "A", id: "3", ...}
  │
  ├─ id: "1"
  │       └─ {pk: "B", id: "1", ...}  ※ Partition Key conflict ※
  │

Unique keys

Unique keys に/col1, /col2を設定した場合、
col1col2が一致するデータは INSERT、UPDATE 時に競合となる。

Unique keys を設定した場合も Partition Key による一意性は維持される。

以下 Partition Key に/pk、Unique keys に/col1, /col2を設定した場合の競合パターンイメージ。

test-container
  │
  ├─ pk: A
  │      ├─ {pk: "A", id: "1", col1: 1, col2: 2, ...}  ※ Partition Key conflict ※
  │      ├─ {pk: "A", id: "1", col1: 2, col2: 2, ...}  ※ Partition Key conflict ※
  │      ├─ {pk: "A", id: "2", col1: 3, col2: 2, ...}
  │      ├─ {pk: "A", id: "3", col1: 4, col2: 2, ...}  ※ Unique keys conflict ※
  │      └─ {pk: "A", id: "4", col1: 4, col2: 2, ...}  ※ Unique keys conflict ※
  │
  ├─ pk: B
  │      ├─ {pk: "B", id: "1", col1: 1, col2: 2, ...}
  │      ├─ {pk: "B", id: "2", col1: 2, col2: 2, ...}
  │      └─ {pk: "B", id: "3", col1: 3, col2: 2, ...}
  │
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2