シンプルな学習のNeo4j

背景

いくつかのフォーラムやニュースでは、最近見たのNeo4j処理グラフィックス、優れたデータベースを。いくつかはそうも技術的準備金であることを自分自身を与える、関連文書の下に見えたために時間を割いて、リレーショナルクエリに参加行うことが適していると言われています。

 

プロセス

研究掘り下げる前に、学習用文書のビットを見つけるために、インターネット上の最初は他人の肩の上に立って、常に最速、最も効果的な学習で、他人をまとめました。

 

これらの線に沿って、いくつかのNeo4jのwikiのドキュメント、およびマップの抜粋のプログレッシブ表示: 

図のNeo4j基本モデル: 




いくつかの基本的な概念の数字の場合: 
  • ノード:ノード
  • 関係:関係は、つまり、グラフのエッジは、注意がエッジを向けられています
  • プロパティ:プロパティは、ノード/関係のプロパティを設定することができます
  • トラバーサル:グラフトラバーサルツール
  • インデックス:インデックス
ノードの関係によって、我々は、それがデータベースに対応する画像となるように、対応するデータをもたらすことができるようにプロパティを使用して、有向グラフを形成することができます。

ノード(ノード)

  1. 各ノードは、複数のノードとの間の複数の関係(リレーションシップ)を有することができます
  2. 単一ノードは、属性のプロパティのキー(キー、値)を複数設けてもよいです

関係(リレーションシップ)

  1. それぞれの関係は、startNodeとエンドノードが含まれます
  2. 各関係は、属性のプロパティの複数のキー(キー、値)を提供することができます
  3. 関係の種類との対応関係(RelationshipType)定義することができる
    * DynamicRelationshipType動的関係タイプ
    * XXXRelationshipType静的関係タイプ(RelationshipTypeは、インターフェイスを実装)

トラバーサル(横断)

クロス:   http://wiki.neo4j.org/content/Traversal

例: 

 

Javaコード   コレクションコード
  1. トラバーサーTRAV = swedenNode.traverse(Order.DEPTH_FIRST、StopEvaluator.END_OF_GRAPH、  
  2.     新しい ReturnableEvaluator()  
  3.     {  
  4.         パブリックブール isReturnableNode(TraversalPositionのPOS)   
  5.         {  
  6.             返す !pos.isStartNodeを()&& pos.lastRelationshipTraversed()ISTYPE(CUSTOMER_TO_ORDER)。  
  7.         }  
  8.     }、  
  9.     LIVES_IN、Direction.INCOMING、  
  10.     CUSTOMER_TO_ORDER、Direction.OUTGOING)。  
  11. //トラバーサーを反復... <スパンのスタイル=「空白:ノーマル;」>  
  12. </ span>の  

 

注文:トラバーサルアルゴリズムは、図に対応します。

 

  • DEPTH_FIRST:深さ優先探索は、最初のノードを見つけることです、再帰的にはバックトラックの前にいない、適切なノードの後まで見下ろしれ
  • BREADTH_FIRST:BFS
方向:図面の対応するエッジ方向
  • OUTGOING:エッジ
  • INCOMING:エッジ
  • BOTH:Guming Siのイー
StopEvaluator:定義されたグラフの検索用語を停止し、2つのデフォルトがあります
  • DEPTH_ONE:複数の深さ停止した後、
  • END_OF_GRAPH:なし適切な結果と停止
ReturnableEvaluator:プロセッサの結果は、対応する結果を戻すために設けられていてもよい、デフォルトがあります。
  • ALL_BUT_START_NODE:最初のノードを除外
  • ALL:すべてのノードを返します
TraversalPosition:検索処理でノードに対応するノード情報、前記
  • ノード情報
  • 入ってくるの関係に関する情報
  • 検索の深さ
  • 条件を満たしたノードのこれまで数

Indexs(インデックス)

それは自然な順序で、各ノード/関係/プロパティについて独立のNeo4jに格納されています。そのような人のノードに対応する主キーの名前に基づいてリレーショナルデータベースクエリのためとして、いくつかのシナリオをサポートするために、通常のトラバーサルは難しいが、このような需要を満たすために、人々はこのことを解決するために使用されていません。したがって、それは、インデックスの概念につながるのNeo4j。 

 

