【分散DB入門】ノードとシャーディングを図書館の例えで理解する
はじめに
先日、後輩から「OpenSearchって、どういう仕組みで動いているんですか?」と質問を受けました。
業務で日常的に触っているわけではなかったので、調べ直すことにしました。
「たしか、分散DBと関連があったよな?」というのが調べる前のわたしの認識です。
そこでこの記事では、まず分散データベースの仕組み、特に重要な「ノード」と「シャーディング」について調べたことを、身近な「図書館」を例えに、初心者の方にも分かりやすくしてみました。
なぜ、データを「分散」させる必要があるの?
昔は、一つの巨大なコンピュータ(サーバー)に全てのデータを保存していました。しかし、データが膨大になると、一台では処理が追いつかなくなったり、その一台が故障すると全てのサービスが止まってしまったりする問題がありました。
この問題を解決するのが、複数のコンピュータ(ノード)にデータを「分散」させる、という考え方です。では、具体的にどうやって分散させるのでしょうか。代表的な2つの概念を見ていきましょう。
データを分散させる2つの重要概念
データを分散させるには、主に2つの代表的な考え方があります。
① ノードの追加(複製による可用性の向上)
ノードとは、データを保存する個々のコンピュータ(サーバー)のことです。図書館の例えでは「本棚」にあたります。
単純に、このノード(本棚)を増やし、全く同じ蔵書のコピーをそれぞれのノードに置いておく方法があります。
- メリット(可用性の向上): もし一つのノード(本棚)がメンテナンスで使えなくなっても、全く同じコピーが別のノードにあるので、利用者はいつでも本を借りることができます。サービスが止まる心配がありません。
- デメリット: 新しい本が入荷したとき、全てのノード(本棚)に同じ本を配って回る必要があり、司書さん(システム)の手間が少し増えます。
② シャーディング(分割による性能の向上)
シャーディングとは、巨大なデータを扱いやすいサイズのかたまりに「分割」することです。この分割されたデータのかたまりを「シャード」と呼びます。
図書館の例えでは、蔵書全体を「小説」「歴史」「科学」のようにジャンルごとに分けることにあたります。
- メリット(性能の向上): 「科学」の新刊を追加したいとき、「科学」のシャードが格納されたノード(専門の本棚)にだけ行けばいいので、作業が非常に速く終わります。
- デメリット: もし「科学」のシャードを持つノード(本棚)が一つしかない場合、それが壊れてしまうと「科学」のジャンルの本は一切利用できなくなってしまいます。
実践的な構成:ノードとシャーディングを組み合わせる
実際のシステムでは、これら2つの概念を組み合わせるのが一般的です。
- まず、蔵書(データ全体)を「小説」「歴史」「科学」といったジャンルごとのシャードに分けます(シャーディング)。
- 次に、分割した各シャードのコピーを、それぞれ別のノード(本棚)に配置します。
こうすることで、「作業は速いし(シャーディング)、しかも一つの本棚が壊れても安心(ノード)」という、両方のメリットを活かした非常に強力な図書館(データベース)が出来上がるのです。
まとめ
分散データベースの基本は、データを賢く「分割(シャーディング)」して性能を上げ、さらにそれぞれを複数の「ノード」に複製して安全性を高める、という考え方にあります。
この「ノード」と「シャーディング」の基本を押さえておけば、準備は万端です。次の記事では、いよいよこの知識を使ってOpenSearchの核心に迫っていきましょう。





