データベース・シャーディングの概要

このページで取り上げている:

データベースのシャーディングは、データベースのパフォーマンスとスケーラビリティを最適化するための強力なツールです。複数のサーバーにデータと処理能力を分散させることで、データへのアクセスを高速化し、データベースがより大きなワークロードを処理できるようにする。NoSQLデータベースは分散コンピューティングと自動シャーディングを念頭に設計されているため、シャーディングに最も関連するデータベースであることが多い。しかし、十分な努力をすれば、どんなデータベース技術でもシャーディングを実現できる。

データベースのシャーディングはどのように機能するのか?

データベースのシャーディングは、データセット全体をシャードと呼ばれる複数のグループに分割する。一旦分割されると、各シャードは独立して、通常はクラスターと呼ばれる複数のサーバー上に保存することができる。各シャードは独立してアクセスできるため、データへのアクセスが高速になり、処理、コンピューティング、ストレージに利用できるリソースが増えます。

シャーディングはどこで行われるのですか?

データベースにシャーディング機能が組み込まれている場合、開発チームがシャーディングを実現するために必要な作業は少なくなります。シャーディングがオプション機能であったり、コンフィギュレーションが必要であったりする場合は、慎重に計画を立てる必要がありますが、シャーディングのためにコードベースの大幅な変更や追加は必要ないはずです。基礎となるデータベースがシャーディングを行えない場合(多くのリレーショナルデータベースがそうである)、コードベースに大きな変更を加える必要があるかもしれない。

データをシャードする必要がありますか?

シャーディングを使うべきかどうかは、多くの要因に左右される。それらの要因には、データセットのサイズ、システムユーザーの数、実行される操作の数、インフラの制約などが含まれる。

ユーザー数の増加や操作の増加によってアプリケーションのパフォーマンスが著しく低下する場合、水平スケーリング(多くの場合シャーディングを使用)は、データベースで使用可能な計算リソースを増加させる1つの方法です。しかし、パフォーマンスの低下は、最適でないコード、適切なインデックスの欠如、データモデリングの変更の必要性、またはその他の問題を示している可能性もあります。シャーディングは常にパフォーマンス向上のための最初の選択肢であるべきではありませんが、一部のデータベーステクノロジーにとっては、パフォーマンス目標を達成するための摩擦の少ない手段となり得ます。

シャーディングの利点

  • より速いパフォーマンス:入出力を処理できるサーバーの数が増える。
  • 水平スケーリング:クラスタにサーバを迅速に追加できる
  • コスト:水平的なスケーリングは、垂直的なスケーリング(つまり、あるサーバーをより強力な別のサーバーにアップグレードすること)よりも安価であることが多い。
  • 分散/アップタイム:水平方向にスケーリングされた分散データベースは、従来の単一サーバーよりも優れたアップタイムを実現できます。

シャーディングの欠点

  • 複雑さ:データベースシステムによって、シャーディングの複雑さは異なります。分散、水平スケール、シャーディングを含めて設計されているデータベースもある。また、より実践的なDIYアプローチが必要なものもある。
  • リバランシング:クラスタにマシンを追加する場合、データを均等に分散させるためにシャードのバランスを調整する必要があります(例えば、1,000のドキュメントを3つのシャードに均等に分散させる場合、シャードあたりおよそ333のドキュメントになります。4つ目のシャードを追加すれば、1シャードあたり250ドキュメントになります)。データベースにシャーディング機能が組み込まれていない場合、リバランシングは複雑な手作業のDIYプロセスになることが保証されている。

シャーディングの種類

シャーディングには複数のアプローチがある。シャーディング機能が組み込まれているデータベースシステムもあれば、シャーディングを直接サポートしていない(そして多くのカスタムコーディングやDIYプロセスを必要とする)データベースシステムもある。各アプローチのゴールは、データを一貫してシャードに分割し、毎回同じシャードでデータを検索したり、同じシャードに書き込んだりできるようにすることです。

範囲ベースのシャーディング

範囲ベースのシャーディングでは、データ値を選択し、それが特定の範囲内にあるかどうかに基づいてシャードに割り当てます。例えば、年齢を含むユーザーデータがある場合、あるシャードには0~10歳のユーザーを格納し、別のシャードには11~20歳のユーザーを格納するといった具合です。

1つのシャードが他よりも多くのユーザーを保存してしまう可能性があるため、このアプローチには問題がある。また、不釣り合いに多くのデータを保存するシャードは、パフォーマンスに影響を与えるホットスポットになる可能性がある。

キーベースのシャーディング

キーベースのシャーディングは、より独立したアプローチをとる。データ内の値(NoSQLドキュメント・データベースでは通常ドキュメントID)がハッシュにかけられ、そのハッシュによってデータがどのシャードに格納されるべきかが決定される。

なぜなら、データベースにアクセスするすべてのアプリケーションがハッシュを構築できなければならないからである。また、この方法ではハッシュに使用するデータ値が不変である必要があります。これは通常問題にはなりませんが、まれにエッジケースで問題になることがあります。

