新製品・アップデートのご紹介MongoDB は、Voyage AI の買収を通じて、Atlas における生成 AI アプリケーションの精度と信頼性を強化します。詳しく見る >>
新着情報今すぐチェック!:AI 対応開発向け MongoDB MCP Server(パブリックプレビュー)ブログを読む >>
新着情報MongoDB 8.0:圧倒的な速度と性能を提供。詳しく見る >>

キーバリュー型データベースとは何ですか?

MongoDB Atlas の詳細

キーバリュー型データベースは、キーバリュー型ストアとも呼ばれ、キーと値のペアとしてデータが保存される NoSQL データベース型であり、データの読み取りと書き込み用に最適化されています。データは、一意のキーまたは複数のユニークなキーによって取得され、各キーに関連付けられた値を取得します。値には、文字列や数値などの単純なデータ型、または複雑なオブジェクトを使用できます。

一意のキーには任意のものを使用できます。ほとんどの場合、すべてのドキュメントで一意である ID フィールドとなります。関連する項目をグループ化するには、キーに共通の接頭辞を追加することもできます。キーと値のペアの一般的な構造は、key: value です。例: “name”: “John Drake”

目次

長年にわたり、データベースシステムは、データを列と行に保存するレガシーリレーショナルデータベースから、ユースケースごとにソリューションを可能にする分散データベースへと進化してきました。キーバリューストアは新しい概念ではなく、数十年前から存在していました。よく知られているストアの 1 つに、古い Microsoft Windows レジストリがあります。これにより、システム/アプリケーションは「キー値」構造でデータを保存できるようになります。この構造では、キーを一意の識別子または値への一意のパスとして表現できます。

データはキーに基づいて書き込まれ(挿入、アップデート、削除)、クエリが実行され、その値が保存または抽出されます。

キーバリュー型データベースの種類

キーバリュー型データベースはパフォーマンス用に最適化されており、ユースケースに応じて、さまざまなタイプのキーバリュー型データベースが存在します。たとえば、キーバリュー型データベースを使用する目的がキャッシュである場合は、インメモリキーバリュー型ストアを使用できます。永続ストレージ(ディスク)をお探しの場合は、永続キーバリュー型データベースを使用できます。ドキュメント、グラフ、キーバリューなど、複数のデータモデルをサポートするマルチモデルキーバリュー型データベースもあり、柔軟性を提供します。一般的なキーバリュー型データベースの例を次に示します。

  • インメモリキーバリュー型データベース: MongoDB。
  • 永続キーバリュー型データベース:MongoDB。
  • マルチモデルキーバリュー型データベース:MongoDB。

キーバリュー型データベースはどのように機能しますか?

キーバリュー型データベース(別名キーバリュー型ストア)は、値を(数値や単純な文字列から複雑なオブジェクトまで何でも可)を一意の識別子(キー)に関連付け、オブジェクトのトラックに使用します。最も単純な形式では、キーバリュー型ストアはほとんどのプログラミングパラダイムに存在する辞書/配列/マップオブジェクトのようなものですが、データベースマネジメントシステム(DBMS)によって管理されます。

キーバリュー型データベースが実行する主な操作は、次の3つです。

  • put(key, value):データベースに値を挿入または更新します。
  • get(key):データベースから値を読み取ります。
  • delete(key): データベースから値を削除します。

キーバリュー型データベースのスキーマ

リレーショナルデータベースとは異なり、キーバリューストアは特定のスキーマに従わないため、柔軟性があります。そのため、非構造化データや半構造化データに適しています。キーバリューストアを使用してデータを保存・取得する方が、リレーショナルデータベースのテーブル構造よりもはるかに簡単になります。下の図では、JSON 構造のため、すべてのデータがグループ化されています。単純なタイプから複雑なタイプまで、あらゆるものを値として保存できます。データをフェッチしている間は、JSON データを反復処理することで個々のレコードを抽出できます。

キーバリュー型ストアにおける類似アイテムのグループ化

一般に、項目は個別のキーと値のペアとして保存できます。ただし、顧客のような複雑なオブジェクトを保存する場合は、顧客名やメールアドレスなどの関連する詳細を、関連データとしてすべて保存することをお勧めします。キーに一貫性のある命名規則(プレフィックスなど)を使用して、関連する項目をグループ化できます。たとえば、キーは「customer:1」、「customer:2」などにできます。このような関連データを読み取るには、共通のプレフィックスを持つキーを反復処理できます。

