
キーバリューデータベース、またはキーバリューストアは、連想配列(今日では辞書としてより一般的に知られているデータ構造)を保存、取得、管理するために設計されたデータストレージパラダイムです。辞書にはオブジェクト、つまりレコードのコレクションが含まれており、各オブジェクトにはさまざまなフィールドがあります。これらのレコードは、レコードを一意に識別するキーを使用して保存および取得され、データベース内のデータを検索するために使用されます。[ 1 ] [ 2 ]
標準化の欠如、トランザクションのサポートの制限、比較的単純なクエリ インターフェースにより、多くのキー バリュー システムは長い間、特殊な用途に限定されていましたが、 2010 年以降のクラウド コンピューティングへの急速な移行により、より広範なNoSQLムーブメントの一環として、それらへの関心が再び高まりました。ArangoDB [ 3 ] などのグラフ データベースの一部も内部的にはキーバリュー データベースであり、レコード間の関係 (ポインタ) の概念を第一級データ型として追加しています。[ 4 ] [ 5 ]
キーバリューデータベースは、よく知られているリレーショナルデータベース(RDB)とは異なります。RDBは、データベース内のデータ構造を、明確に定義されたデータ型を持つフィールドを含む一連のテーブルとして事前に定義します。データ型をデータベースプログラムに公開することで、さまざまな最適化を適用できます。対照的に、キーバリューシステムは、データベース自体に対して値を不透明として扱い、通常は、キーによる値の保存、取得、更新、削除などの単純な操作のみをサポートします。これにより、かなりの柔軟性が得られ、このようなシステムは、直接キー検索が中心となる低遅延、高スループットのワークロードに適していますが、複雑なクエリやレコード間の明示的な関係を必要とするアプリケーションにはあまり適していません。[ 5 ] [ 4 ]不透明であるということは、キーが検索条件、関係、または参照整合性制約の対象にならないことを意味します。 [ 6 ]不透明性は、キーバリューDBMSをドキュメントデータベースと区別するものです。ドキュメント DBMS はレコードの構造を解釈できますが、キーバリュー DBMS は各値を不透明なオブジェクトとして扱い、個々のフィールドでクエリを実行して取得するのではなく、関連付けられたキーによってのみ全体を取得できます。ドキュメント DBMS がキーバリュー DBMS と同じ方法でドキュメントを取得できる識別子フィールドを提供している場合でも、この違いは残ります。一部のキーバリュー DBMS は複雑な値型をサポートしています。たとえば、Redis はリストをサポートしています。[ 7 ]
キーバリューシステムは、結果的に一貫性のある設計から、強く一貫性のある設計またはシリアライズ可能な設計まで、幅広い一貫性スペクトルをカバーしており、レイテンシと可用性とのトレードオフの一部として一貫性レベルを構成できるものもあります。[ 5 ] [ 4 ]キーバリューシステムやその他のNoSQLシステムへの関心が再び高まったのは、ビッグデータ、分散、クラウドアプリケーションの要求が一因となっています。スケーラビリティと可用性により、クラウドデータ管理に魅力的なものとなっていますが、トランザクションサポートの制限、低レベルのクエリインターフェイス、標準化の欠如が、より広範な採用の障害となっています。[ 4 ]メモリ(RAM)にデータを保持するものもあれば、ソリッドステートドライブや回転ディスクを使用するものもあります。[ 1 ]
キーバリューシステムの中には、キーに構造を追加するものもあります。例えば、Oracle NoSQL Database は、「メジャー」と「マイナー」コンポーネントを持つ複合キーを使用してレコードを整理します。Oracle はこの構成をファイルシステムのディレクトリパス構造に例えています。しかし、より一般的には、キーバリューストアは、不透明な値に関連付けられた一意のキーの使用と、単純なキーベースの操作への重点によって定義されます。[ 8 ]
Unixには、連想配列を単一のキーとハッシュベースのアクセスで管理するためにKen Thompsonによって書かれた最小限のデータベースライブラリであるdbm (データベースマネージャ)が含まれていました。後の実装と関連ライブラリには、sdbm、GNU dbm(gdbm)、およびBerkeley DBが含まれます。[ 9 ]
より最近の例としては、Facebookで開発され、大規模アプリケーション向けに設計された永続的なキーバリューストレージエンジンであるRocksDBがあります。 [ 10 ]その他の例としては、 MemcachedやRedisなどのインメモリシステム、Berkeley DB、 Riak、Voldemortなどの永続システムがあります。[ 4 ]