MongoDBとのAPI互換性に注目した組み込みJavaScriptデータベース

どういうわけか、Node.js用のプロジェクトを1つ作成することにしました。このプロジェクトは、NoSQLデータベースを操作する必要がありますが、同時に外部アプリケーションには依存しません。 それが通常起こるように、それはすべて新しいライブラリの開発で終わりました。



2年前に開発を開始し、組み込みのデータベースをWebアプリケーションに使用したいという欲求は非常に奇妙に思えました。 実際、なぜですか? node-webkitプロジェクトが到着したので、説明がはるかに簡単になりました。 組み込みのデータベースを使用して、デュアルユースWebアプリケーションを開発することができます。 このようなアプリケーションは、従来のクライアントサーバースキームと、通常のダウンロード可能なアプリケーションとしてnode-webkitを使用することの両方で機能します。 両方の場合の重要な機能は、データベースコードがアプリケーションの一部であり、多くの互換性とインストールの問題を排除することです。



周りを見て、いくつかの異なるプロジェクトを見つけましたが、何らかの理由でAlfred.jsに落ち着きました。 外向きで、最初のテストによると、彼は非常に健康に見え、必要なことをしました。 最初に、彼はすべてのデータをメモリにロードしませんでしたが、ファイルアクセスを使用しました。 つまり、潜在的に比較的大量のデータを操作し、合理的にメモリを消費する可能性があります。 第二に、彼はインデックスの使用方法を知っていました。これは非常に重要です。 そして第三に、複製のために用意されているという理由だけで、非常にうまく設計されているように見えました。



開発で赤道を通過した後、Alfred.jsにつまずき始めました。 現実的なデータセットは、データ破損を含む複数のエラーを引き起こしました。 ある時点で、アプリケーションを開発する代わりに、データベースコードの修正を開始しました。 さまざまな結果を出すのに多くの時間を費やしたが、私たちは失望しか達成しなかった。 最も重要なことは、データベースの問題によりアプリケーション自体の開発が完全に停止したことであり、これは最もイライラするものでした。



ある時点で、データベースをMongoDBに置き換えると同時に、独自のデータベースライブラリを開発することを決定しました。これは、アプリケーションコードを変更せずに使用できます。 つまり、このようなデータベースには、Node.js用のMongoDBドライバーと同じ機能とAPIが必要です。 最初は、MongoDBのすべての機能を実装することは難しいことが明らかになりました。 しかし、私たちはすべてが必要ではないことを確信していました。 よく知られた規則により、必要な可能性の20%のみが必要であり、必要性の80%をカバーします。 したがって、さらなる開発は2つの方向に進みました。 チームの一部はアプリケーションをMongoDBに適応させることに従事し、別の部分はデータベースを開発していました。



奇妙なことに、MongoDBへのコードの適合はそれほど簡単ではありませんでした。 Alfred.jsが同様のクエリ構文とメソッドを使用しているという事実は、助けよりも傷つきやすいです。 この経験は、完全なアイデンティティだけが道であるということを理解するのに役立ちました。 そのため、新しいデータベース、データ、およびMongoDBの両方ですべてのテストが1対1で機能することが最初に決定されました。



その後、基本的な機能を実装した後、MongoDBのNode.jsドライバープロジェクトから既製のテストを行うというアイデアが生まれました。 それは私たちが受け入れて実行した重大な挑戦でした。 既製のテストを統合することで、ドライバー自体について多くのことを学び、どこかで失望さえしました。 ほとんどの場合、借用したテストはエラーコードをチェックしません。これは非常に妨げです。 とりわけ、APIは私たちの意見では柔軟性が高すぎました。 たとえば、Collection.find関数では、パラメーターの7つ​​の異なる組み合わせを使用でき、呼び出されるたびに、使用されたオプションを推測しようとするだけで数十行のコードが関与します。 それにもかかわらず、このすべての動作は、例外および可能性のあるエラーのテキストまで詳細に再現されました。



ある時点で、開発の両方向が満たされることになった。 一方では、MongoDBを使用したアプリケーションが正常に機能していました。 一方、必要な機能を実装し、数百のテストに合格するデータベースを取得しました。 会議は完全には行きませんでしたが、現れた問題は取るに足りないものでした。 すぐに、このアプリケーションは組み込みデータベースとMongoDBで機能しました。



データベースにTingoDB (TInymoNGODB)という名前を付け、 GitHubでソースコードを公開しました



All Articles