書き込みシャーディングを使用してパーティション間でワークロードを均等に分散する - Amazon Keyspaces (Apache Cassandra 向け)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

書き込みシャーディングを使用してパーティション間でワークロードを均等に分散する

Amazon Keyspaces のパーティションで効率的な書き込みの分散を行う方法として、スペースの拡張があります。これにはさまざまな方法があります。乱数を書き込んだパーティションキー列を追加して、パーティション間で行を分散させることができます。または、クエリ対象に基づいて計算された数値を使用することができます。

複合パーティションキーと乱数値を使用したシャーディング

パーティション全体に均等にロードを分散させるための戦略として、乱数を書き込んだパーティションキー列を追加する方法があります。次に、より大きなスペース全体の書き込みをランダム化します。

例えば、次のテーブルに、日付を表すパーティションキーが 1 つあるとします。

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, title text, description int, PRIMARY KEY (publish_date));

このテーブルをパーティション間で均等に分散するために、乱数が保存されている追加のパーティションキー列 shard を含めることができます。例:

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, shard int, title text, description int, PRIMARY KEY ((publish_date, shard)));

データを挿入するときに、shard 列に対して 1200 の乱数を選択するとします。これにより、(2020-07-09, 1)(2020-07-09, 2) などから (2020-07-09, 200) までの複合パーティションキーバリューが生成されます。パーティションキーをランダム化しているため、毎日のテーブルへの書き込みは複数のパーティション間で均等に分散されます。これにより、並列性が強化され、全体的なスループットが向上します。

ただし、特定の日のすべての行を読み取るには、すべてのシャードの行をクエリしてから結果をマージする必要があります。例えば、まず、パーティションキーバリュー (2020-07-09, 1) に対して SELECT ステートメントを発行したとします。次に、(2020-07-09, 2) などから (2020-07-09, 200) までに対して別の SELECT ステートメントを発行します。最終的には、アプリケーションを使用して、これらすべての SELECT ステートメントの結果をマージする必要があります。

複合パーティションキーと計算値を使用したシャーディング

ランダム化の方法は、書き込みスループットを大幅に向上させることができます。しかし、行が書き込まれたときに shard 列にどの値が書き込まれたのかわからないため、特定の行の読み取りが難しくなります。個々の行の読み取りを容易にするために、別の戦略を使用することができます。パーティション間で行を分散させるには、乱数を使用せずに、クエリする項目に基づいて計算できる数値を使用します。

前の例では、パーティションキーで今日の日付が使用されています。各行にはアクセス可能な title 列があり、日付別に加えてタイトル別に行を頻繁に検索する必要があるとします。アプリケーションでは、テーブルに行が書き込まれる前に、タイトルに基づいてハッシュ値が計算され、それを使用して shard 列が入力されます。この計算では、1 から 200 までの数値が生成され、ランダムな方法と同様に、完全に均一に分散されます。

単純な計算で十分である可能性があります。例えば、タイトル、モジュロ 200、+ 1 の文字の UTF-8 コードポイント値の積です。複合パーティションキーバリューは、日付と計算結果を組み合わせた値になります。

この方法を使用すると、書き込みがパーティションキーバリュー全体に均一に分散されます。したがって、物理パーティション全体にも均一に分散されます。これで、特定の title 値のパーティションキーバリューを計算できるため、特定の行と日付に対して簡単に SELECT ステートメントを実行できます。

特定の日のすべての行を読み取るには、(2020-07-09, N) キー (ここで N は 1〜200) を SELECT する必要があり、アプリケーションはすべての結果をマージする必要があります。この方法には、すべてのワークロードを利用する単一の「ホット」パーティションキーバリューを使用しないというメリットがあります。