おそらくSVNとCVSの経験に基づいて、多くの仮定を立てているようです。
GitとMercurialは基本的にSVNとCVSに似ています
gitとCVSの比較は、iPadとAtariの比較に似ています。CVSは恐竜が地球を歩き回った時に作成されました。Subversionは基本的にCVSの改良版です。gitやMercurialのような最新のバージョン管理システムがそれらのように動作すると仮定しても、ほとんど意味がありません。
リレーショナルデータベースは、単一目的のデータベースよりも効率的です。
どうして?リレーショナルデータベースは非常に複雑で、単一目的のデータベースほど効率的ではありません。私の頭の上のいくつかの違い:
- とにかく同時に複数のコミットを行うことはできないため、バージョン管理システムは複雑なロックを必要としません。
- 分散バージョン管理システムは、ローカルデータベースがリポジトリの完全なコピーであるため、スペース効率が非常に高い必要があります。
- バージョン管理システムで必要なのは、特定の2つの方法(作成者、リビジョンID、フルテキスト検索など)でデータを検索することだけです。著者/リビジョンIDの検索を処理できる独自のデータベースを作成するのは簡単であり、私が試したどのリレーショナルデータベースでも全文検索はそれほど高速ではありません。
- バージョン管理システムは、複数のプラットフォームで動作する必要があります。これにより、インストールしてサービスとして実行する必要があるデータベース(MySQLやPostgreSQLなど)を使用することが難しくなります。
- ローカルマシンのバージョン管理システムは、何かを実行しているとき(コミットなど)にのみ実行する必要があります。コミットしたい場合に備えて、 MySQLのようなサービスを常に実行したままにしておくのは無駄です。
- ほとんどの場合、バージョン管理システムは履歴を削除するのではなく、履歴に追加するだけです。これにより、最適化が異なり、整合性を保護する方法が異なる場合があります。
リレーショナルデータベースの方が安全です
繰り返しますが、なぜですか?データはファイルに保存されるため、gitやMercurialなどのバージョン管理システムにはアトミックコミットはありませんが、そうするように思われます。リレーショナルデータベースは、データベースをファイルとして保存します。ここで注目に値するのは、CVS がアトミックコミットを行わないことですが、それはおそらく、リレーショナルデータベースを使用していないからではなく、暗黒時代からのものだからです。
また、データがデータベースに格納されると、データを破損から保護するという問題もあります。その答えは同じです。ファイルシステムが破損している場合、使用しているデータベースは関係ありません。ファイルシステムが破損していない場合、データベースエンジンが破損している可能性があります。なぜバージョン管理データベースがリレーショナルデータベースよりもこの傾向があるのかはわかりません。
分散型バージョン管理システム(gitやMercurialなど)は、一元化されたバージョン管理よりもデータベースの保護に適していると主張します。どのクローンからでもリポジトリ全体を復元できるからです。そのため、中央サーバーがすべてのバックアップとともに自発的に燃焼した場合git init
、新しいサーバーで実行し、次に開発者のマシンgit push
から実行することで復元できます。
車輪の再発明は悪い
ストレージの問題にリレーショナルデータベースを使用できるからといって、そうすべきだとは限りません。なぜリレーショナルデータベースの代わりに構成ファイルを使用するのですか?リレーショナルデータベースにデータを保存できるのに、なぜファイルシステムに画像を保存するのですか?すべてをリレーショナルデータベースに保存できるのに、コードをファイルシステムに保持するのはなぜですか?
「持っているのがハンマーだけなら、すべてが釘のように見えます。」
また、オープンソースプロジェクトは、商業プロジェクトと同じ種類のリソース制約がないため、都合の良いときにいつでも車輪を再発明する余裕があるという事実もあります。データベース作成のエキスパートであるボランティアがいる場合、それらを使用してみませんか?
リビジョン管理システムの作成者が何をしているのかを信頼できる理由については、他のVCSについては話すことはできませんが、Linus Torvalds はファイルシステムを理解していると確信しています。
なぜ一部の商用バージョン管理システムはリレーショナルデータベースを使用するのですか?
ほとんどの場合、以下のいくつかの組み合わせ:
- 一部の開発者は、データベースを書きたくありません。
- 市販のバージョン管理システムの開発者には時間とリソースの制約があるため、既に望んでいるものに近いデータベースを作成する余裕はありません。また、開発者は高価であり、ほとんどの人はそのような経験がないため、データベース開発者(データベースを作成する人など)はおそらくより高価です。
- 商用バージョン管理システムのユーザーは、リレーショナルデータベースを既に設定しているため、セットアップと実行のオーバーヘッドを気にしません。
- 商用バージョン管理システムのユーザーは、リビジョンデータをバックアップするリレーショナルデータベースが必要になる可能性が高くなります。これは、プロセスとの統合性が向上する可能性があるためです(バックアップなど)。