2016-12-30 2 views
1

私は一定期間内にインベントリの流れをグラフとしてモデル化しようとしています。情報はRDBMSまたはCSVファイルに格納されます。私が達成しようとしているものの表現は次の表に変換されグラフとして複数の場所のインベントリフローをモデリングする

Product FromLoc ToLoc Qty TransactionType TransactionTime 
A  Loc1 Loc2 10 Move   1/1/2017 10:00 
A  Loc0 Loc2 15 Move   1/1/2017 11:00 
A  Loc2 Loc3 25 Move   1/1/2017 12:00 
A  Loc3   5 Scrap   1/1/2017 14:00 
A  Loc3 Loc4 20 Move   1/1/2017 16:00 

このようなものに: enter image description here 私はこの使用のNeo4jをやろうとしてきましたが、私はに新たなんですこのビジネス。

提案は大歓迎です!

ありがとうございました。

答えて

0

グラフdbのモデリングでは、データモデルの重要なエンティティをノードとしてモデル化するのが一般的です。これは、ノードのラベル/プロパティにインデックスや一意の制約が適用され、高速検索が可能なため、プロパティで情報を検索する場合に特に便利です。

現在のモデルでは、リレーションシップに格納される重要なデータ(トランザクションの種類、製品の種類、製品の金額)があり、このデータを作成するクエリの種類によっては、形。たとえば、すべての製品について一定期間内に発生したすべてのトランザクションを照会する場合などです。リレーションシップとそのプロパティはインデックスに登録されていないため、すべてのリレーションシップを検索する必要があり、リレーションシップの数が増えるほど、クエリの効率性が低下します。

最終的には、データの作成を計画しているクエリの種類が決まります。あなたの提案したモデルが、(大量のデータセットであっても)これらのクエリを効率的に行うことができ、簡単に書くことができ、今後作成する予定のクエリも効率的で簡単になると思うなら、それはそのままです。

トランザクションをリレーショナルではなく、トランザクション・ノード(特定のタイプのトランザクションのみに限定された照会を高速化するためにトランザクション・タイプを追加してラベル付けすることができる)としてモデル化することを検討してください。

A:トランザクションのノードは以下のプロパティを持っているかもしれません:

  • 製品(インデックス化)
  • 数量
  • transactionTime(インデックス化)

それはとの関係かもしれない:のような場所ノードをso:

(:Location)-[:Txn_Out]->(:Transaction)-[:Txn_To]->(:Location) 

ここでは、適切な関係タイプの選択が難しい場合があります。一方で、関係が意味的に正しいことを望みます。しかし、あなたのケースでは、製品の流れをモデリングし、それを視覚化することも重要です。私たちが使用する場合:From:and:関係に代わって、それらをモデル化するための意味的に正しい方法は、常にトランザクションの外側にあります。関係の方向のみを見ることで商品の流れを簡単に見ることができないので、グラフの視覚化が混乱する可能性があります(Fromと:To関係は常に:場所への着信)。これをモデル化する方法はあなた次第です。上の私の提案:Txn_Outと:Txn_Toは、両方のセマンティクスを保持し、関係の方向性を一方向に保つという私が考えることができる最高のものです。

ノードを使用するもう1つの利点:トランザクションは、スクラップトランザクションの場合や、製品がグラフ内の他のノードに流れないトランザクションの場合です。 Neo4jは関係を抱かせることができません。関係は既存の2つのノードを接続する必要があるため、ダイアグラムのようにスクラップトランザクションをモデル化することはできません。 :Transaction:Scrapノードがあれば、関連する場所からこのノードへのTxn_Out関係が必要です。それ以外の場所にはTxn_To関係は必要ありません。

あなたは、各製品のためのより多くのデータをモデル化したい場合は、私が作成をお勧めします。これらのプロパティを保持するために、製品のノードをし、それらを添付:これらの製品を伴う取引:

(:Transaction)-[:Product]->(:Product) 

また、あなたの日付について/ Neo4jモデルは、(timestamp()関数などの)ミリ秒UTCで時間を表し、文字列表現の解析や書式設定には適していません。 Date/Time operationsなどの便利な機能や手順をサポートするAPOC Procedures Libraryをインストールすることを強くお勧めします。

関連する問題