次のような、プロジェクト リビジョン全体のソース ファイル メトリックの値を表すテーブルがあります。
Revision FileA FileB FileC FileD FileE ...
1 45 3 12 123 124
2 45 3 12 123 124
3 45 3 12 123 124
4 48 3 12 123 124
5 48 3 12 123 124
6 48 3 12 123 124
7 48 15 12 123 124
(上記のデータのリレーショナル ビューは異なります。各行には次の列が含まれます: Revision、FileId、Value。データの計算元となるファイルとそのリビジョンは Subversion リポジトリに格納されるため、リポジトリのリレーショナルスキーマの構造。)
10000 リビジョンには最大 23750 ファイルが存在する可能性があります (これはImageMagick描画プログラムの場合です)。ご覧のとおり、ほとんどの値は連続したリビジョン間で同じであるため、テーブルの有用なデータは非常にまばらです。データを保存する方法を探しています
- レプリケーションを回避し、スペースを効率的に使用します (現在、非スパース表現では、保存したいデータの 10% 未満に 260 GB (データ + インデックス) が必要です)
- SQLクエリを使用して特定のリビジョンの値を効率的に取得できます(リビジョンまたはファイルを明示的にループする必要はありません)
- 特定のメトリック値のリビジョンを効率的に取得できます。
理想的には、ソリューションは特定のRDBMSに依存せず、 Hibernateと互換性があるべきです。これが不可能な場合は、Hibernate、MySQL、または PostgreSQL 固有の機能を使用して生活できます。