私の2ペンス相当。少し憧れですが……インキュベーションプロジェクトの1つでも同様の要件がありました。あなたと同様に、ドキュメントのバージョン管理を行うドキュメントデータベース(私の場合はxml)での私の主要な要件。これは、コラボレーションのユースケースが多数あるマルチユーザーシステム用でした。私の好みは、主要な要件のほとんどをサポートする利用可能なオープンソースソリューションを使用することでした。
追いかけるために、十分にスケーラブルな方法(ユーザー数、使用量、ストレージ、およびコンピューティングリソース)で両方を提供する製品を見つけることができませんでした。私はすべての有望な機能についてgitに偏っていました。 (可能性のある)そこから作成できるソリューション。私がgitオプションをさらにいじるにつれて、シングルユーザーの視点からマルチ(ミリ)ユーザーの視点に移動することは明らかな課題になりました。残念ながら、私はあなたのように実質的なパフォーマンス分析を行うことができませんでした。(.. lazy /早期終了....バージョン2の場合、マントラ)Power to you !. とにかく、私の偏見のあるアイデアは、次の(まだ偏った)代替案に変形しました:個別の球、データベース、バージョン管理で最高のツールのメッシュアップ。
まだ作業中ですが(...少し無視されます)、モーフィングバージョンはこれだけです。
- フロントエンド:(userfacing)第1レベルのストレージにデータベースを使用(ユーザーアプリケーションとのインターフェース)
- バックエンドで、バージョンコントロールシステム(VCS)(gitなど)を使用して、データベース内のデータオブジェクトのバージョン管理を実行します。
本質的には、データベースにバージョン管理プラグインを追加することになります。統合グルーを使用すると、開発が必要になる場合がありますが、はるかに簡単です。
それがどのように機能するか(想定される)は、主要なマルチユーザーインターフェイスのデータ交換がデータベースを介して行われることです。DBMSは、マルチユーザー、同時実行、アトミック操作などのすべての楽しく複雑な問題を処理します。バックエンドでは、VCSは単一のデータオブジェクトのセットでバージョン管理を実行します(同時実行、またはマルチユーザーの問題はありません)。データベース上の有効なトランザクションごとに、バージョン管理は、効果的に変更されたデータレコードに対してのみ実行されます。
インターフェース用接着剤に関しては、データベースとVCS間の単純なインターワーキング機能の形式になります。設計に関しては、データベースからのデータ更新がバージョン管理手順をトリガーするシンプルなアプローチがイベントドリブンインターフェースであるため(ヒント:Mysqlを想定し 、トリガーとsys_exec()を使用) 何とか何とか...)。実装の複雑さの点で、それは単純で効果的な(スクリプトなど)から複雑で素晴らしい(いくつかのプログラムされたコネクタインターフェイス)までの範囲になります。すべては、どれだけクレイジーになりたいか、そしてどれだけの資金を費やすかによって決まります。簡単なスクリプトで魔法をかけるべきだと思います。そして、最終結果であるさまざまなデータバージョンにアクセスするための簡単な方法は、VCSのバージョンタグ/ ID /ハッシュによって参照されるデータをデータベースのクローン(データベース構造のクローン)に入力することです。繰り返しますが、このビットは、インターフェースの単純なクエリ/変換/マップジョブになります。
まだ対処すべき課題や不明な点がいくつかありますが、影響はあると思います。これらのほとんどの関連性は、アプリケーションの要件とユースケースに大きく依存します。一部は単に問題にならないかもしれません。いくつかの問題には、2つの主要モジュール、データベースとVCSの間のパフォーマンスの一致、高頻度のデータ更新アクティビティを伴うアプリケーションの場合、データとしてのgit側でのリソース(ストレージと処理能力)の経時的なスケーリング、およびユーザーが含まれます。成長:安定した、指数関数的、または最終的にはプラトー
上記のカクテルのうち、私が現在醸造しているのはここです
- VCSにGitを使用する(2つのバージョン間のチェンジセットまたはデルタのみを使用するため、当初は古き良きCVSと見なされていました)
- mysqlを使用する(私のデータ、厳密なxmlスキーマを持つxmlの高度に構造化された性質による)
- MongoDBをいじる(gitで使用されるネイティブのデータベース構造と厳密に一致するNoSQlデータベースを試すため)
いくつかの面白い事実-gitは圧縮などのストレージを最適化するために実際にクリアし、オブジェクトのリビジョン間のデルタのみのストレージを保存します-はい、gitはデータオブジェクトのリビジョン間のチェンジセットまたはデルタのみを格納します。いつ、どのように)。参照:packfiles、Git内部の内臓の奥深く-git
のオブジェクトストレージ(コンテンツアドレス可能なファイルシステム)のレビューは、mongoDBなどのnoSQLデータベースとの(概念の観点から)際立った類似点を示しています。繰り返しになりますが、汗の資本を犠牲にして、2を統合するためのより興味深い可能性を提供し、パフォーマンスを調整することができます。
ここまで来たら、上記があなたのケースに当てはまるかどうかを考えてみてください。そうであると仮定すると、最後の包括的なパフォーマンス分析のいくつかの側面にどのように対応するでしょうか。