キーバリュー型データベースは、コンパクトで効率的なインデックス構造を使用してキーによって値を迅速かつ確実に特定できるため、データを定数時間で検索して抽出する必要があるシステムに最適です。

MongoDB のようなドキュメントデータベースは、複雑なデータ型でも高速な取得をサポートするだけでなく、より高度なクエリ機能も提供します。MongoDB には、データ型がシンプルな場合にはキーバリューストアデータベースのように機能し、より複雑なデータ型やネスト構造が含まれる場合には本格的なドキュメントデータベースとして機能するという利点があります。

Redis は、永続的なデータベース内の比較的単純なデータ構造(プリミティブ型、リスト、ヒープ、マップ)の追跡に最適化されたキーバリュー型データベースです。Redis は、サポートする値の型を制限することで、値をクエリ・操作するための非常にシンプルなインターフェースを公開しており、最適に設定された場合は高いスループットを実現できます。

キーバリュー型データベースの機能は何ですか?

キーバリュー型データベースは、プログラムやプログラムのユーザーが、保存された値を指す名前や識別子であるキーによってデータを抽出できるという事実によって定義されます。キーバリュー型データベースは非常にシンプルに定義されているため、短時間で正確な情報を簡単に取得できます。以下に、キーバリュー型データベースの重要な機能をいくつか示します。

柔軟なデータモデル

キーバリュー型データベースには、固定スキーマやテーブル構造はありません。そのため、データの進化に合わせて、アーキテクチャや設計を変更することなく、キーバリューストアをシステム間で簡単に移行できます。柔軟なデータ構造は、速度とスケーラビリティも保証します。

クエリ言語なし

固定構造がないため、キーバリュー型データベースには CRUD 操作用のクエリ言語は必要ありません。キーを入力として指定し、値を出力として取得するだけです。一部のキーバリュー型データベースは、クエリ実行の高度な機能をサポートしています。たとえば、関連アイテムのセットの取得、集計、テキスト検索、部分フィールドの取得などです。

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

文字列や数値などの単純な型に加えて、キーバリュー型データベースは、配列、JSON、日付、メディアファイル(バイナリデータ)、ネストされた構造などのデータ型もサポートできます。

パフォーマンスのためのインデックス作成サポート

高度なキーバリュー型データベースは、プライマリインデックスのほかに、セカンダリインデックス、ハッシュインデックス、ツリーベースのインデックス、ワイルドカードインデックスなどさまざまなインデックス作成をサポートし、データ取得のパフォーマンスと効率を向上させています。

キーバリューストアの用途

キーバリューストアアプローチを選択することが最適なソリューションとなるユースケースはいくつかあります。

  • ゲームや金融などのオンラインアプリケーションにおけるユーザーセッション属性など、リアルタイムのランダムデータアクセス

  • キーに基づく、頻繁にアクセスするデータまたは設定のキャッシュメカニズム

  • 単純なキーベースのクエリに基づいて設計されるアプリケーション

キーバリューストアとしての MongoDB

MongoDB は主にドキュメントデータベースですが、キーと値のペアのデータ概念をサポートし、幅広いデータベースの例ユースケースをカバーしています。柔軟なスキーマと、クエリ言語セカンダリインデックスを備えた MongoDB は、「キーと値」のデータを保存するための優れた選択肢です。

この記事で詳しく学び、MongoDB のサービスとしてのデータベースプラットフォームである MongoDB Atlas をお試しください。

MongoDB はコレクションにデータを保存します。これは BSON(Binary JSON)ドキュメントのグループであり、各ドキュメントは本質的にフィールドと値の構造から構築されます。柔軟なスキーマを持つドキュメントを効率的に保存し、ランダム検索のために追加フィールドにインデックスを作成できる MongoDB の機能は、これを魅力的なキーバリューストアにします。

 

 

さらに、MongoDB のドキュメント値では、ネストされたキーと値の構造を使用できるため、グローバルな意味でキーによってデータにアクセスできるだけでなく、ドキュメント内のキーに関連付けられたデータにアクセスして操作することや、このようなセカンダリーキーによる高速な取得を可能にするインデックスを作成することもできます。

 

 