インデックスの初期のバージョンはIndexServiceを使用することです(http://wiki.neo4j.org/content/Indexing_with_IndexService

例:

 

Javaコード   コレクションコード
  1. GraphDatabaseService graphDb =  新しい EmbeddedGraphDatabase(  "パス/に/のNeo4j-DB"  )。  
  2. IndexService指数=  新しい LuceneIndexService(graphDb)。  
  3.   
  4. ノードアンディ= graphDb.createNode()。  
  5. ノードラリー= graphDb.createNode()。  
  6.   
  7. andy.setProperty(  「名前」、  「アンディ・ウォシャウスキー」 )。  
  8. andy.setProperty(  "タイトル" 、  "ディレクター"  );  
  9. larry.setProperty(  「名前」、  「ラリー・ウォシャウスキー」 )。  
  10. larry.setProperty(  "タイトル" 、  "ディレクター"  );  
  11. index.index(アンディ、  "名前" 、andy.getProperty(  "名前"  ));  
  12. index.index(アンディ、  "タイトル" 、andy.getProperty(  "タイトル"  ));  
  13. index.index(ラリー、  "名前" 、larry.getProperty(  "名前"  ));  
  14. index.index(ラリー、  "タイトル" 、larry.getProperty(  "タイトル"  ));  

 

外付け部品としてIndexServiceは、拡張定義です。 

 

今、公式ドキュメントは、統合されたインデックスフレームワークを使用することをお勧めします

 

  1. 公式文書:  http://docs.neo4j.org/chunked/stable/indexing.html
  2. 移行シナリオ:  http://wiki.neo4j.org/content/Transitioning_To_Index_Framework
新しいバージョンの例: 
Javaコード   コレクションコード
  1. IndexManagerインデックス= graphDb.index()。  
  2. インデックス<ノード>俳優たち= index.forNodes(  "俳優"  );  
  3. インデックス<ノード>映画= index.forNodes(  "映画"  );  
  4. RelationshipIndex役割= index.forRelationships(  "ロール"  )。  
その重要性はああ、特定のコンテンツが対応する公式文書を見て詳述することが可能かを知りたいので、新しいバージョンは、インデックスは、そのコア、外部拡張パックのない仕組みを実現するために行われてきました。

クエリ構文(Cypheクエリ言語)

Neo4jクエリ言語の構文解析のセットを達成するために、グラフ理論に基づいた独自の検索アルゴリズムは、(最大、合計、minは、カウントなど)いくつかの一般的な集約関数を提供します。

 

構文例:

 

Javaコード   コレクションコード
  1. クエリに参加:  
  2. N START =(1 )マッチ(N) - [:BLOCKS] - >(X)  リターン X  
  3.   
  4. ここで、条件:  
  5. 起動N =(2 、  1 )ここで、(n.age <  30  とn.name =  "トビアス" )か否(n.name =  "トビアス" )  戻り N  
  6.   
  7. 集計機能:  
  8. 起動N =(2 3 4 )  リターン 平均(n.property)  
  9.   
  10. 注文:  
  11. (開始はn = 1 2 3 )  リターン n.name DESCによってN順序  
  12.   
  13. ページング:  
  14. (開始はn = 1 2 3 4 5 )  リターン n.nameによってN順序スキップ  1つの リミット  2  

 

 

コールの例:

 

Javaコード   コレクションコード
  1. デシベル=  新しい ImpermanentGraphDatabase();  
  2. エンジン=  新しい ExecutionEngine(DB)。  
  3. CypherParserパーサー=  新しい CypherParser();  
  4. ExecutionEngineエンジン=  新しい ExecutionEngine(DB)。  
  5. クエリのクエリ= parser.parse(  "N START =(0)ここで、1 = 1戻りN"  );  
  6. ExecutionResult結果= engine.execute(クエリ)。  
  7. assertThat(result.columns()、hasItem(  "N"  ));  
  8. 反復子<ノード> n_column = result.columnAs(  "N"  )。  
  9. assertThat(asIterable(n_column)、hasItem(db.getNodeById(0 )))。  
  10. assertThat(result.toString()、containsString("ノード[0]" ));  

 

他の

今のNoSQLと、いくつかの機能の機能の問題を除いて、他の二つの点のスケーラビリティと可用性を心配することが重要です

拡張性

まだプログラムの対応する拡張が表示されません

可用性(HAメカニズム)

ハのNeo4j現在の単純なメカニズムをサポートし、それが飼育係によって管理されています。


 

そのメカニズムは非常に単純で、飼育係によってのNeo4jサーバーのハートビート検出のための責任があります。

1.発見はマスターした後にハングアップ、選挙(選挙を実現するために数えソースコードを見ていないが、新しいマスターとして最小のIDを取り、対応するSERVERIDによると、非常にシンプルになります)を開始。

2.全てのスレーブマスタに新しいブロードキャストを挿入し、選挙プロセスのこの時間は、(すべてが例外を返す)に対応する書き込み要求受け付けない
マスタスレーブが通信するように3.新しいマシンは、クラスタに参加し、同期2データ・コンテンツ・プロバイダ(新しいマスターTID比の現在のスレーブが手動介入を必要とするデータの競合を生成する場合)

 

問題:

適時1.飼育係のハートビート検出、3分のデフォルトの遅延(そこにパケットのリトライため)

マスターの選択時には2、書き込み要求は(選挙の時期のマスターが比較的最後になりますが、クライアントは十分に友好的ではないが)例外を返します直接処理することはできません

 

改善のポイント:

1. 1回のフェイルオーバーの再試行を制御するためのメカニズムを提供し、クライアントAPIを提供します。

Consoleページ

Neo4jは、次のような効果があり、独立したのNeo4j展開サーバーで展開埋め込み、スタンドアロン展開の二つのモードをサポートしています。

 

グラフィックス管理の背景には、ノード間の関係の側面を見ることができます

 

 

残りのインタフェースAPIは、グラフィックスとは、いくつかの方法に、純粋なデータを提供しています:

その他のドキュメント

 

  • 大小: 42.7 KB
  • 大小: 138.5 KB
  • 大小: 43.8 KB
  • 大小: 35.9 KB
オリジナル住所ます。https://www.iteye.com/blog/agapple-1128400

おすすめ

転載: www.cnblogs.com/jpfss/p/11490535.html