非リレーショナル ワークロード向けの Spanner

Spanner は、信頼性に優れたフルマネージド データベース システムです。Spanner はリレーショナル データベース管理システムへと進化しましたが、そのルーツは非リレーショナルの Key-Value ストレージ システムであり、そのようなシステムの基本的な特性を受け継いでいます。そのため、非リレーショナル(NoSQL)データベースとして Spanner を使用し、他の非リレーショナル データベースから Spanner に移行できます。このドキュメントは、Spanner が非リレーショナル ワークロードに適しているかどうかを判断するのに役立ちます。

NoSQL データベースが使用され始めたのは、高いスケーラビリティ、可用性、弾力性のあるコンピューティングを必要とする新しいアプリケーションが出現したころです。従来のリレーショナル データベースでは、このようなアプリケーションに対応できませんでした。NoSQL データベースは、トランザクション、一貫性、アドホック クエリなど、データ管理に不可欠なことが多い機能のいくつかを犠牲にして実現されたものです。Spanner は、高可用性アプリケーションの厳しい要求と、従来のリレーショナル データベースが提供する機能の両方をサポートするように構築されており、その両方の機能を活用できます。

Spanner を使用すると、シンプルな非リレーショナル ストレージから始めて、必要に応じてアプリケーションを拡張していくことができます。

Spanner が NoSQL データベースの基準を満たす仕組み

Spanner は、NoSQL ワークロードの次の基準を満たしています。

規模とパフォーマンス

NoSQL データベースが支持されているのは、読み取りと書き込みを水平方向にスケーリングできる点です。Spanner ではスケーリングやパフォーマンスを心配する必要がありません。Key-Value スタイルの Spanner データベースは、水平方向に拡張することで、1 秒あたり数億件の読み取り / 書き込みリクエストやペタバイト単位のデータを処理できます。Spanner のコンピューティング容量はワークロードに合わせてスケーリングされます。アプリケーションが数桁単位でスケーリングされたとしても、一貫した低レイテンシ プロファイルを維持できます。

NoSQL API

通常、従来のリレーショナル データベースには SQL を使用してアクセスしますが、リレーショナル データベースに慣れていないデベロッパーにとって SQL の習得には時間がかかります。通常、これらのデータベースのクライアントも永続的な接続に依存しており、スケーリングを行うには接続プール インフラストラクチャをデプロイする必要があります。一方で Spanner API は、接続障害を自動的に処理する gRPC/HTTP2 リクエストとレスポンス モデル上に構築されています。Spanner には、シンプルで言語ネイティブ、かつ効率的な NoSQL 読み取り / 書き込み API が用意されています。これらは、SQL の知識の必要がなくても使用できます。さらに、Spanner クライアントはスケーリングに接続プールを必要としません。

フルマネージド

NoSQL データベースの大きな魅力は管理が容易である点です。Spanner はフルマネージド サービスであるため、ユーザーに運用上の負担がかかることはありません。Spanner は、下位互換性を維持しながら、バックグラウンドかつゼロダウンタイムでソフトウェアとハードウェアの更新を行います。Spanner API とセマンティクスは、オペレーションが単一のマシン データベースで実行されている場合と同じであり、Spanner の内部アーキテクチャに関する知識は必要ありません。Spanner は、10 分の 1 ノードから数万ノードまでのデプロイメントで実行され、マネージド オートスケーラーにより自動的かつレスポンシブにスケーリングされます。

半構造化データ

Spanner は、半構造化データや非構造化データの格納に使用される JSON や BYTES などの柔軟なデータ型をサポートしています。他の NoSQL データベースと同様に、これらのデータ型を使用すると、すべてのストレージ スキーマを事前に指定する必要がなくなります。

アクセス制御

他の NoSQL データベースと同様に、Spanner では IAM ベースのアクセス制御がサポートされています。管理者は、ユーザー名とパスワードをデータベースに保存することなく、アクセス制御ポリシーを構成および管理できます。

Spanner と従来の NoSQL データベースの違い

Spanner には、従来の NoSQL データベースにはない次の利点があります。

トランザクション

アプリケーションの複雑さが増すに従い、データベースに対して複数行および複数テーブルのトランザクションの実行が必要になることとがよくあります。Spanner では、読み取り / 書き込みトランザクションが完全にサポートされるため、データベースが拡大してもトランザクション データストアに移行する必要がありません。ACID 準拠のデータベースである Spanner は、規模に関係なく、データベースのトランザクションの一貫性を常に維持します。

データ モデリング

NoSQL データベースでは、すべてのデータを 1 つのテーブルに収める必要があります。また、結合を実行できないため、データの非正規化を強制的に行う必要があります。このため、スキーマの設計が不自然になることがあります。Spanner では、単一のテーブルや非正規化に頼ることなくスキーマを指定できます。複数のテーブルにアクセスするアクセス パターンを最適化するために、テーブル インターリーブを使用できます。また、テーブル間で結合を行うこともできます。

アドホック クエリ

NoSQL API を主に使用している場合でも、デバッグや分析の目的でアドホック クエリを実行することが役に立つ場合がよくあります。Spanner は SQL 標準クエリ言語に準拠しています。リクエストの優先度を設定して、優先度の低いアドホック トラフィックをオンライン トラフィックから分離できます。また、Spanner の Data Boost を使用して、オンライン データベース トラフィックから完全に分離されたコンピューティング リソースに対して分析クエリを実行できます。

強整合性のセカンダリ インデックス

多くの場合、アプリケーションでは低レイテンシのルックアップをサポートするために、セカンダリ インデックスが必要です。一般的な NoSQL データベースでは、最終的に一貫性のあるセカンダリ インデックスが提供されるか、インデックスのサイズに制約が設定されています。そのため、これらの制約を回避するために、アプリケーションのロジックが複雑になる可能性があります。Spanner では、強整合性のセカンダリ インデックスが大規模かつサイズの制約なしで提供されます。そのため、一貫性の問題を気にすることなく、アプリケーションのロジックに集中できます。

Spanner が使用中の NoSQL データベースの要件に適しているかどうか

Spanner は、SQL と NoSQL の両方のユースケースをサポートする柔軟なデータ ストレージ システムです。最初にシンプルなストレージ要件から始めても、次第に複雑さが増していき、トランザクション、一貫性のあるセカンダリ インデックス、柔軟なクエリ言語など、NoSQL データベースでは通常提供されない機能がアプリケーションで必要になることがあります。Spanner では、これらの制限に縛られることなく、必要に応じてアプリケーションを拡張できます。

Spanner は、ほとんどの非リレーショナル ワークロードに適しています。Spanner は、シンプルな NoSQL 読み取り / 書き込み API を提供するだけでなく、高可用性、高信頼性、低レイテンシ、弾力性のあるコンピューティングを提供するだけでなく、きわめて高いスケーラビリティも備えています。Spanner を使用すると、多様なワークロードを単一の柔軟なプラットフォームに統合できます。