2016-03-26 19 views
0

バージョンとブランチを進化させることができるエンティティ(ファイルやライブラリ/パッケージなど)を指定すると、バージョンをナビゲートできるように最適化されたデータ構造を探します。 エンティティの特定のインスタンスに送信します。例えばQ:分岐されたエンティティとバージョン化されたエンティティの最適化されたデータ構造

(ビット不自然な例)のようなエントリが与えられる:Iは、(パッケージ管理やソースコード管理が上記アクセスセマンティクスと同様活用するので)、そのようなものがすでに存在している疑い

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 heapを使用して上記を実装できると思います。

しかし、そこにはすでに優れたものがあるかもしれません。 - 上記のデータ構造の明示的な実装があるかどうかはわかりませんでした。

上記のDSLは私自身のものですが、おそらくいくつかの穴がありますこのような種類のデータアクセスに適したDSL/APIがあれば、同様に学びたいと思っています。

答えて

0

あなたのリストが小さい場合、最も速い解決法は、あなたが望んでいないものをフィルタリングして、またはあなたの基準を満たす最初のものを取り除く(例えば、上のエンティティを逆順にして、最初の "archMIPS〜fbsd"を取得して "最新"を取得します)。

あなたのリストは、あなたがインデックスにあなたの枝/バージョンをお勧めします、あなたはそう、インメモリデータベースを使用して行うことができます大きい場合など、あなたの答えを

+0

ThxをH2 Database EngineHSQLDBCQEngine、など。しかし、私は上記の問題のために明示的に設計されたデータ構造を探しています。これは私のナビゲーションルーチンによってメモリ内で使用できます。 –

+0

適切なインデックスを持つ正しいデータベース・テーブルとリレーショナル・データベース・テーブルは、上記の問題の明示的に設計されたデータ構造です。がんばろう。 – mfulton26

関連する問題