コンテンツへスキップ
uencoder

水平スケーリングのためにデータベースシャーディングを使う

シャーディングは、シャードキーによってデータを複数のデータベースへ分散します。シャーディング戦略、シャードをまたぐクエリ、トレードオフを学びましょう。

  1. 1

    シャーディングは大きなデータベースを複数の小さなシャードに分割し、各シャードがデータの部分集合を保持します。シャードキーが、各行をどのシャードが保持するかを決定します。戦略:レンジ (シャード 1 に A-M、シャード 2 に N-Z)、ハッシュ (hash(key) % num_shards)、ディレクトリ (参照テーブル)。シャーディングは水平スケーリングを可能にしますが、シャードをまたぐクエリ、JOIN、トランザクションが複雑になります。

  2. 2
    ハッシュ計算ツール →

    ハッシュ関数でシャードを決定します:shard = hash(shard_key) % num_shards。これによりデータが均等に分散されます。シャードの追加/削除時のデータ移動を最小限にするには、コンシステントハッシュ (consistent hashing を参照) を使ってください。ハッシュツールは、指定されたキーのシャード割り当てを計算します。

  3. 3
    SQL フォーマッター →

    特定のシャードを対象とするクエリを整形します。各シャードは同じスキーマを持ち、アプリケーションはシャードキーに基づいてクエリを正しいシャードにルーティングします。シャードキーを含まないシャード横断クエリは、すべてのシャードに問い合わせて結果をマージする必要があります。性能のため、これらは避けてください。

よくある質問

いつシャーディングすべきですか?
単一のデータベースが負荷 (CPU、メモリ、ディスク、IOPS) やデータ量に耐えられなくなったときです。垂直スケーリング (サーバーの増強) のほうが簡単なので、まずはそれを試してください。垂直スケーリングの限界に達したとき、または地理的なデータ分散が必要なときにシャーディングします。シャーディングは大幅な複雑さを追加するため、早まってシャード化しないでください。
シャードキーはどう選べばよいですか?
次のようなキーを選んでください:データを均等に分散させる (高いカーディナリティ)、ほとんどのクエリに含まれる (シャードルーティングが可能)、めったに変わらない (再シャーディングを最小化)、関連データをグループ化する (シャード横断 JOIN を回避)。よく使われるのは user_id、tenant_id、地理リージョンです。トラフィックが 1 つのシャードに集中するホットキーは避けてください。

このタスクを解決するワークフロー

コンテンツのハッシュと Base64 エンコード
入力のハッシュを計算し、コンパクトな転送のためにハッシュダイジェストを Base64 としてエンコードする。
パイプライン
SQL フォーマットと単語統計によるドキュメント化
SQL クエリを整形し、その後フォーマットされた出力を単語統計で分析する。
パイプライン
テキストのハッシュと整合性検証
入力テキストのハッシュを計算し、期待されるハッシュと比較して整合性を検証する。
パイプライン
テキストのハッシュと CRC32 チェックサム検証
データ整合性検証のために、暗号学的 SHA-256 ハッシュと CRC32 チェックサムの両方を計算する。
パイプライン
MD5 ハッシュ後に Base58 エンコード
MD5 ハッシュを計算し、コンパクトな表現のために Base58 としてエンコードする。
パイプライン
マルチハッシュ速度比較
入力をハッシュし、複数のハッシュアルゴリズムをベンチマークして速度と出力を比較する。
パイプライン
パスワード生成とハッシュ
ランダムパスワードを生成し、安全な保存のためにハッシュする。
パイプライン
SHA3-256 ハッシュと CRC32 チェックサム
SHA3-256 ハッシュを計算し、二重整合性検証のために CRC32 チェックサムを計算する。
パイプライン
SHA-512 ハッシュ後に Hex エンコード
SHA-512 ハッシュを計算し、可読性のために Hex としてエンコードする。
パイプライン
SQL フォーマットと構文検証
SQL クエリをフォーマットし、その後構文を検証する。
パイプライン
テキスト反転とハッシュ
テキストを反転し、その後反転結果の SHA-256 ハッシュを計算する。
パイプライン
テキストスクランブルとハッシュ
テキストをスクランブルし、その後スクランブル結果をハッシュする。
パイプライン

関連ツール