データベースのスケーラビリティとは、リソースの追加/削除によって変化する要求に対応できるデータベースの能力のことです。データベースは、これに対処するためにさまざまな技術を使用します。[ 1 ]マーク・ブルッカーによれば、「システムは、追加のワークロードの限界コストがほぼ一定である範囲でスケーラブルである」とのことです。サーバーレス技術はこの定義に当てはまりますが、インフラコストだけでなく、総所有コストを考慮する必要があります。[ 2 ]
データベースのスケーラビリティの初期の歴史は、ますます小型のコンピュータでサービスを提供することでした。IMSなどの最初のデータベース管理システムはメインフレームコンピュータで動作しました。Ingres 、Informix、Sybase、RDB、Oracleなどの第2世代はミニコンピュータで登場しました。dBaseやOracle(再び)などの第3世代はパーソナルコンピュータで動作しました。[ 3 ]
同時期に、より多くのデータとより要求の厳しいワークロードの処理に注目が集まりました。1980年代後半の重要なソフトウェア革新の1つは、更新ロックの粒度をテーブルやディスクブロックから個々の行に縮小したことでした。これにより、トランザクションに直接関与していない行であっても、粗いロックではアクセスが遅延する可能性があるため、重要なスケーラビリティのボトルネックが解消されました。以前のシステムは、リソースの増加に全く対応していませんでした。[ 4 ]
ソフトウェアの制約が解消されると、今度はハードウェアに注目が集まった。多くの分野で革新が起こった。まず、マルチプロセッサコンピュータのサポートが実現した。これは、複数のプロセッサが互いに干渉することなく、データベース要求を同時に処理できるようにするものであった。そして、これがマルチコアプロセッサのサポートへと発展していった。
より重要な変化は、2フェーズコミットプロトコルを使用して、分散トランザクションが別々のコンピュータに保存されているデータに影響を与えることを可能にし、共有なしアーキテクチャを確立したことである。[ 5 ]
さらに後になって、Oracleはマルチサーバークラスタで完全な機能を提供する共有アーキテクチャを導入した。 [ 6 ]
もう一つの革新は、テーブルのコピーを複数のコンピュータに保存すること(データベースレプリケーション)であり、これにより可用性(メインシステムが利用できない場合でもコピー上で処理を継続できる)とスケーラビリティが向上しました。特にクエリ/分析においては、プライマリが容量に達した場合にリクエストをコピーにルーティングできるためです。[ 7 ]
21世紀初頭、NoSQLシステムは一部のワークロードにおいてリレーショナルデータベースよりも好まれるようになった。その動機としては、さらに優れたスケーラビリティと、ドキュメントやその他の「非リレーショナル」データタイプのサポートが挙げられる。多くの場合、常に完全な一貫性を保証する厳格なACID一貫性プロトコルは犠牲にされ、すべてのノードが最終的に最新のデータを返すことを保証する結果一貫性が優先された。システムが十分な数のリクエストを処理できる限り、トランザクションが時折失われることを許容するものもあった。[ 8 ]最も有名な初期のシステムは、2004年に開発されたGoogleのBigTable / MapReduceである。これは、複数行トランザクションや結合などの機能を犠牲にして、複数のサーバーファームにわたってほぼ線形のスケーラビリティを実現した。[ 9 ]
2007年に最初のNewSQLシステムであるH-Storeが開発されました。NewSQLシステムは、NoSQLのスケーラビリティとACIDトランザクションおよびSQLインターフェースを組み合わせようとしています。[ 10 ]
データベースのスケーラビリティには、データ量、リクエスト量、リクエストサイズの 3 つの基本的な側面があります。リクエストのサイズは様々です。トランザクションは一般的に少量のデータに影響を与えますが、毎秒数千件に達することもあります。分析クエリは一般的に数は少ないですが、より多くのデータにアクセスする場合があります。関連する概念として、弾力性があります。これは、変化するワークロードに対応するために、システムが透過的に容量を追加および削除できる能力です。[ 11 ]
垂直データベーススケーリングとは、データベースシステムが最大構成のシステム(通常は大容量メモリと膨大なストレージ容量を備えたマルチプロセッサ)を最大限に活用できることを意味します。このようなシステムは管理が比較的容易ですが、可用性が低下する可能性があります。ただし、どのコンピュータにも最大構成の限界があります。ワークロードがその限界を超えた場合、選択肢は、さらに大きな別のシステムに移行するか、水平スケーラビリティを実現するためにシステムを再設計するかのいずれかになります。[ 11 ]
水平方向のデータベーススケーリングでは、単一のワークロードを処理するためにサーバーを追加します。ほとんどの水平スケーリング可能なシステムには、機能面での妥協が伴います。アプリケーションがより多くの機能を必要とする場合は、垂直スケーリングシステムへの移行が望ましい場合があります。[ 11 ]
データベースは、スマートウォッチからスーパーコンピュータ、複数の透過的に再構成可能なサーバーファームまで、容量の異なる個々のハードウェア上で動作します。[ 3 ]また、データベースは、マルチスレッド実装を使用して、64ビットマイクロプロセッサ、マルチコアCPU、および大規模なSMPマルチプロセッサ上で動作するように垂直方向に拡張されました。
ハードウェア構成を最大限に活用するには、データベース全体からテーブル全体、ディスクブロック、個々のテーブル行に至るまで、さまざまなロック技術が必要です。適切なロックの粒度はワークロードによって異なります。ロックするオブジェクトが小さいほど、ハードウェアがアイドル状態になっている間にデータベース要求が互いにブロックし合う可能性が低くなります。通常、大量のトランザクション処理アプリケーションをサポートするには行ロックが必要ですが、その代償として、より多くのロックを管理するための処理オーバーヘッドが発生します。[ 4 ]
さらに、一部のシステムでは、クエリが調べているデータをロックして更新による変更を防ぎ、作業の中断を回避することで、クエリがデータベースの時系列的に一貫性のあるビューを参照できるようにしています。あるいは、一部のデータベースでは、一貫性のあるクエリ結果を提供しながら、(ブロッキング)読み取りロックを回避するために、マルチバージョン読み取り一貫性を使用しています。 [ 12 ]
システムによっては、多数のリクエストが同時に同じデータにアクセスしようとすると、別の潜在的なボトルネックが発生する可能性があります。たとえば、OLTP システムでは、多数のトランザクションが同時に同じテーブルにデータを挿入しようとする場合があります。共有なしシステムでは、任意の時点で、そのような挿入はすべて、テーブルのパーティション (シャード) を管理する単一のサーバーによって処理され、サーバーが過負荷になる可能性があり、システムの残りの部分はほとんど何もすることがありません。このようなテーブルの多くは、新しい行が挿入されるたびに増加するシーケンス番号を主キーとして使用します。そのキーのインデックスも、これらの挿入を処理する際に競合 (過熱) を起こす可能性があります。この解決策の 1 つは、主キーの桁を反転することです。これにより、テーブルとキーの両方への挿入がデータベースの複数の部分に分散されます。[ 13 ]
基本的な手法としては、大きなテーブルをキーフィールドの値の範囲に基づいて複数のパーティションに分割する方法があります。例えば、各年のデータを別々のディスクドライブや別のコンピュータに保存することができます。パーティショニングによって、単一テーブルのサイズ制限がなくなります。
レプリケートされたデータベースは、テーブルまたはデータベースのコピーを複数のコンピュータ上に保持します。このスケーリング技術は、トランザクション履歴や税テーブルなど、めったに更新されない、またはまったく更新されないデータに特に便利です。[ 7 ]
単一コンピュータの限界を超えて拡張するために、さまざまなアプローチが用いられています。HP EnterpriseのNonStop SQLは、データもメモリもサーバー間で共有されない共有なしアーキテクチャを採用しています。コーディネーターがデータベース要求を適切なサーバーにルーティングします。このアーキテクチャにより、ほぼ線形の拡張性が実現されます。
広く支持されているX/Open XA標準は、グローバルなトランザクションモニターを使用して、半自律的なXA準拠のトランザクションリソース間で分散トランザクションを調整します。
Oracle RAC は、「すべてを共有する」アーキテクチャに基づいて、スケーラビリティを実現するために異なるモデルを使用しています。このアプローチでは、複数のコンピュータがクラスタ内の任意のディスクにアクセスできるようにする共有ディスク方式を採用しています。このような構成は、ネットワーク接続ストレージ (NAS)とストレージエリアネットワーク (SAN)をローカルエリアネットワークやファイバーチャネル技術と組み合わせることで実現されます。このアプローチには、「共有」論理キャッシュが含まれており、サーバーのメモリにキャッシュされたデータは、他のサーバーがディスクからデータを再度読み込む必要なく利用可能になります。各ページは、要求を満たすためにサーバー間を移動されます。更新は通常非常に高速に行われるため、「人気のある」ページは、ほとんど遅延なく複数のトランザクションによって更新できます。このアプローチは、最大 100 台のサーバーを含むクラスタをサポートするとされています。[ 14 ]
一部の研究者は、リレーショナルデータベース管理システムの固有の限界に疑問を呈している。例えば、GigaSpacesは、パフォーマンスとスケーラビリティを実現するには空間ベースのアーキテクチャが必要だと主張している。Base Oneは、主流のリレーショナルデータベース技術内で極めて高いスケーラビリティを実現できると主張している。[ 15 ]
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)