key-value データベースNoSQL データベースとも呼ばれており、非リレーショナルデータベースの一種で、キーと値によるシンプルな方法を使用してデータを格納します。key-value ペアのコレクションとしてデータを格納します。ここでキーは、一意の識別子として機能します。キーと値のどちらも、単純なオブジェクトから複雑な複合オブジェクトまで、何であってもかまいません。key-value データベース (または key-value ストア) は高度なパーティション化に対応しており、他のタイプのデータベースでは達成できない大規模な水平スケーリングが可能です。

key-value データベースの利点は何ですか?

従来のリレーショナルデータベース (SQL データベース) は、行と列を含むテーブル形式でデータを格納します。これらはデータに厳密な構造を適用するため、すべてのユースケースに最適というわけではありません。一方、key-value データベースは NoSQL データベースです。これにより、柔軟なデータベーススキーマが可能になり、特定のユースケースで大規模なパフォーマンスを向上させることができます。key-value ストアの利点は以下のとおりです。

スケーラビリティ

すべてのユーザークエリはデータのやり取りを必要とするため、データベースはアプリケーションのパフォーマンスの障害となることがよくあります。レプリケーションやシャーディングなど、問題を解決するためのいくつかの戦略は、アプリケーションコードを複雑にします。多くの key-value データベースには、高度なスケーリング機能のサポートが組み込まれています。水平方向に拡張し、データをサーバー全体に自動的に分散して、単一サーバーの障害を軽減します。

使いやすさ

key-value データベースは、開発者が現実世界のオブジェクトをソフトウェアオブジェクトに直接マッピングできるようにするオブジェクト指向のパラダイムに従います。Java などのいくつかのプログラミング言語も同じパラダイムに従います。エンジニアは、コードオブジェクトを基盤になる複数のテーブルにマッピングする代わりに、コードオブジェクトと一致する key-value ペアを作成できます。これにより、key-value ストアは開発者がより直感的に使用できるようになります。

パフォーマンス

key-value データベースは、低オーバーヘッドのサーバーコールで絶え間ない読み取り/書き込み操作を処理します。レイテンシーの改善と応答時間の短縮により、スケールに応じたパフォーマンスが向上します。これらは、相互に関連する複数のテーブルではなく、単純な単一テーブル構造に基づいています。リレーショナルデータベースとは異なり、key-value データベースはリソースを大量に使用するテーブル結合を実行する必要がないため、はるかに高速になります。

key-value データベースのユースケースとは?

key-value データベースシステムは、アプリケーションのプライマリデータベースとして、またはニッチな要件を処理するために使用できます。以下に、key-value データベースのユースケースの例をいくつか示します。

セッション管理

ウェブアプリケーションのようなセッション指向のアプリケーションは、ユーザーがアプリケーションにログインするとセッションを開始し、ユーザーがログアウトするかセッションがタイムアウトするまでアクティブな状態にあります。この期間中、アプリケーションはすべてのユーザーセッション属性を、メインメモリ内またはデータベース内に格納します。ユーザーセッションデータには、プロファイル情報、メッセージ、パーソナライズされたデータやテーマ、推奨事項、ターゲット型のプロモーション、割引などが含まれている可能性があります。

ユーザーセッションはそれぞれ、一意の識別子を持ちます。プライマリキー以外の何かによってセッションデータのクエリが行われることはないため、セッションデータには、高速なキーと値のストアが適しています。一般に、key-value データベースは、リレーショナルデータベースよりもページあたりのオーバーヘッドが小さくなります。

ショッピングカート

ホリデーショッピングシーズン中には、e コマースウェブサイトが秒の単位で 10 億件単位の注文を受けることがあります。key-value データベースは、分散された処理とストレージを通して、数百万人の同時ユーザーにサービスを提供するのと同時に、大量のデータと、極めて量の多い状態の変化のスケーリングを処理することができます。key-value ストアには、ストレージノードの損失に対処することができる冗長性も組み込まれています。

メタデータのストレージエンジン

key-value ストアは、より高いレベルのデータアクセスのための基盤となるストレージレイヤーとして機能します。例えば、リアルタイム動画ストリーミングやインタラクティブコンテンツなどのメディアやエンターテイメントのワークロードのスループットとコンカレンシーをスケールできます。プレイヤーデータ、セッション履歴、リーダーボードを使って、数百万人の同時接続ユーザーに対応したゲームプラットフォームを構築することもできます。

キャッシュ

key-value データベースを使用してデータを一時的に格納し、取り出しを高速化できます。例えば、ソーシャルメディアアプリケーションには、ニュースフィードコンテンツなど、頻繁にアクセスされるデータを格納できます。インメモリデータキャッシュシステムも key-value ストアを使用してアプリケーションの応答を高速化します。

key-value データベースの仕組み

key-value データベースは、すべてのデータを key-value ペアのセットとして整理することで機能します。キーは質問、値は質問に対する答えと考えることができます。以下の例では、プライマリキーは Product ID と Type という 2 つのキーを組み合わせたものです。Product ID は、項目が格納されるパーティションを説明するパーティションキーです。Type はソートキーであり、項目をディスクに格納する順序を決定します。パーティションキーとソートキーを組み合わせると一意のプライマリキーが形成され、データベース内の単一の値にマッピングします。

この例では、データオブジェクトブックにはタイトル、著者、出版日などの属性があります。すべての書籍データオブジェクトには BookID というキーがあります。BookID と関連する書籍オブジェクトを key-value ストアに直接リンクできます。また、テーブル内の BookID を検索してデータを取得することもできます。また、各項目には独自のスキーマがあるため、key-value ストアはさまざまな構造のデータを非常に柔軟に格納できます。