MongoDB のネイティブドライバーは、Python、C#、C++、Node.js など、よく使用される複数の言語をサポートしており、選択した言語でキーバリューデータを保存できます。

キー値をサポートするセカンダリインデックス

各フィールドは、クエリパターンに基づいてインデックス作成できます。たとえば、特定の session_id をキーとして、create_time を値として検索する場合、

db.sessions.createIndex({session_id : 1}) とそのキーに対するクエリををインデックスできます。

 

 

キーバリューをサポートするワイルドカードインデックス

ワイルドカードのインデックス作成により、ユーザーは MongoDB コレクション内のすべてのフィールドまたはフィールドのサブセットにインデックスを作成できます。したがって、単一ドキュメントに保存されたフィールド値型のセットがあり、各識別子に対してクエリが動的に発生する可能性がある場合は、これらのフィールド値セットに対して単一のインデックスを作成できます。

 

 

その結果、クエリは、このインデックスによってサポートされる完全なフィールドごとの値クエリを持つことになります。とは言え、ワイルドカードインデックスは、フィールド名を事前に予測できない場合や、クエリ述語の多様性がそれを必要とするユースケースでのみ使用する必要があります。詳細については、「ワイルドカードの制限」を参照してください。

キーバリューをサポートするスキーマ設計

MongoDB ドキュメントは複雑なオブジェクトになる可能性があるため、アプリケーションはスキーマ設計を使用して、インデックスのフットプリントを最小限に抑え、「キーと値」のアプローチへのアクセスを最適化できます。この設計パターンは属性パターンと呼ばれ、ドキュメントの配列を使用して「キーと値」構造を保存します。

 

 

{attributes.key : 1 , attributes.value : 1} のインデックスを作成すると、1 つのインデックスだけで任意のキーを検索できるようになります。

キーバリュー型データベースとキャッシュの比較

キーバリュー型ストアをサポートするデータベースはデータをディスクに保存してデータベースファイルを提供しますが、キーバリュー型のキャッシュ実装では、ほとんどのデータをメモリ内に読み込んだままにします。サーバーの障害や再起動が発生した場合、データは永続的ではないため、キャッシュにプリロードする必要があります。

MongoDB は、その WiredTiger エンジンのキャッシュを使用して、データアクセスと読み取りパフォーマンスを最適化し、レプリカセット全体で強力な整合性と高可用性を確保します。これにより、キャッシュされたデータの最高のパフォーマンスを活用しつつ、より回復力が高く、利用可能なフィールド値ストアが可能になります。

キーバリュー型データベースの利点

キーバリューアプローチでは、キーバリューの取得/アップデート/削除というシンプルな形式でデータにアクセスするための効率的でコンパクトなデータ構造を定義できます。

MongoDB ドキュメントは、キーバリューストアの高速なインデックスの作成をサポートするために、コンパクトで柔軟な構造を形成できます。一方、MongoDB ドキュメントは、階層全体とサブ値を含めることができるリッチなオブジェクトで構成される場合があり、高度なインデックスの作成により、任意の数の異なるキーでドキュメントを抽出できます。

まとめ

キーバリュー型ストアは、プログラミング言語のマップや辞書のように、アプリケーションがキーを介して高速に値を抽出する必要があるユースケースで使用されます。コンパクトな構造、そしてそれらのインデックスの簡単なインデックス作成と検索により、このデータベースのコンセプトは特定のアプリケーションワークロードにとって大きな利点となります。

しかし、最新のアプリケーションでは、単なるキーバリューストア以上のものが必要になる可能性が高く、そこで MongoDB と MongoDB Atlas が最適なソリューションとなります。MongoDB は、フィールド値ストアソリューションをサポートしながら、複雑なオブジェクトを形成し、データをクエリする複数の方法(全文検索アグリゲーションフレームワークAtlas データティアリング、または拡張を複数のシャード間で実行)を許可します。

よくある質問

今すぐ Atlas を利用する

すぐに利用を開始することができます。無料のクラスターには 512 MB のストレージが付属しているため、サンプル データを使用してプラットフォームに慣れ親しんでいただけます。
無料トライアルご相談・お問い合わせ
トライアルには以下が含まれています。
  • 世界中の 115 以上のリージョンで利用可能
  • サンプルデータセット
  • 常時認証
  • エンドツーエンドの暗号化
  • コマンドラインツール