【しゃーでぃんぐ】

シャーディング とは?

💡 巨大なデータを「複数の引き出しに分けて管理」する手法
📌 このページのポイント
大規模DB ルーター (シャードキーで振り分け) Shard 1 ID: 1 - 100 ユーザーA~D Shard 2 ID: 101 - 200 ユーザーE~H Shard 3 ID: 201 - 300 ユーザーI~L クエリ例 WHERE id = 150
シャーディングの仕組み
ひよこ ひよこ

シャーディングって何?なんでデータを分けるの?

ペンギン先生 ペンギン先生

1台のサーバーで扱えるデータ量には限界があるから、複数のサーバーに分けるんだ。例えば10億人のユーザーデータがあったとき、1〜3億人用サーバー、3〜6億人用サーバー、6〜10億人用サーバーって分けることで、どのサーバーも負担が3分の1になる。

ひよこ ひよこ

シャードキーって何?なんで重要なの?

ペンギン先生 ペンギン先生

どのデータをどのサーバーに入れるかを決める「振り分けの基準」がシャードキーだよ。ユーザーIDの範囲で分けたり、ハッシュ値で分けたり。これが偏ると「ホットスポット」(特定のサーバーだけ負荷集中)が起きるから、均等に分散するキーの選択がとても重要なんだ。

ひよこ ひよこ

レプリケーションとシャーディングって何が違うの?

ペンギン先生 ペンギン先生

レプリケーションは「同じデータを複数のサーバーにコピーする」もので、可用性と読み込み性能向上が目的。シャーディングは「データを分割して別々のサーバーに入れる」もので、データ容量と書き込み性能の拡張が目的。実際のシステムはこの2つを組み合わせて使うことが多いよ。

ひよこ ひよこ

シャーディングって何か困ることはないの?

ペンギン先生 ペンギン先生

シャードをまたぐ「クロスシャードクエリ」が一番の問題でね、「全ユーザーの合計金額」みたいなクエリはすべてのシャードにアクセスして集計しないといけない。RDBならJOINで簡単にできることが、シャーディングするとアプリ側での集計ロジックが必要になる。あとシャード間のトランザクション(分散トランザクション)も難しくて、2フェーズコミットなどの複雑な仕組みが必要になる。「スケールできるけど複雑さとの戦い」がシャーディングの本質だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「シャーディング」って出てきたら「大量データを複数のサーバーに分割して処理するスケールアウト手法だな」と思えばだいたいOK!
📖 おまけ:英語の意味
「Sharding」 = 破片に分ける
💬 Shard(破片・かけら)から来た言葉。ガラスが割れて破片になるように、データを破片に分ける様子から命名された
← 用語集にもどる