Couchbase は以下を使用します。 自動キーベース・シャーディング を使用してクラスタ内でデータを均等に分散し、自動リバランシングと自動レプリケーションも提供します。これらの自動化により、重要なプロセスを簡素化し、開発チームの貴重な時間を解放することができます。

ディレクトリベースのシャーディング

ディレクトリベース・シャーディングは、ルックアップテーブルまたはルックアップ構成における値に基づいて、データのある値を特定のシャードにマッピングするアプローチである。これは範囲アプローチに似ているが、単純なルックアップを伴うこともある。例えば、オハイオ州に住所を持つユーザーは "Ohio "シャードに格納され、カリフォルニア州のユーザーは "California "シャードに格納されるといった具合だ。

ルックアップ・テーブルやコンフィギュレーションが利用できなくなったり、ダウンしたり、破損したりする可能性があるため、このアプローチには問題がある。このような場合、アプリケーションは読み取りや書き込みを実行できなくなる。

ジオ・シャーディング

ジオ・シャーディングは、他のシャーディング・オプションと組み合わせることも、その代わりに使用することもできる。ジオ・シャーディングの背景にある考え方は、データが最も頻繁にアクセスされる場所に物理的に近い場所に保存することである。例えば、オハイオ州の住所を持つユーザーはオハイオ州のサーバーに保存され、カリフォルニア州の住所を持つユーザーはカリフォルニア州のサーバーに保存される。

このアプローチは、より高速なアクセスを提供できるが、ホットスポットや十分に利用されていないサーバーを生む可能性もある。また、ジオ・シャーディングは、特定のアプリケーションや管轄区域の法的要件を満たせない可能性もある。

自動シャーディングの提供に加えて、Couchbaseは以下の方法でジオ・シャーディングをサポートします。 クロスデータセンターレプリケーション(XDCR).

エンティティベースのシャーディング

エンティティベースのシャーディングとは、別個の、しかし密接に関連するデータを同じシャードに一緒に保存することを意味する。例えば、アプリケーションのロジック内ではユーザーを1つのエンティティと見なしますが、ユーザーの買い物履歴は別のシャードに別々に保存することができます。関連するデータを同じシャードに保存することで、同時に検索するために必要な計算量を減らすことができます。

このアプローチの欠点は複雑さである。どのデータがどこに行くかを設定するのは複雑なプロセスになる可能性があり、特にあるデータが複数のエンティティによって使用されている場合はなおさらだ。

データベース・シャーディングの代替案

水平方向のスケーリングは、常に何らかのレベルでシャーディングを伴いますが、次のような多くのオプションがあります。 どのように をシャーディングする。1つの方法は、マイクロサービス・アーキテクチャや物理ディスク・シャーディングのような、ユーザーには不透明なアーキテクチャ・シャーディングだ。シャーディングは、以下のような方法で隠したり抽象化することもできる。 クラウドデータベース

データベースシステムを検討する際、シャーディングをどのように実現するかを理解することは極めて重要である。完全に抽象化され隠蔽されることもあれば、自動化されることもあり、複雑なコンフィギュレーション・オプションがサポートされることもあれば、サポートされずDIYのアプローチが必要になることもある。

Couchbase Capellaがデータベースのシャーディングにどのように役立つか

Couchbase カペラ は、デジタル企業のためのクラウドデータベースプラットフォームです。

CapellaはCouchbase Serverと同じシャーディングシステムを使用しており、キーベースの自動シャーディングである。ユーザーや開発者の視点から見ると、Couchbaseとのシャーディングは追加の設定やメンテナンスを必要としない。CRC32アルゴリズムをvBucketsと併用することで、Capellaはお客様のシステムにホットスポットが発生しないことを保証します。

Capellaはレプリケーションを自動化します。必要なレプリカの数を選択するだけで、あとはCapellaが処理します。

Capellaはリバランシングも自動化します。サーバを追加したりクラスタから削除したりすると、Capellaはダウンタイムを発生させることなく自動的にリバランスを行います。

最後に、CapellaはXDCR機能によってジオ・シャーディングを実現できる。XDCRはデータセンター間でリアルタイムにデータを複製します。XDCRレプリケーションは、ローカルレイテンシーを改善するため、またはデータロケーションの要件を満たすために、ユーザー定義のフィルターに基づいてデータを包含または除外することができます。

結論

シャーディングは、より多くのオペレーションを処理するためにデータベースをスケーリングする場合に理解すべき重要なコンセプトだ。そして、NoSQLデータベースは、リレーショナルデータベースによって課される制約の多くを排除するため、シャーディングが特に得意です。とはいえ、Couchbase Capellaはリレーショナルデータベースの最高の機能のいくつか(SQL構文と、JOINと ACIDトランザクション)を自動シャーディングの分散データベースに変換する。

Couchbaseのシャーディングの詳細については、こちらをご覧ください:

データベースの拡張方法を検討するためのその他の重要なリソース: