BaseX 不明なNoSQLユニバース



Galaxyの端のどこかで、非常に印象的なNoSQLソリューションを見つけました...



愛、無関心、憎しみ、賞賛、誇り、怒り、喜び-これらは私が一年の間持っていた感情です。 この製品を研究すればするほど、気持ちが強くなります。



著者からのマーケティングの種は次のようになります。

BaseXは、W3C UpdateおよびFull Text仕様を完全にサポートするXPath / XQuery 3.0プロセッサを備えた、非常に軽量で高性能でスケーラブルなXMLデータベースです。 インタラクティブで使いやすいグラフィカルインターフェイスにより、XMLドキュメントを簡単に調べることができます。


とてもおいしいように聞こえますが、現実は、いつものように、最も安全でない場所を痛々しいほど痛烈に襲います



中身は何ですか



BaseXは、Javaで記述され、BSDライセンスの下で配布されるオープンソースソフトウェア製品です。 ボックスから、グラフィカルインターフェイス(管理、分析、構文強調表示付きのコードの編集)、サーバー、クライアント、Webサーバーを備えたユーティリティを取得します。 現実には、さらに多くの情報が得られますが、最初に最初に行うことです。



保管



BaseXチームは独自のリポジトリを開発しました。これは、 科学的研究でも使用されています。 データの内部は依然として「逆アセンブル」形式で保存されますが、これは、固定構造のないクリーンなドキュメント指向データベースであることを妨げるものではありません。 そして、データベースの概念そのものは、ここではいくらか具体的です。



BaseXでは、データベースは特定のリソースが保存されるフォルダーです。 リソースは、通常のファイルまたはXMLドキュメントのいずれかです。 ファイルは元の形式でファイルシステムに保存され、XMLドキュメントは内部表現に変換されます。 データベースには、XMLドキュメントと他のリソースの両方を同時に保存できます。 このデータ保存方法により、簡単なコピーでデータベースを簡単に転送できます。



リレーショナルモデルに馴染みのあるテーブルはクラスとして存在しません。 しかし、XMLドキュメントとそのコレクションがあります。 さて、XMLデータベースには他に何がありますか? :)



指数



BaseXは、XML構造、属性、テキストにインデックスを付けることができ、フルテキストインデックスを作成することもできます(限られた数の言語に対して)。 tarのバレルは、インデックスのタイプの1つが静的である、つまり データを更新するとインデックスが無効になり、2つ目の動的なインデックスは遅くなります。 データ挿入操作の速度の低下は一桁に達します。



データベースには、静的または更新可能なインデックスタイプを1つだけ持つことができ、インデックスを変更する権利はありません。 変更操作を実行するには、データをエクスポートし、異なるタイプのインデックスを使用してデータベースを作成し、データを再度入力する必要があります。



一般に、索引付けは貧弱です。 はい、これは読み取り要求を数桁高速化できる便利なメカニズムですが、可能性は非常に弱いです。 リレーショナルデータベースインデックスに慣れすぎているのかもしれません。



取引



BaseXには、リレーショナルDBMSの世界で誰もが慣れているトランザクションの概念はありません。 トランザクションを明示的に開始し、いくつかのアクションを実行してから完了することはできません。 トランザクションは、サーバーコマンドまたは実行可能スクリプトです。 BaseXはマルチバージョン化されておらず、書き込みトランザクションはデータベースをブロックします。 バージョン7.6以降、ロック管理はファイルシステムではなくサーバーレベルに移行され、リクエストの実行が大幅に加速されました。



上記のすべてから、非常に単純な結論を出すことができます-BaseXは録音を好みません。 書き込み負荷が大きいと、リクエストの待ち時間が長くなります。 しかし、読書では、彼は非常に非常に現れます。



バックアップ



予約はデフォルトで行われますが、これは洗練されたメカニズムというよりも額の決定です。 すでに知っているように、データベースは通常のディレクトリです。 BaseXはそれを陳腐化し、通常のzipファイルのように折りたたみます。 家の一角として物の言えない。 すべてが小さなファイルで正常に機能しますが、データベースに数ギガバイトのデータがある場合、すべてが予想どおりに悲しくなります。 オフラインソリューションの場合、バックアップコピーを生成する時間は問題になりませんが、常時実行されているシステムでは、これによりサービスが短期的に拒否される可能性があります。



特定のデータベースに関して、バックアップ手順を開始できます。 だから一度にみんなのために。 リカバリは、バックアップと同じくらい簡単です。 多くのzipファイルが存在する可能性があるため、特定のバックアップにリカバリできます。 これにはサーバーのシャットダウンは不要です。



