NoSQLでのインデックス
Catalyst NoSQLは、NoSQLテーブルにインデックスを作成する機能を提供しており、プライマリキーを使用せずにテーブルデータに対して代替クエリを実行できます。つまり、パーティションキーとソートキー以外の属性でセカンダリインデックスを作成・利用してデータアイテムを検索できます。
インデックスは、テーブル内の従来とは異なる属性を優先する必要があるシナリオで役立ち、データ取得操作に利便性と柔軟性を追加します。インデックスを使用したクエリは、データ読み取りプロセスを高速化し、効率を促進します。また、メインテーブルに影響を与えることなく、要件に基づいてテーブルのインデックスを変更または削除することもできます。
インデックスのアーキテクチャ
Catalyst NoSQLのインデックスは、テーブル全体とテーブルデータが格納されているすべてのパーティションにまたがります。このクロスパーティションまたはグローバルインデックス機能は、テーブルのすべてのパーティションキーに対してクエリを実行できるため、非常に有益です。
Catalystでは、テーブルに最大20のインデックスを作成できます。作成する各インデックスに個別のパーティションキーとソートキーを設定できます。インデックスがグローバルであるため、メインテーブルで設定されたものとは異なるパーティションキーとソートキーを設定できます。
本質的に、インデックスはデータクエリのさまざまな要件に対応するために、異なるパーティションキーとソートキーで作成されたメインテーブルのコピーと見なすことができます。アーキテクチャの観点では、テーブルにインデックスが作成されると、メインテーブルと同じパーティショニングルールが適用された異なるストレージノードにそのコピーが格納されます。そのため、セカンダリインデックスに基づいてクエリを実行しても、テーブルのすべての属性とデータにアクセスできます。
インデックスの種類
Catalystは、NoSQLでテーブルをインデックスする3つの方法を提供しています:
-
すべての属性のインデックス: テーブル内のすべての属性のインデックスを作成します。このオプションを選択すると、Catalystは基本的にすべてのテーブル属性を複製し、インデックスに設定したパーティションキーに基づいて格納します。
-
キーのみのインデックス: テーブル内のパーティションキー、ソートキー、および追加ソートキー属性(存在する場合)のみをインデックスします。これらのキー属性は、インデックスに設定したパーティションキーに基づいて格納されます。
-
特定の属性のインデックス: 選択したテーブルの特定の属性をインデックスします。選択された属性は複製され、インデックスに設定したパーティションキーに基づいて格納されます。
インデックスに基づいてクエリを実行すると、テーブルとインデックスのパーティションキーおよびソートキー属性が、設定した種類に基づく他の属性とともに返されます。
例を使ってインデックスをよりよく理解しましょう。前のセクションで説明したMenuテーブルを更新して以下に示します。
サンプルテーブルの表現
テーブル名- Menu
{
"item": {
"Category": {
"S": "Pizza"
},
"DishName": {
"S": "Vegan"
},
"Calories": {
"N": 350
},
"PreparationTime": {
"N": 20
},
"DiscountPercentage": {
"N": 12
},
"KeyIngredients": {
"L": [
{
"S": "Pizza Base"
},
{
"S": "Pizza Sauce"
},
{
"S": "Olives"
},
{
"S": "Bell Peppers"
},
{
"S": "Corn"
},
{
"S": "Onions"
}
]
}
},
"item": {
"Category": {
"S": "Pizza"
},
"DishName": {
"S": "Chicken Overload"
},
"Cost": {
"N": 25
},
"DiscountPercentage": {
"N": 15
},
"Calories": {
"N": 450
},
"PreparationTime": {
"N": 30
}
},
"item": {
"Category": {
"S": "Sandwich"
},
"DishName": {
"S": "Vegan"
},
"Calories": {
"N": 300
},
"PreparationTime": {
"N": 20
},
"Cost": {
"N": 20
},
"DiscountPercentage": {
"N": 10
}
}
}
このテーブルに以下の設定でPricingというインデックスを作成すると仮定します:
- パーティションキー: Cost
- ソートキー: DiscountPercentage
- インデックスの種類: 特定の属性(CaloriesとPreparationTime)
以下は作成されたインデックスの表現です。
サンプルインデックスの表現
インデックス名- Pricing
{
"item": {
"Cost": {
"N": 25
},
"DiscountPercentage": {
"N": 15
},
"Category": {
"S": "Pizza"
},
"DishName": {
"S": "Chicken Overload"
}
"Calories": {
"N": 450
},
"PreparationTime": {
"N": 30
}
},
“item”: {
“Cost”: {
“N”: 20
},
“DiscountPercentage”: {
“N”: 10
},
“Category”: {
“N”: “Sandwich”
},
“DishName”: {
“N”: “Vegan”
},
“Calories”: {
“N”: 300
},
“PreparationTime”: {
“N”: 20
}
}
}
インデックスPricingに基づいてクエリを実行すると、Catalystは属性Costに対してアイテムを検索し、一致する結果が複数ある場合は属性DiscountPercentageに基づいて結果をソートします。選択された属性(CaloriesとPreparationTime)は、テーブルとインデックスのプライマリキーとともに、一致するアイテムのクエリで返されます。
最終更新日 2026-02-23 18:09:41 +0530 IST
Yes
No
Send your feedback to us