マルチドキュメントACIDトランザクションとスマートドキュメント圧縮機能を持ったNoSQLドキュメントデータベースであるRavenDBが、分散時系列データをサポートし、インデクス機能を拡張したRevenDB バージョン5をリリースした。
ドキュメントの圧縮は、単一の大規模ドキュメントではほとんど使用されることのない機能だ。RavenDBのCEOであるOren Eini氏が説明する。
RavenDBのドキュメントは、任意のサイズにすることが可能です。技術的には2GBのサイズに制限されているのですが、それに近いサイズになるとまた別の問題が発生します。私が見た最悪のケースではファイルが700MBを越えていましたが、ドキュメントのサイズが5MBを超過すると、RavenDBは警告を発するようになっています。これは主として、このようなMBレベルのドキュメントを送受信する際のコストが理由であって、RavenDB自体のドキュメント操作は問題ありません。しかしながら、ほとんどのドキュメントはもっと小さく、数KBから数十KBというオーダが一般的です。
問題はおもにRavenDB内部での値の圧縮に関わるものだ。RavenDBにはスキーマがないため、すべてのドキュメントに対して同じJSON構造が繰り返される。RavenDBのユーザが不満なのは、ほとんど操作することのないドキュメントが多数存在した場合に、ストレージの問題に突き当たることなのだ。
他のデータベース、例えばPostgreSQLやMySQLは、値を圧縮するメカニズムを備えている。RavenDB 5ではZstdを使って、高速かつ高効率の圧縮を実現した。Eini氏が説明する。
ドキュメントのアルゴリズムをトレーニングできれば、ドキュメント間の冗長性を取り除くことによる大きなメリットが期待できます。最終的には、圧縮されたコレクションにドキュメントを書き込むと、RavenDBがそのデータを見て、最適なデータの圧縮方法を学習するようになります。たくさん書けば、そのデータ圧縮により適したディクショナリをRavenDBが見つけられます。このような方法で、個々のデータを圧縮および伸張可能としながらも、優れた圧縮率を維持できるようになるのです。
RavenDB 5では、時間によって順序付けされた、時系列のデータポイントを持ったデータの処理も導入されている。RavenDBのドキュメントモデルと分散環境に統合された時系列処理により、シンプルなオペレーションを維持しながら、ドキュメントのコンテキスト保存が可能になった。時系列データはドキュメントとは分離して保持されており、ドキュメントを変更することなく、これらのデータを迅速に変更できるように拡張されている。分散配置されたクライアントとノードからは並列的な時系列データの修正が可能で、修正結果はコンフリクトすることなくマージされる。
RavenDB 5の時系列機能では、新たなAPIとGUIによる管理、トランザクション保証、大規模データベースに対する効率的なクエリとアグリゲーションなどがサポートされた。
RavenDB 5ではインデクスが拡張され、時系列および分散カウンタの静的インデクスが作成されるようになり、インデクス内での値の比較交換(compare-excchange)の使用がサポートされている。
分散カウンタの値にも静的インデクスがサポートされ、インデクスではキーの比較交換が追加されている。
RavenDBクライアントAPIでは、アタッチメント、バルク挿入、比較交換、ロードバランシング、パッチ、サブスクリプション、シリアライズが改良された。
RavenDB 5の他の改良点や変更に関する詳細は、RavenDB 5 changelogに掲載されている。Eini氏による注目機能のデモンストレーションも一見に値する。
RavenDBでは、オンプレミスとAWSまたはAzureによるクラウドサービスが選択できる。また、Node.jsやPython、Java、Ruby、C++など、さまざまな環境用のオープンソースクライアントが提供されている。
RavenDBクライアントはMITライセンスで使用可能なオープンソースソフトウェアで、RavenDBアプリケーションとの通信を行う。これ以外のRavenDBの利用は、すべてAGPLv3ライセンス下で運用されることになるのだが、このライセンス条件に従うことを望まない場合には、フリーオプションを含むRavenDB商用ライセンスも用意されている。
コントリビューションは行動規約に従うことを条件に、RavenDBコントリビューションガイドラインを通じて受け付けられる。