時間の経過とともにバージョンとブランチを進化させることができるエンティティ (ファイルまたはライブラリ/パッケージなど) が与えられ、バージョンを介してエンティティの特定のインスタンスに移動できるようにする最適化されたデータ構造を探します。
たとえば(少し不自然な例)、次のようなエントリが与えられます。
MySIMDIntristicsLib.v1~archMIPS.v1~fbsd.v1
MySIMDIntristicsLib.v1~archMIPS.v2~fbsd.v1
MySIMDIntristicsLib.v1~archX86.v1~win.v1
MySIMDIntristicsLib.v1~archX86.v2~win.v1
MySIMDIntristicsLib.v1~archX86.v2~win.v2
MySIMDIntristicsLib.v2~archX86.v1~win.v1
// get latest across all branches
get( Entity="MySIMDIntristicsLib", branch[(latest) "~"] )
returns: "MySIMDIntristicsLib.v2~archX86.v1~win.v1"
// get latest across archMips/fbsd branch
get( Entity="MySIMDIntristicsLib", branch[(latest) "archMIPS~fbsd"] )
returns: "MySIMDIntristicsLib.v1~archMIPS.v2~fbsd.v1"
// get earliest for archX86 v2 branch
get( Entity="MySIMDIntristicsLib", branch[(earliest) "archX86.v2~"] )
returns "MySIMDIntristicsLib.v1~archX86.v2~win.v1"
私は、そのようなものが既に存在しているのではないかと考えています (パッケージ管理またはソース コード管理は、上記のアクセス セマンティクスと同様のものを利用しているため)。
上記のメモリ内データ構造を探していましたが、最新/最古のアクセス時間は良好ですが、挿入/削除速度も下降しています。
残忍な力のアプローチでは、バージョンを持つことができるすべてのブランチに対してMin Max ヒープを使用して上記を実装できると思います。
とはいえ、もっと良いものがすでにあるかもしれません。これらのタイプのものの通常のソースであるRedissonもチェックしましたが、上記のデータ構造の明示的な実装があるかどうかはわかりませんでした
上記の DSL は私が独自に作成したものであり、おそらく穴もいくつかあるため、この種のデータ アクセスに適した DSL/API があれば、それも学びたいと考えています。