【しゃーでぃんぐ】
シャーディング とは?
最終更新:
💡 巨大なデータを「複数の引き出しに分けて管理」する手法
データ集合をシャードという部分に分け、複数のサーバーへ分散して保存・処理する手法。容量や読み書きの負荷を分担して、水平スケーリングを行う。
📌 このページのポイント
- 同じデータの複製ではなく、データ集合を部分に分けて分散する
- シャードを増やして容量や処理能力を広げるが、負荷が均等とは限らない
- シャードキーはデータの分布とよく使うクエリの両方を考えて選ぶ
- シャードをまたぐ処理や移行には運用上の複雑さが増える
シャーディングって、なぜデータを分けるの?
1台で扱う容量や処理の限界を広げるためだよ。たとえばユーザーIDが1〜100、101〜200、201〜300のデータを別々のシャードへ保存する。データを分けても、アクセスの偏りによって負荷は変わるので、必ず三分の一になるわけではないよ。
シャードキーって何?
レプリケーションとは違うの?
どのシャードへ問い合わせるかは、アプリが決める?
製品によるよ。MongoDBではmongosというルーターが問い合わせ先を決める。キーを使って対象を絞れる場合も、全シャードへ問い合わせて結果を集める場合もある。シャードをまたぐ集計を必ずアプリだけで実装するわけではないよ。
複数のシャードを一緒に更新できる?
対応は製品と設定によるよ。MongoDBにはシャードをまたぐ分散トランザクションがある。ただし単一文書の更新より性能コストが増えることが多く、データ設計や制約を考える必要がある。分散すれば何でも速くなるわけではないんだ。
まとめ:ざっくりこれだけ覚えればOK!
「シャーディング」って出てきたら「データを複数のサーバーに分けて保存・処理する方法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Sharding」 = かけらに分ける
💬 Shardは「破片・かけら」という英語。データをシャードという部分に分けるイメージだよ。