お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

NoSQLでのインデックス

Catalyst NoSQLは、NoSQLテーブルにインデックスを作成する機能を提供しており、プライマリキーを使用せずにテーブルデータに対して代替クエリを実行できます。つまり、パーティションキーとソートキー以外の属性でセカンダリインデックスを作成・利用してデータアイテムを検索できます。

インデックスは、テーブル内の従来とは異なる属性を優先する必要があるシナリオで役立ち、データ取得操作に利便性と柔軟性を追加します。インデックスを使用したクエリは、データ読み取りプロセスを高速化し、効率を促進します。また、メインテーブルに影響を与えることなく、要件に基づいてテーブルのインデックスを変更または削除することもできます。

インデックスのアーキテクチャ

Catalyst NoSQLのインデックスは、テーブル全体とテーブルデータが格納されているすべてのパーティションにまたがります。このクロスパーティションまたはグローバルインデックス機能は、テーブルのすべてのパーティションキーに対してクエリを実行できるため、非常に有益です。

Catalystでは、テーブルに最大20のインデックスを作成できます。作成する各インデックスに個別のパーティションキーとソートキーを設定できます。インデックスがグローバルであるため、メインテーブルで設定されたものとは異なるパーティションキーとソートキーを設定できます。

本質的に、インデックスはデータクエリのさまざまな要件に対応するために、異なるパーティションキーとソートキーで作成されたメインテーブルのコピーと見なすことができます。アーキテクチャの観点では、テーブルにインデックスが作成されると、メインテーブルと同じパーティショニングルールが適用された異なるストレージノードにそのコピーが格納されます。そのため、セカンダリインデックスに基づいてクエリを実行しても、テーブルのすべての属性とデータにアクセスできます。

注意: ベーステーブルのデータを追加、更新、または削除すると、Catalystは自動的にインデックスを更新します。

インデックスの種類

Catalystは、NoSQLでテーブルをインデックスする3つの方法を提供しています:

  • すべての属性のインデックス: テーブル内のすべての属性のインデックスを作成します。このオプションを選択すると、Catalystは基本的にすべてのテーブル属性を複製し、インデックスに設定したパーティションキーに基づいて格納します。

  • キーのみのインデックス: テーブル内のパーティションキー、ソートキー、および追加ソートキー属性(存在する場合)のみをインデックスします。これらのキー属性は、インデックスに設定したパーティションキーに基づいて格納されます。

  • 特定の属性のインデックス: 選択したテーブルの特定の属性をインデックスします。選択された属性は複製され、インデックスに設定したパーティションキーに基づいて格納されます。

インデックスに基づいてクエリを実行すると、テーブルとインデックスのパーティションキーおよびソートキー属性が、設定した種類に基づく他の属性とともに返されます。

例を使ってインデックスをよりよく理解しましょう。前のセクションで説明したMenuテーブルを更新して以下に示します。

サンプルテーブルの表現

テーブル名- Menu

copy
{
 "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
 	}
}
}

注意: ここに示されているテーブルはCatalystカスタムJSON形式の表現です。このJSON形式で各サーバーサイドSDKのデータを構築するフォーマットは異なります。このテーブルに示されているCatalystカスタムJSON形式の一般的な構文、サポートされるデータ型とその表記については、このセクションを参照してください。

このテーブルに以下の設定でPricingというインデックスを作成すると仮定します:

  • パーティションキー: Cost
  • ソートキー: DiscountPercentage
  • インデックスの種類: 特定の属性(CaloriesPreparationTime

以下は作成されたインデックスの表現です。

サンプルインデックスの表現

インデックス名- Pricing

copy
{
"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 } } }

注意: インデックスのパーティションキーを含まないデータアイテムは、インデックスの対象から除外されます。この例では、メインテーブルの「Pizza」と「Vegan」で識別されるアイテムは、インデックスのパーティションキーであるCostの値を含んでいないため、インデックスされていません。

インデックスPricingに基づいてクエリを実行すると、Catalystは属性Costに対してアイテムを検索し、一致する結果が複数ある場合は属性DiscountPercentageに基づいて結果をソートします。選択された属性(CaloriesPreparationTime)は、テーブルとインデックスのプライマリキーとともに、一致するアイテムのクエリで返されます。

最終更新日 2026-02-23 18:09:41 +0530 IST