2

特定のクラス セットを持つ n-ary ツリー データ構造があります。データ構造は、1 から n までの一連の変換を経ます。上記の変換の最後に、情報の取得に使用される出力結果が最終的なツリーになります。

正しい変換が行われるたびにツリーを (バイナリ) ダンプできる方法はありますか? ダンプは、前回の変換後のツリーの状態を反映します。したがって、変換がうまくいかない場合は、正しい変換を再度行うことなく、メモリ内のダンプを復元できます。これは、プログラムの状態のスナップショットを保存するために GDB が提供するチェックポイント機能に似ています。

  • MongoDB、CouchDB、Redis などの NoSQL データベースを見ましたが、それらは主にキー値データストア (Redis) であるか、ツリー内のノード間の関連付け/関係を格納せずにドキュメント型構造に情報を格納します (MongoDB)。
  • また、グラフのような構造を表現するための優れたツールである Neo4j グラフ データベースも調べました。

Redis-dumpNeo4j-dump、およびMongoDB-dumpが利用可能ですが、これらの中からどれを選択するかを決めることができません。ダンプの作成と復元の時間が長くならないため、上記のどれが入力しやすいでしょうか。

この問題に直面した仲間のプログラマーからの意見とフィードバック、および彼らがどのように解決したかを知りたいと思いました。これを行う最良の方法は何ですか?

PS 私の既存の実装は C++ です。不明な点があればお知らせください。より良い方法で説明できるよう努めます。

4

3 に答える 3

1

Neo4j では、結果に満足するまでデータベース内のパターンの各世代を単純に維持し、冗長な世代を削除するだけでうまくいきますか? たとえば、ノードを作成できます

(t1:Transformation {transformationId:1})

一連の変換のインデックスまたはアンカーとして機能し、新しい世代のパターンを作成して、順序付けプロパティを持つ関係を持つ変換ノードに関連付けます。

(t1)-[:STEP {order:0}]->(root)-[:..*]->(branch) //tree
(t1)-[:STEP {order:1}]->(transformedRoot)-[:..*]->(transformedBranch) //first transformed tree
(t1)-[:STEP {order:2}]->(transformedRoot2)-[:..*]->(transformedBranch2) //second transformed tree

変換で変更されていないノードは、新しいパターンに直接含めることができます

(t1)-[:STEP {order:3}]->(transformedRoot)-[:..*]->(originalBranch) // transformed tree with original branch

それらが実際に変更されるまで

(t1)-[:STEP {order:4}]->(transformedRoot)-[:..*]->(transformedBranch)

必要な限り各変換のスナップショットを保持し、ダンプをエクスポート/インポートする代わりに、DB 内でそれを操作してロールバック、比較、または必要なことを行うことができます。

編集:
あなたのコメントについて
1)
Neo4j はあなたの C++ 実装を拡張または置き換えますか? 置換する場合、データの初期量を Neo4j にインポートするためのツールがいくつかあります (特に注1および2 ) 。

拡張する場合は、データをどのように操作するかによって異なります。私が知る限り、C ++用の非常に優れた Neo4j ドライバーありませサーバーとして Neo4j を実行し、 Cypher(デ) シリアル化されたJSONを使用して通信する RESTful クライアント ( 123 )を構築します。時間をかけて、優れた暗号クエリを作成し、トランザクション サーバー エンドポイントを利用する方法を学びました。. ただし、これはJavaまたはPython、またはNeo4jの適切なドライバーサポートを備えた他の言語で行いますが、おそらくC ++ではありません。

2)
データなしで例を挙げるのは難しい。まずモデリングの例を見てから、 Google グループのディスカッションを検索して、ドメインをモデル化し、クエリを設計する方法について詳しく説明しているスレッドを探してください。たとえば、ここここでは、リレーションシップを順序付ける 2 つの異なる方法が参照されています。関係プロパティ別および関係タイプ別。次に、モデリングやクエリのヘルプが必要な場合は、サンプル データをNeo4j コンソールに入力し、SO に関する質問とともにリンクを共有してください。(リンクされたコンソールにクエリを含む小さなサンプルを配置しました。それで遊んでみることができます。)

于 2013-10-16T11:02:16.200 に答える