レプリケーションとREDOログ



これにより、BaseXには悲しみがあります。 プロジェクトマネージャーのクリスチャングリュンとこの問題を何度も提起し、近い将来この機能を導入する可能性を検討することを約束しましたが、これまでのところ問題は未解決です。



トリガー



もう一つの悲しいトラブル...



管理機能



それらは非常に単純です。 ユーザーを開始し、読み取り、書き込み、データベースの作成、管理の4種類のアクションの権利をユーザーに与えることができます。 それほど多くはありませんが、別のものを想像するのは難しいです。 繰り返しますが、データベースはファイルの集合であるため、追加の「保護」をファイルシステムレベルで編成できます。



アクションログ



これもありますが、正直なところ、私はその形式と構造があまり好きではありません。 データストレージ形式に関する主な苦情。 そこからいくつかの情報を引き出すことができますが、何が起こっているのかを再構築することはやや困難です。



クライアントサーバーアーキテクチャ



BaseXはサーバーとして簡単に上昇します。 サーバーでの作業はポートを経由するため、作業用の特別なドライバーは必要ありません。 同時に複数のサーバーを上げるには、それらを異なるポートに分散する必要があります。 彼らは簡単にお互いの要求を満たすことができます。そのためには、数行のコードを書く必要があります(またはドキュメントからコピーしてください:)



サーバーとデータを交換するためのプロトコルは美しく文書化されています;異なる言語のクライアントを書くことは問題ではありません。 現在、C#、VB、Scala、Java、ActionScript、Perl、PHP、Python、Rebol、Ruby、Haskell、Lisp、node.js、Qt、そしてもちろんCの言語またはシステム用の既製のクライアントがあります。



Xquery



私の謙虚な意見では、これはこの製品の最大のプラスです。 個人的には、XQueryはSQLよりもはるかに魅力的であり、これにはいくつかの理由があります。



シンプルさ


XQueryとSQLを直接比較することはしませんが、私にとっては最初のほうがはるかに論理的で、一貫性があり、読みやすいです。 2日目には、XQueryで通常の、多少複雑なクエリを作成できました。 確かに、2か月後にそれらを書き直しましたが、事実は残っています。



機能


XQueryは関数をサポートしており、クエリコードで関数を直接作成するか、モジュールの形式で接続できます。 一般に、XQueryは関数型言語と呼ばれます。 関数を使用すると、コードをできるだけ簡潔にすることができます。



モジュール性


BaseXは、Javaモジュールとxqm(XQueryで記述された)の2つのレベルでモジュール性をサポートします。 アナログが実行される場合、これらは最も純粋なストアドプロシージャです。



XPath


クリーンで簡潔なコードの作成を支援する別のテクノロジー。 XPathは、プライマリサンプリングとSQLの世界からのJOINの類似物の両方で使用されます。



プリセットモジュール



上で述べたように、BaseXはすぐに使える多くの機能を提供します。 これらのモジュールを追加で接続する必要はなく、クエリ言語からすぐに利用できます。



リストを短くしすぎない場合、機能のリストは次のようになります:システムデータ(ユーザー、セッション、ログのリスト)を表示するためのモジュール、アーカイブデータ(zip)、他のBaseXサーバーに接続するためのクライアント、リモートクエリ実行、データ形式を変換するためのモジュール、暗号化、csvファイルの操作、データベースの管理モジュール、作成、最適化、転送、回復、uriの情報を照会するモジュール、ファイルの操作、フルテキスト分析のモジュール、ハッシュ関数の操作、コンバーター XMLのHTMLドキュメント、HTTPリクエストの処理、インデックスに関する情報のリクエストとデータベースの検査、JSON解析およびシリアル化モジュール、データマッピング、数学演算の処理、データのフォーマット、システム関数の呼び出し、プロファイリング、リポジトリ管理XQMモジュール

JDBCデータベースコネクタ、ストリーミングデータを操作するためのモジュール、単体テストのためのモジュール、DTDおよびXSDによるドキュメントの検証、XSL変換。 全リストはこちら



BaseXのようなブギーにとっては悪くない!



応用分野



年間を通じてすべての長所と短所を研究してきたので、この製品の適用のいくつかの主要な分野を区別することができます





おわりに



BaseXチームに印象的な製品を提供してくれたことに感謝したいと思います。



実際のプロジェクトで使用していない場合でも、XQueryを学習するための基礎としてのみ、この製品を詳しく調べることをお勧めします。



プロジェクトの公式サイト: basex.org

ドキュメント: docs.basex.org

ダウンロード: ここから



All Articles