【しゃーでぃんぐ】

シャーディング とは?

公開:
💡 巨大なデータを「複数の引き出しに分けて管理」する手法
📌 このページのポイント
大規模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(破片・かけら)から来た言葉。ガラスが割れて破片になるように、データを破片に分ける様子から命名された
← 用語集にもどる