【分散DB入門】ノードとシャーディングを図書館の例えで理解する

はじめに

先日、後輩から「OpenSearchって、どういう仕組みで動いているんですか?」と質問を受けました。

業務で日常的に触っているわけではなかったので、調べ直すことにしました。

「たしか、分散DBと関連があったよな?」というのが調べる前のわたしの認識です。

そこでこの記事では、まず分散データベースの仕組み、特に重要な「ノード」と「シャーディング」について調べたことを、身近な「図書館」を例えに、初心者の方にも分かりやすくしてみました。

なぜ、データを「分散」させる必要があるの?

昔は、一つの巨大なコンピュータ(サーバー)に全てのデータを保存していました。しかし、データが膨大になると、一台では処理が追いつかなくなったり、その一台が故障すると全てのサービスが止まってしまったりする問題がありました。

この問題を解決するのが、複数のコンピュータ(ノード)にデータを「分散」させる、という考え方です。では、具体的にどうやって分散させるのでしょうか。代表的な2つの概念を見ていきましょう。

データを分散させる2つの重要概念

データを分散させるには、主に2つの代表的な考え方があります。

① ノードの追加(複製による可用性の向上)

ノードとは、データを保存する個々のコンピュータ(サーバー)のことです。図書館の例えでは「本棚」にあたります。

単純に、このノード(本棚)を増やし、全く同じ蔵書のコピーをそれぞれのノードに置いておく方法があります。

  • メリット(可用性の向上): もし一つのノード(本棚)がメンテナンスで使えなくなっても、全く同じコピーが別のノードにあるので、利用者はいつでも本を借りることができます。サービスが止まる心配がありません。
  • デメリット: 新しい本が入荷したとき、全てのノード(本棚)に同じ本を配って回る必要があり、司書さん(システム)の手間が少し増えます。

② シャーディング(分割による性能の向上)

シャーディングとは、巨大なデータを扱いやすいサイズのかたまりに「分割」することです。この分割されたデータのかたまりを「シャード」と呼びます。

図書館の例えでは、蔵書全体を「小説」「歴史」「科学」のようにジャンルごとに分けることにあたります。

  • メリット(性能の向上): 「科学」の新刊を追加したいとき、「科学」のシャードが格納されたノード(専門の本棚)にだけ行けばいいので、作業が非常に速く終わります。
  • デメリット: もし「科学」のシャードを持つノード(本棚)が一つしかない場合、それが壊れてしまうと「科学」のジャンルの本は一切利用できなくなってしまいます。

実践的な構成:ノードとシャーディングを組み合わせる

実際のシステムでは、これら2つの概念を組み合わせるのが一般的です。

  1. まず、蔵書(データ全体)を「小説」「歴史」「科学」といったジャンルごとのシャードに分けます(シャーディング)。
  2. 次に、分割した各シャードのコピーを、それぞれ別のノード(本棚)に配置します。

こうすることで、「作業は速いし(シャーディング)、しかも一つの本棚が壊れても安心(ノード)」という、両方のメリットを活かした非常に強力な図書館(データベース)が出来上がるのです。

まとめ

分散データベースの基本は、データを賢く「分割(シャーディング)」して性能を上げ、さらにそれぞれを複数の「ノード」に複製して安全性を高める、という考え方にあります。

この「ノード」と「シャーディング」の基本を押さえておけば、準備は万端です。次の記事では、いよいよこの知識を使ってOpenSearchの核心に迫っていきましょう。