MySQL などの従来のリレーショナル データベースで豊富なデータ構造を作成することは、多くの場合困難であり、それを実現するためのはるかに優れた方法があります。階層を持つパス ベースのデータ構造を扱う場合、JSON などのデータ シリアル化形式を使用して特定のファイル、ディレクトリ、またはリポジトリ全体に関する情報を格納するフラット ファイル ベースのシステムを作成するのが好きです。
このようにして、現在利用可能なツールを使用して構造を簡単にナビゲートおよび操作し、構造を簡単に読み取り、編集し、理解することができます。XML はこれにも適しています。XML は JSON よりも少し冗長ですが、読みやすく、メッセージングやその他の XML ベースのシステムにも適しています。
簡単な例。ディレクトリと 3 つのファイルを持つリポジトリがあるとします。正面から見ると次のようになります。
/repo
/folder
code.php
file.txt
image.jpg
OS から隠されている JSON ファイルを含むメタデータ フォルダーを、各ディレクトリのルートに配置して、そのディレクトリの内容を記述できます。これは、JSON の代わりにカスタム言語を使用することを除いて、従来のバージョン管理システムがどのように機能するかです。
/repo
*/.folderdata*
/code
*/.folderdata*
code.php
file.txt
image.jpg
各.folderdataフォルダーには、フォルダーのデータを適切に整理するために使用できる独自の構造を含めることができます。次に、各.folderdataフォルダーを圧縮して、ディスク容量を節約できます。/code ディレクトリ内の.folderdataフォルダーを見ると、次のようになります。
*/.folderdata*
/revisions
code.php.r1
code.php.r2
code.php.r3
folderstructure.json
filerevisions.json
フォルダー構造は、ファイルとフォルダーが相互に関連しているフォルダーの構造を定義します。これは次のようになります。
{
'.': 'code',
'..': 'repo',
'code.php': {
'author_id': 11543,
'author_name': 'Jamie Rumbelow',
'file_hash': 'a26hb3vpq22'
'access': 'public'
}
}
これにより、そのファイルに関するメタデータの関連付け、信頼性と整合性のチェック、永続的なデータの保持、ファイル属性の指定など、さまざまなことが可能になります。その後、特定のリビジョンに関する情報を filerevisions.json ファイルに保持できます。
{
'code.php': [
1: {
'commit': 'ah32mncnj654oidfd',
'commit_author_id': 11543,
'commit_author_name': 'Jamie Rumbelow',
'commit_message': 'Made some changes to code.php',
'additions': 2,
'subtractions': 4
},
2: {
'commit': 'ljk4klj34khn5nkk5',
'commit_author_id': 18676,
'commit_author_name': 'Jo Johnson',
'commit_message': 'Fixed Jamie\'s bad code!',
'additions': 2,
'subtractions': 0
},
3: {
'commit': '77sdnjhhh4ife943r',
'commit_author_id': 11543,
'commit_author_name': 'Jamie Rumbelow',
'commit_message': 'Whoah, showstopper found and fixed',
'additions': 8,
'subtractions': 5
},
]
}
これは、ファイル バージョン管理システムの基本的な概要計画です。私はこのアイデアとそのしくみが気に入っています。過去に JSON を使用して、このような豊富なデータ構造に大きな効果をもたらしました。この種のデータは、MySQL などのリレーショナル データベースには適していません。リビジョンやファイルが増えると、データベースはどんどん大きくなります。このようにして、複数のファイルにわたってリビジョンをずらしたり、すべてのバックアップを保持したり、作成したりできます。インターフェイスやプラットフォームなど全体で永続的なデータがあることを確認してください。
これがあなたにいくらかの洞察を与えてくれることを願っており、うまくいけば、コミュニティにも思考の糧を提供するでしょう!