順序付きキーバリューストア(OKVS)は、マルチモデルデータベースをサポートできるデータストレージパラダイムの一種です。OKVSは、バイトからバイトへの順序付きマッピングです。OKVSは、キーと値のペアをキーの辞書式順序でソートします。OKVSシステムは、異なる機能セットとパフォーマンスのトレードオフを提供します。それらのほとんどは、別のプロセスに組み込むために、ネットワークインターフェースのないライブラリとして出荷されます。ほとんどのOKVSはACID保証をサポートしています。一部のOKVSは分散データベースです。順序付きキーバリューストアは、 NewSQLデータベースシステム を含む多くの最新のデータベースシステムに採用されています
歴史
順序付きキーバリューストアの起源は、 1979年にケン・トンプソンがdbmで行った研究に遡ります。1991年後半には、キーのソート状態を維持できるBツリーバックエンドを備えたBerkeley DBがリリースされました。Berkeley DBは非常に高速であると言われ、様々な商用製品に採用されました。2.7までPythonの標準ライブラリに含まれていました。[ 1 ] 2009年には、トランザクションと順序付きキーの両方をサポートするKyoto Cabinet に置き換えられたTokyo Cabinetがリリースされました。2011年には、 OpenLDAPでBerkeley DBを置き換えるためにLMDBが作成されました。また、2012年にFacebookによってRocksDBとしてフォークされたGoogleのLevelDBもあります。2014年には、 Berkeley DBの後継であるWiredTigerがMongoDBに買収され、2019年からMongoDBデータベースの主要なバックエンドとなっています
OKVSパラダイムの他の注目すべき実装としては、Sophia [ 2 ]とSQLite3 LSM拡張が挙げられる。OKVSパラダイムのもう一つの注目すべき応用としては、RocksDBをベースにしたArangoDB [ 3 ]と呼ばれるマルチモデルデータベースシステムが挙げられる。
一部のNewSQLデータベースは、順序付きキーバリューストアによってサポートされています。プロパティグラフデータベースであるJanusGraphは、Berkeley DBバックエンドとFoundationDBバックエンドの両方を備えています。
主要な概念
辞書式符号化
基本データ型(ブール値、文字列、数値)とそれらのデータ型の組み合わせを、自然な順序を維持したソートされたコンテナ(タプル、リスト、ベクター)内に符号化するアルゴリズムがあります。バイトを直接操作することなく、順序付けされたキーバリューストアを操作することが可能です。FoundationDBでは、これはタプル層と呼ばれています。[ 4 ]
範囲クエリ
OKVS内ではキーは順序付けされているため、範囲クエリを実行できます。範囲クエリは、指定された2つのキーの間にあるすべてのキーを取得し、取得したキーがソートされた順序で返されることを保証します。
部分空間
キーの構成
より高レベルの抽象化を構築するために、キー空間を構築することができます。その考え方は、最上位レベルのキー空間の順序付けされた性質を利用してキーを構築することです。キー空間の順序付けされた性質を利用することで、特定のパターンを持つキーの範囲を照会することができます
非正規化
非正規化とは、同じデータを複数の部分空間で繰り返すことであり、一般的な手法です。これにより、インデックスとも呼ばれる二次表現を作成でき、クエリを高速化できます
高レベルの抽象化
以下の抽象化またはデータベースは、上位順序付けされたキーバリューストア上に構築されました
- 時系列データベース
- レコードデータベース[ 5 ]は行ストアデータベースとも呼ばれ、RDBMSと呼ばれるものと同様の動作をします
- タプルストアはトリプルストアやクアッドストアとも呼ばれるが、ジェネリックタプルストアとも呼ばれる。[ 6 ] [ 7 ]
- MongoDB APIを模倣したドキュメントデータベース[ 8 ]
- 全文検索[ 9 ]
- 地理情報システム[ 10 ]
- プロパティグラフ[ 11 ]
- バージョン管理されたデータ[ 12 ]
- 近似最近傍法のベクトル空間データベース[ 13 ]
これらの抽象化はすべて同じ OKVS データベースと共存でき、ACID がサポートされている場合は、トランザクション システムによって提供される保証に基づいて操作が行われます。
特徴マトリックス
| OKVS | ライセンス | トランザクション | 分散 | インメモリ | 複数のスレッド | 複数のプロセス | ネストされたトランザクション |
|---|---|---|---|---|---|---|---|
| Berkeley DB | AGPL | はい | いいえ | いいえ | はい | はい | はい |
| FoundationDB | Apache | はい | はい | はい | はい | はい | いいえ |
| 京都キャビネット | GPL | はい | いいえ | いいえ | ? | いいえ | いいえ |
| LevelDB | Apache | いいえ | いいえ | いいえ | ? | いいえ | いいえ |
| LMDB | OpenLDAP | はい | いいえ | いいえ | はい | はい | はい |
| RocksDB | Apache | はい | いいえ | いいえ | はい | いいえ | いいえ |
| SQLite(LSM拡張) | パブリックドメイン | はい | いいえ | はい | はい | はい | はい |
| TiKV | Apache | はい | はい | いいえ | はい | はい | いいえ |
| Tkrzw | Apache | はい | いいえ | ? | はい | いいえ | ? |
| 東京内閣 | LGPL | いくつかの | いいえ | ? | はい | ? | ? |
| WiredTiger | GPL | はい | いいえ | はい | はい | いいえ | いいえ |
ユースケース
OKVSは、2つの戦略を実装するのに役立ちます。1つは小さな機能を最適化することで、例えば読み取りまたは書き込みのレイテンシを10%改善することです。もう1つの戦略は、FoundationDBとTiKVの分散特性を活用することです。これらの分散特性は、大規模な復元力において同等のものがないため、どちらのユーザーも必要な高レベルの抽象化を再実装する必要があります。複雑さ、保守性、微調整、すぐに利用できる機能のバランスが依然として複雑であり、専門家の選択に委ねられています。場合によっては、より特殊なデータ構造の方が、OKVS上の高レベルの抽象化よりも高速になることがあります
OKVS パラダイムのもう 1 つの魅力は、そのシンプルで多用途なインターフェースにあります。そのため、実験的なストレージ アルゴリズムやデータ構造の興味深いターゲットになります。
参照
参考文献
- ^ 「11.11. bsddb — Berkeley DBライブラリへのインターフェース — Python 2.7.17ドキュメント」 . docs.python.org . 2020年1月16日閲覧
- ^ 「sophia - 最新のトランザクション対応キー値/行ストレージライブラリ」 . sophia.systems . 2020年1月16日閲覧。
- ^ 「新しいRocksDBとMMFilesストレージエンジンの比較」 ArangoDB . 2020年1月16日閲覧。
- ^ 「Python API — FoundationDB 6.2」 . apple.github.io . 2020年1月19日閲覧。
- ^ FoundationDB上に構築されたレコード指向ストア。、FoundationDB、2020年1月16日、 2020年1月17日取得
- ^ 「Generic Tuple Store Database」 . srfi.schemers.org . 2020年1月17日閲覧。
- ^「汎用タプルストア」。GitHub 。
- ^ MongoDB®ワイヤプロトコルを実装したFoundationDB上のドキュメントデータモデル:FoundationDB/fdb-document-layer、FoundationDB、2019年12月9日、 2020年1月17日取得
- ^ meilisearch/MeiliSearch、MeiliSearch、2021年6月19日、 2021年6月19日閲覧
- ^ 「6.1. GeoMesa インデックス構造 — GeoMesa 1.3.1 マニュアル」 . www.geomesa.org . 2020年1月19日閲覧。
- ^ 「JanusGraph FoundationDBストレージアダプター - Ted Wilmes、Expero Inc」www.youtube.com . 2020年1月17日閲覧。
- ^ 「ライトニングトーク:エンティティストア:バージョン管理のためのFoundationDBレイヤー... - Stephen Pimentel、 - YouTube」。www.youtube.com。2020年1月17日閲覧。
- ^ meilisearch/arroy、Meilisearch、2024年8月5日、 2024年8月6日閲覧