DynamoDB に key-value ペアとして格納されたデータの例を示す図

key-value データベースの特徴は?

選択したソリューションに応じて、key-value ストアは以下に示すようないくつかの追加機能を提供できます。

複雑なデータ型のサポート

key-value ストアは、整数やテキストなどの定義済みのデータ型をサポートします。ただし、多くは、配列、ネストされた辞書、画像、ビデオ、半構造化データなどのより複雑なオブジェクトもサポートできます。データベースにデータに関するより多くの情報を提供することで、ストレージとクエリのパフォーマンスを最適化する余地が広がります。

テーブル結合は不要

key-value データベースでは、リソースを大量に使用するテーブル結合を実行する必要はありません。その柔軟性により、必要なすべての情報を 1 つのテーブルにまとめることができます。これが、key-value ストアのパフォーマンスが非常に高い理由の1つです。

ソートキー

key-value ストアはキーをソートしてデータを体系的に格納し、パーティショニングを実装することができます。例えば、キーは次のようにソートできます。

  • アルファベット順または数字順
  • 時系列
  • データサイズ

顧客のメールアドレスを一意のキーとして使用する key-value ストアを考えてみましょう。メールアドレスはアルファベット順に並べ替えることができるため、A-J メールリストのすべてのデータはサーバー 1 に、K-S はサーバー 2 に、というように格納されます。

セカンダリキーサポート

一部の key-value ストアでは、2 つ以上の異なるキーまたはセカンダリインデックスを定義して同じデータにアクセスできます。例えば、主なメールアドレスと主な電話番号ごとに顧客データを格納できます。

レプリケーション

多くの key-value ストアは、複数のストレージノード間でデータを自動的にコピーすることにより、組み込みのレプリケーションサポートを提供しています。これは災害からの自動回復に役立ちます。サーバーに障害が発生した場合でもデータを保持できます。

パーティション

パーティションは、ノード間でデータを分散する方法です。多くの key-value データベースには、デフォルトのパーティションオプションが用意されています。パーティションの入力パラメータを定義するオプションも用意されているものもあります。例えば、数値キーを 1000 のグループに分割できます。高度な key-value データベースは、key-value データベースを複数の地理的位置に分散させることも自動的にサポートします。これにより、ユーザーの所在地に近い場所でクエリに応答できるため、アプリケーションの可用性と信頼性が向上します。

ACID サポート

不可分性、整合性、分離性、耐久性 (ACID) は、あらゆる状況でデータの正確性と信頼性を保証するデータベースプロパティです。例えば、連続してデータに複数の変更を加える場合、不可分性ではすべての変更が順番に行われる必要があります。1 つの変更が失敗すると、すべてが失敗します。

高度な key-value データベースは、ACID をサーバー側でネイティブにサポートします。これにより、テーブル内およびテーブル間の複数の項目を調整したり、変更しないといった、開発者のエクスペリエンスを簡素化します。トランザクションのサポートにより、開発者は、スケール、パフォーマンス、およびエンタープライズの利点を、より広範なミッションクリティカルなワークロードに拡張することができます。

key-value データベースにはどのような制限がありますか?

key-value データベースには、あらゆる種類のテクノロジーの選択と同様に、ある程度のトレードオフが必要です。

複雑なクエリがない

key-value データベースは複雑なクエリをサポートしていないため、開発者はコード内でこの問題を回避する必要があります。データ操作は、主に get、put、delete などの単純なクエリ言語用語を使用して行われます。データにアクセスする前にデータをフィルタリングおよびソートできる量には制限があります。

スキーマの管理ミス

key-value ストアの設計は、開発者にスキーマを適用するものではありません。データベースプログラムのスキーマは誰でも変更できます。開発チームは、長期的な問題を回避するために、データモデルを体系的に計画する必要があります。厳密なスキーマがないということは、消費するデータの適切な解釈 (「読み取り時のスキーマ」と呼ばれることもある) がアプリケーションの責任であるということでもあります。

AWS はお客様の key-value データベース要件をどのようにサポートできますか?

Amazon DynamoDB は、あらゆる規模で高性能アプリケーションを実行できるように設計された、最も人気のある key-value データベースの 1 つですフルマネージド型、マルチリージョン、マルチアクティブデータベースで、次のような機能を備えています。

  • スケールツーゼロを含む、制限のないスケーラビリティと、一貫した 1 桁ミリ秒単位のレイテンシーを達成します。
  • サーバーレスで、バージョンアップもメンテナンスウィンドウもなく、管理するサーバーやソフトウェアもありません。
  • 99.999% の可用性を実現するように設計されており、DynamoDB Global Tables ではアクティブ/アクティブレプリケーションが可能なため、ローカルでの読み取りパフォーマンスでグローバルに分散されたアプリケーションを構築できます。
  • 保存時のデフォルトの暗号化、ポイントインタイムリカバリ、オンデマンドのバックアップと復元などにより、高い安全性と信頼性を実現します。
  • Amazon DynamoDB Accelerator (DAX) との互換性、Amazon S3 からの一括インポート/エクスポートAmazon Kinesis Data StreamsAmazon CloudWatch など、多くの AWS サービスと簡単に統合できます。

NoSQL テーブルの作成とクエリに関する、このステップごとに説明しているチュートリアルを使うと、10 分で DynamoDB を起動して実行できます。今すぐ無料アカウントを作成して、AWS での key-value データベースの使用を開始しましょう。

Amazon DynamoDB 入門
Amazon DynamoDB データモデリング