検索インデックスは、転置インデックスとカラムストアに基づいて、ビッグデータシナリオでの多次元データクエリと統計分析に使用されます。ビジネスに複雑なクエリとデータ分析が必要な場合は、検索インデックスを作成し、必要な属性を検索インデックスのフィールドとして指定できます。その後、検索インデックスを使用してデータのクエリと分析を実行できます。たとえば、検索インデックスを使用して、非プライマリキー列に基づくクエリ、ブールクエリ、あいまいクエリ、全文検索、k近傍(KNN)ベクトルクエリを実行できます。また、検索インデックスを使用して、最大値と最小値の取得、行数の統計の収集、クエリ結果のグループ化を行うこともできます。
背景情報
検索インデックスは、ビッグデータシナリオにおける複雑なクエリの問題を解決できます。データベースや検索エンジンなどの他のシステムも、データクエリの問題を解決できます。
次の図は、Tablestore、データベース、検索エンジンの違いを示しています。
Tablestoreは、JOIN操作、トランザクション、検索結果の関連性を除き、データベースと検索エンジンのすべての機能を提供できます。Tablestoreはデータベースの高いデータ信頼性を備えており、検索エンジンの高度なクエリもサポートしています。したがって、Tablestoreを使用して、データベースと検索エンジン
で構成される一般的なアーキテクチャを置き換えることができます。JOIN操作、トランザクション、または検索結果の複雑な関連性が必要ない場合は、Tablestoreの検索インデックス機能を使用することをお勧めします。
概要
検索インデックスは、転置インデックスとカラムストアに基づいて、ビッグデータシナリオでの多次元データクエリと統計分析に使用されます。検索インデックスは、非プライマリキー列に基づくクエリ、プレフィックスクエリ、あいまいクエリ、ブールクエリ、ネストクエリ、地理クエリ、全文検索、KNNベクトルクエリなど、さまざまなクエリ方法をサポートしています。検索インデックスは、複数の集計操作もサポートしています。集計操作を実行して、最大値と最小値、行の数と重複を除いた数、合計、平均、パーセンタイル統計を取得し、特定の条件で結果をグループ化し、データをヒストグラムとして表示できます。
次の図は、検索インデックスでの転置インデックスとカラムストアの使用方法、および多次元空間インデックスの構造を示しています。
MySQLなどの従来のデータベースサービスのインデックスと比較して、Tablestoreの検索インデックス機能は、左端一致の原則に制約されません。したがって、検索インデックス機能は、より多くのシナリオで使用できます。ほとんどの場合、データテーブルには1つの検索インデックスのみが必要です。たとえば、学生情報に関するデータテーブルには、学生名、ID、性別、学年、クラス、自宅住所などの列が含まれています。3年生の張三という名前の学生
のクエリ、学校から1キロメートル以内に住んでいる男子学生
のクエリ、指定された住宅街の3年生2組の学生
のクエリなど、条件の組み合わせを指定してデータテーブルのデータをクエリする場合、検索インデックスを作成し、これらの列を検索インデックスに追加できます。
データテーブルのプライマリキー列に基づくクエリの他に、Tablestoreは、データクエリを高速化するための次の2つのインデックススキーマを提供します。セカンダリインデックスと検索インデックスです。次の表に、3種類のインデックスの違いを示します。
インデックスタイプ | 説明 | シナリオ |
データテーブルのプライマリキー | データテーブルは大きなマップに似ています。データテーブルは、プライマリキー列に基づくクエリのみをサポートします。 | プライマリキーベースのクエリは、すべてのプライマリキー列の値またはプライマリキープレフィックスを決定できるシナリオに適しています。 |
セカンダリインデックス | データテーブルに1つ以上のインデックステーブルを作成し、インデックステーブルのプライマリキー列を使用してクエリを実行できます。 | セカンダリインデックスは、クエリ対象の列を決定でき、クエリ対象の列の数が少なく、すべてのプライマリキー列の値またはプライマリキープレフィックスを決定できるシナリオに適しています。 |
検索インデックス | 検索インデックスは、さまざまなクエリシナリオで転置インデックス、Bkdツリー、カラムストアを使用します。 | 検索インデックスは、データテーブルのプライマリキー列とセカンダリインデックスに基づくクエリではビジネス要件を満たすことができないすべてのクエリおよび分析シナリオに適しています。たとえば、検索インデックスを使用して、非プライマリキー列に基づくクエリ、ブールクエリ、関係クエリ、全文検索、地理クエリ、プレフィックスクエリ、あいまいクエリ、ネストクエリ、存在クエリ、および集計操作を実行できます。 |
一般的なシナリオ
検索インデックスは、データクエリと分析のためのさまざまなアプリケーションシステムで広く使用できます。次の表に、検索インデックスを使用できるいくつかのシナリオを示します。
アプリケーションシステム | シナリオ |
Eコマースプラットフォーム | Eコマースプラットフォームで検索インデックスを使用して、製品を分類し、属性をフィルタリングできます。これにより、顧客は製品を簡単に検索およびフィルタリングできます。 |
ソーシャルメディアアプリケーション | ソーシャルメディアアプリケーションで検索インデックスを使用して、ユーザー間のフォロワーと友達のつながりをクエリし、ユーザーの興味に基づいてレコメンデーションとマッチング機能を提供できます。 |
ログ分析 | 検索インデックスを使用して、キーワードや時間範囲などの条件に基づいてログをクエリできます。これにより、問題を効率的に特定し、ログデータを分析できます。 |
IoTのデータ分析 | 検索インデックスを使用して、モノのインターネット(IoT)シナリオでデバイスデータをクエリおよび分析できます。たとえば、デバイスタイプと地理的な場所に基づいてデバイスデータをフィルタリングし、統計を収集できます。 |
アプリケーションパフォーマンス監視 | 検索インデックスを使用して、メトリックデータを集計およびクエリできます。これは、アプリケーションパフォーマンスの監視に不可欠です。たとえば、時間範囲とアプリケーション名でデータをフィルタリングおよび集計できます。 |
位置情報サービス | 検索インデックスを使用して、地理的な場所をクエリし、店舗、アトラクション、サービスなどの近くのPOIを検索できます。 |
テキスト検索エンジン | テキスト検索エンジンで、全文クエリと関連性に基づくソートに検索インデックスを使用できます。これにより、ドキュメントや記事などの情報を効率的に検索できます。 |
主な機能
検索インデックスは、次の主な機能をサポートしています。
データベースクエリの高速化
プライマリキー列と非プライマリキー列に基づくクエリ
ブールクエリ
地理クエリ
AND、OR、NOT、および存在クエリ
INクエリ
ワイルドカードクエリ、プレフィックスクエリ、サフィックスクエリを含むあいまいクエリ
ネストクエリ
ソート
ページング
最大値と最小値、合計、平均、行の数と重複を除いた数、パーセンタイル統計を取得し、特定の条件で結果をグループ化し、データをヒストグラムとして表示するための集計操作
全文検索
KNNベクトルクエリ
クイックデータフィルタリング
詳細については、機能を参照してください。
サポートされているリージョン
検索インデックス機能は、中国(杭州)、中国(上海)、中国(青島)、中国(北京)、中国(張家口)、中国(ウランチャブ)、中国(深圳)、中国(広州)、中国(成都)、中国(香港)、日本(東京)、シンガポール、マレーシア(クアラルンプール)、インドネシア(ジャカルタ)、フィリピン(マニラ)、タイ(バンコク)、ドイツ(フランクフルト)、英国(ロンドン)、米国(シリコンバレー)、米国(バージニア)、およびSAU (リヤド - パートナーリージョン)でサポートされています。KNNベクトルクエリ機能は、米国(シリコンバレー)リージョンではサポートされていません。
障害復旧機能
デフォルトでは、検索インデックスは、ZRS冗長タイプをサポートするリージョンで、ゾーン冗長ストレージ(ZRS)障害復旧機能を提供します。ZRS冗長タイプを使用すると、データは複数のゾーンに格納されます。ゾーンで停電、ネットワーク停止、火災などの障害が発生した場合でも、データの読み取りおよび書き込み操作は影響を受けません。
検索インデックスは、中国(北京)、中国(上海)、中国(杭州)、中国(深圳)、中国(張家口)、中国(ウランチャブ)、中国(香港)、日本(東京)、インドネシア(ジャカルタ)、シンガポール、ドイツ(フランクフルト)の各リージョンでZRS冗長タイプをサポートしています。
制限
詳細については、検索インデックスの制限を参照してください。
使用上の注意
データテーブルの検索インデックスを作成するために、データテーブルの事前定義された列を指定する必要はありません。
適用可能なモデル
検索インデックスは、ワイドカラムモデルにのみ適用できます。
インデックスの同期
データテーブルの検索インデックスを作成した後、データは最初にデータテーブルに書き込まれます。データがデータテーブルに書き込まれた後、成功メッセージが返されます。同時に、別の非同期スレッドがデータテーブルから新しく書き込まれたデータを読み取り、検索インデックスに書き込みます。データがデータテーブルから検索インデックスに非同期的に同期されている場合、Tablestoreの書き込みパフォーマンスは影響を受けません。
ほとんどの場合、検索インデックスへのデータの同期のレイテンシは3秒以内です。Tablestoreコンソールでレイテンシをリアルタイムで表示できます。
有効期限(TTL)
データテーブルでUpdateRow操作が無効になっている場合は、データテーブルに作成された検索インデックスのTTL機能を使用できます。詳細については、検索インデックスのTTLの指定を参照してください。
一定期間だけデータを保持し、時間フィールドを更新する必要がない場合は、時間フィールドに基づいてデータテーブルを複数のデータテーブルにパーティション分割することでTTL機能を実装できます。次の表に、時間によるテーブルパーティション分割の原則、ルール、および利点を示します。
項目
時間によるテーブルパーティション分割
原則
日次、週次、月次、年次など、一定期間に基づいてデータテーブルをパーティション分割します。次に、パーティション分割されたテーブルごとに検索インデックスを作成します。これにより、ビジネス要件に基づいて、指定された期間、テーブルを保持できます。
たとえば、6か月間データを保持するには、各月のデータをデータテーブルに格納できます。データテーブルにtable_1からtable_6まで順番にラベルを付け、各データテーブルに検索インデックスを作成します。各データテーブルとその検索インデックスには、それぞれの月のデータのみが格納されていることを確認してください。TTL機能を実装するには、6か月以上保持されているデータテーブルとそれに関連付けられた検索インデックスを削除するだけで済みます。
検索インデックスを使用してデータをクエリする場合、データテーブルに必要な時間範囲内のすべてのデータが含まれている場合は、特定のデータテーブルのみをクエリする必要があります。必要な時間範囲内のデータが複数のデータテーブルにまたがる場合は、これらのすべてのデータテーブルをクエリし、クエリ結果をマージする必要があります。
ルール
単一の検索インデックスのサイズは最大500億行まで可能です。最適なクエリパフォーマンスを確保するために、単一の検索インデックスのサイズを200億行以下に制限することをお勧めします。
利点
保持されているデータテーブルの数に基づいてデータストレージ期間を調整できます。
クエリパフォーマンスはデータ量に正比例します。データテーブルが複数のデータテーブルにパーティション分割された後、各データテーブルのデータ量には上限があります。これにより、クエリパフォーマンスが向上し、クエリのレイテンシの増加やタイムアウトを回避できます。
最大バージョン数
最大バージョン数パラメータを指定したデータテーブルの検索インデックスを作成することはできません。
単一バージョンのみを許可する列にデータを書き込むときに、タイムスタンプを指定できます。バージョン番号の大きいデータを最初に書き込み、次にバージョン番号の小さいデータを書き込むと、バージョン番号の大きいデータがバージョン番号の小さいデータによって上書きされる可能性があります。
SearchリクエストとParallelScanリクエストの結果には、タイムスタンプ属性が含まれていない場合があります。
API操作
Tablestoreは、検索インデックスを管理し、検索インデックスの機能を実装するためのAPI操作を提供します。SearchまたはParallelScan操作を呼び出して、検索インデックスの機能を実装できます。2つのAPI操作によって提供されるほとんどの機能は同じです。ただし、パフォーマンスとスループットを向上させるために、ParallelScan操作はSearch操作の一部の機能を提供していません。
カテゴリ | 操作 | 説明 |
管理操作 | 検索インデックスを作成します。 | |
検索インデックスの詳細をクエリします。 | ||
検索インデックスのリストをクエリします。 | ||
検索インデックスを削除します。 | ||
クエリ操作 | Search | 検索インデックスのすべての機能をサポートしています。Search操作を呼び出して、サポートされているすべてのクエリ方法を使用してデータをクエリし、ソートおよび集計操作を実行してデータを分析できます。クエリ結果は、指定された順序で返されます。
|
データを並列でエクスポートします。ParallelScan操作を呼び出して、サポートされているすべてのクエリ方法を使用してデータをクエリできます。ただし、クエリ結果の取得を高速化するために、ParallelScan操作はソートや集計などの分析機能をサポートしていません。 ParallelScan操作は、Search操作と比較して優れたクエリパフォーマンスを提供します。ParallelScan操作が並列スキャンタスクを含む単一のクエリリクエストを処理する場合、そのスループットはSearch操作の5倍です。
この操作を呼び出すときは、ComputeSplits操作を呼び出して、単一のParallelScanリクエストの並列スキャンタスクの最大数をクエリする必要があります。 |
手順
手順 | 操作 | 説明 |
1 | データテーブルの検索インデックスを作成した後、検索インデックスの作成に使用されたフィールドに基づいて、データテーブルのデータをクエリできます。 | |
2 | 検索インデックスを使用してデータをクエリする | 次のクエリ方法が提供されています。すべて一致クエリ、一致クエリ、一致フレーズクエリ、用語クエリ、用語クエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、ネストクエリ、地理クエリ、地理境界ボックスクエリ、地理ポリゴンクエリ、存在クエリ、折りたたみ(重複排除)。ビジネス要件に基づいてクエリ方法を使用します。 検索インデックスを使用してデータをクエリする場合、フィールド値は、指定したトークン化方法に基づいて複数のトークンにトークン化できます。クエリ条件を満たす行は、指定したソートおよびページング方法に基づいて順序とページで返すことができます。詳細については、トークン化とソートとページングを参照してください。 |
3 | 検索インデックスを使用してデータテーブルのデータを分析するには、集計操作を実行して、最小値、最大値、合計、平均値、行の数と重複を除いた数、パーセンタイル統計を取得します。また、集計操作を実行して、フィールド値、範囲、地理的な場所、フィルター、ヒストグラム、または日付ヒストグラムで結果をグループ化することもできます。 | |
4 | クエリ結果の順序に要件がない場合は、並列スキャン機能を使用してクエリ結果を効率的に取得できます。 |
方法
Tablestoreコンソール、Tablestore CLI、およびTablestore SDKを使用して、検索インデックスを使用できます。
課金ルール
検索インデックスの課金対象項目には、検索インデックスの読み取りスループット、データストレージサイズ、インターネット経由のアウトバウンドトラフィックが含まれます。読み取りスループットは、予約読み取りスループットと従量課金読み取りスループットで構成されます。従量課金読み取りスループットは、従量課金制で課金されます。詳細については、検索インデックスの課金対象項目を参照してください。
FAQ
参考資料
Tablestoreでは、SQLクエリ機能を使用してデータのクエリと分析を実行できます。詳細については、SQLクエリを参照してください。
説明MaxCompute、Spark、Hive、HadoopMR、Function Compute、Realtime Compute for Apache Flinkなどの計算エンジンを使用して、Tablestoreのデータを分析することもできます。詳細については、概要を参照してください。
Tablestoreは、Eコマース注文、店舗検索、ジオフェンス、インテリジェントメタデータなどのシナリオで検索インデックスを使用する例を提供しています。詳細については、Tablestoreコンソールのシナリオデモページにアクセスしてください。