Gremlin のインストールと使用の詳細な手順

Gremlin は、グラフ データベース クエリ ツールです。これは、dbeaver、navicat、sqlyog に似たツールであることに注意してください。これは、グラフ データベースを分析するために特別に設計されたツールです。

ダウンロード

ダウンロード アドレスApacheダウンロード ミラー

トラブルを避けるために、次のことができます。

wget   https://www.apache.org/dyn/closer.lua/tinkerpop/3.5.1/apache-tinkerpop-gremlin-console-3.5.1-bin.zip

解凍する

apache-tinkerpop-gremlin-console-3.5.1-bin.zip を解凍します。 

confファイルを編集する

ここにはremote-secure.yaml自体があり、直接編集することもできますが、お勧めしません。, この yaml の 1 つはデータベース接続に相当するので、直接新しいものを作成し、次の内容をコピーします。

vim リモートセキュアテスト.yaml 

# hosts グラフ データベースの KonisGraph インスタンスのイントラネット アドレス vip (例: 10.xx.xx.107
hosts: [10.xx.xx.107]
# port グラフ データベースの KonisGraph インスタンスの Gremlin ポート (例:) 8186
port: 8186
# username/password グラフ データベースの KonisGraph インスタンスのアカウントとパスワード。たとえば、account: steven、password: test-pwd-123 username: steven、password: test-
pwd
-123
connectionPool: {   enableSsl: false ,   sslEnabledProtocols: [TLSv1.2] } # シリアライザー: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: {serializeResultToString: true }}シリアライザー: { className: org.apache.tinkerpop.gremlin. driver.ser.GraphSONMessageSerializerV3d0、config: {serializeResultToString: true、useMapperFromGraph: グラフ }}



以前にコピーしたenableSsl: falseはtrueであり、エラーを報告し続けることに注意してください。

シリアライザーも変更されました。

起動する

bash ${gremlin_home}/bin/gremlin.sh

コンソール入力

 :リモート接続 tinkerpop.server conf/remote-secure-test.yaml

この時点で起動は成功です。

このパッケージは window にも使用できますが、唯一の違いは gremlin.bat が起動されることです。

 グレムリンに関する記事が少ないため、多くの偉い人が初心者を無視します。どのような点に注意すればよいのか説明していきます。

たとえば、mysql では、select * where group limit などの基本的なエクスペリエンスを簡単に体験したいのですが、mysql ライブラリをダウンロードしてから、navicat または dbeaver をダウンロードする必要がありますか。

Gremlin にはライブラリが組み込まれています (これは私が理解していることであり、簡単に操作できます)。

ローカルで接続する

グレムリン埋め込みデータの使用

グラフ = TinkerFactory.createModern()

g = traversal().withEmbedded(graph)

 この時点では、gremlin の構文を簡単に体験できます。

グレムリン> gV().elementMap()

グレムリン> gE().elementMap()

リモート接続

オンラインの手順に従ってギャラリーを作成する場合。以前の構成に従って構成した後、直接次のことができます。

:リモート接続 tinkerpop.server conf/remote-secure-test.yaml

:リモートコンソール

リモートの場所に接続すると、s スキーマと g:graph が自動的に初期化されることに注意してください。ローカル スキーマを使用する場合は、グラフを自分で初期化する必要があります。

この時点では簡易接続はOKです。

研究住所

はじめる

グラフ データベース言語を詳しく学習するための記事リンクのまとめ Gremlin_Jermy Li のブログ - CSDN ブログ

グラフデータベースとリレーショナルデータベースの違いは、

グラフにはライブラリの概念のみがあり、テーブルはありません。生徒のテーブル、教師のテーブル、学校のテーブルなど、すべてのデータがまとめられています。テーブルの概念はなく、点と辺のみです。頂点とエッジで構成される関係グラフ。

グラフ データベースの主な目的は、点間の関係を発見することです。たとえば、このデータベースには 13 億人の情報が保存されています。つまり、13 億点です。エッジは、私が知っている人です。今、ニーズがあります。どのようなものですか。関係 ジェイ・チョウを知ることができますか?

私の高校のクラスメートの友人の同僚のいとこの義理の娘の妹の親友のボーイフレンドの親友は周杰倫のアシスタントの隣人です

この関係で、mysql を使用して同じデータと同じ関係を確認する必要がある場合、確認するのは非常に困難です。

ただし、グラフ データに必要なコードは 1 行だけです (私の能力には限界があり、最適化する方法がわかりません)

gV().hasLabel(person).properties('name','cc').repeat(outE().otherV()).until(has('name','JAY')).path()

わかりやすい。つまり、cc を見つけた人は、その人の点に基づいて、点が見つかるまでエッジを外側に放射します =jay

さて、まずは基礎学習から始めましょう。下の図を思い出してください。すべての操作はチュートリアルとしてこの図に基づいています。 

はじめる

gremlin> gV().elementMap()
==>[id:1,ラベル:人,名前:マルコ,年齢:29] ==>[
id:2,ラベル:人,名前:ヴァダス,年齢:27]
= =>[id:3,label:software,name:lop,lang:java]
==>[id:4,label:person,name:josh,age:32]
==>[id:5,label:software] ,name:ripple,lang:java]
==>[id:6,label:person,name:peter,age:35]
gremlin> gE().elementMap()
==>[id:7,label:knows, IN:[id:2,label:person],OUT:[id:1,label:person],weight:0.5] ==>[id:8,label:knows,IN:[id:4,label:person
] ],OUT:[id:1,label:person],weight:1.0]
==>[id:9,label:created,IN:[id:3,label:software],OUT:[id:1,label] :人],体重:0.4]
==>[id:10,ラベル:作成,IN:[id:5,ラベル:ソフトウェア],OUT:[id:4,ラベル:人],体重:1.0]
==>[id:11,ラベル:作成,IN:[id:3,ラベル:ソフトウェア],OUT:[id:4,ラベル:人],体重:0.4] ==>[id:12,ラベル
:作成済み,IN:[id:3,label:software],OUT:[id:6,label:person],weight:0.2]
グレムリン> 

1. グラフの基本操作

V()E()id()label()_properties()valueMap()values(),elementMap()

V(): 頂点のクエリ。一般にグラフ クエリの最初のステップとして使用され、後で継続できるステートメントの種類が多数あります。

E(): クエリ エッジ。一般にグラフ クエリの最初のステップとして使用され、後で継続できる多くの種類のステートメントがあります。

id(): 頂点とエッジの ID を取得します。

label(): 頂点とエッジのラベルを取得します

properties(): 頂点とエッジの属性を取得します。さらに 、 およびとともに使用して、属性の名前または値を取得することproperties()もできます key()value()

valueMap(): 頂点とエッジの属性を取得します。 違いは、返される構造が異なることです。後者valueMap()は、 すべての属性を大きなリストに平坦化し、 1 つの要素が属性を表します。前者は、頂点またはエッジの属性を維持します。グループの場合、各グループは複数の属性のキーと値のペアで構成されます。properties()

values(): 頂点とエッジの属性値を取得します。

elementMap:获取了标签和id 和valueMap properties都不一样

テスト1

gremlin> g.V()  (1) 查所有的点
==>v[1]
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
gremlin> g.V(1)  (2) 查id=1的点
==>v[1]
gremlin> g.V(1).values('name')  (3) 查id=1的点的名字
==>marko
gremlin> g.V(1).outE('knows')  (4) 查id=1的点的know边(不查create边)
==>e[7][1-knows->2]
==>e[8][1-knows->4]
gremlin> g.V(1).outE('knows').inV().values('name')  (5)查id=1的konw的箭头指向点的name
==>vadas
==>josh
gremlin> g.V(1).out('knows').values('name')  (6) //查id=1的点的know边的点的name
==>vadas
==>josh
gremlin> g.V(1).out('knows').has('age', gt(30)).values('name')  (7)
==>josh

テスト 2: ポイント エッジを追加する

gremlin>graph = TinkerGraph.open()
==>tinkergraph[vertices:0edges:0] //これは新しいグラフであることに注意してください
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices] : 0 エッジ:0], 標準]
gremlin> v1 = g.addV("person").property(id, 1).property("name", "marko").property("age", 29).next ( )
==>v[1]
gremlin> v2 = g.addV("software").property(id, 3).property("name", "lop").property("lang", "java") . next()
==>v[3]
gremlin> g.addE("created").from(v1).to(v2).property(id, 9).property("weight", 0.4) ==>
e [9][1-created->3]
//2 つのポイント (1 人および 1 つのソフト) と 1 つのエッジ (作成) を追加しました 

2. エッジトラバーサルの概念

覚え方のコツはこちら

現在のオブジェクトがポイントの場合、V と E を使用しない次のメソッドはポイントをチェックし、E を使用するメソッドはエッジをチェックします。ポイントはポイントとエッジをチェックできます。

現在のオブジェクトがエッジの場合、次のメソッドには V が必要であり、エッジはポイントのみをチェックできます。

a->b のアウトとインの見方 a はアウト、b はインです。矢印の方向、どちら側がインかを見てください。V

1. 頂点に基づく手順 (上図の頂点「4」など): 

out(label): 指定された EdgeLabel に従って、頂点の OUT 方向に隣接する点にアクセスします (すべてのタイプのエッジを表すゼロの EdgeLabel にすることもできます。また、任意の EdgeLabel のエッジを表す 1 つ以上の EdgeLabel にすることもできます)。以下同様) in
( label): 指定されたEdgeLabelに基づいて頂点のIN方向隣接エッジにアクセス
Both(label): 指定されたEdgeLabelに基づいて頂点の双方向隣接点にアクセス
outE(label): 指定されたEdgeLabelに基づいて頂点のOUT方向隣接エッジにアクセス
inE( label): 指定された EdgeLabel に従って、頂点の IN 方向に隣接するエッジにアクセスします。
BothE(label): 指定された EdgeLabel に従って、頂点の双方向に隣接するエッジにアクセスします。

ここにいくつかの小さなデモがあります

gremlin> gV(4).out()
==>v[5]
==>v[3] -- 4 を頂点として、3 と 5 を指す外側の矢印を確認します。 4create3 と 5 

gremlin> gV(4).in()
==>v[1] -- 4 を頂点として、4 を指す矢印の始点は 1 です 1knows4

2. エッジベースのステップ (上の図のエッジが「知っている」など):

outV():エッジの出力頂点にアクセスします (注: これはエッジに基づいており、上記の手順はすべて頂点に基づいています)。出力頂点はエッジの開始頂点を指します。inV(): にアクセスします
。エッジの入力頂点です。入力頂点は、エッジのターゲット頂点、つまり矢印が指す頂点を参照します。
BothV(): エッジの双方向頂点にアクセスします。
otherV(): エッジのパートナー頂点にアクセスします。エッジ、つまりベース頂点に対するもう一方の端の頂点

3.デモ1

gV(4).out().in() これは、1 に関連する頂点を確認するためによく使用されます。たとえば、それらはパートナーであり、1 と同じ曲が好きです。

gremlin> gV(4).outE().inV().inE().outV().simplePath().path() ==>[v[4],e[
11][4-created->3 ],v[3],e[9][1-作成->3],v[1]]
==>[v[4],e[11][4-作成->3],v[3 ],e[12][6-作成->3],v[6]]

4は3を生み、1と6も3を生むので、16と4は協力関係になります。 

実は以下のようなもので、1と6も見つけましたが、追加の4については後ほどお話します。

グレムリン> gV(4).out().in()
==>v[4]
==>v[1]
==>v[4]
==>v[6]

3. フィルター学習あり

hasLabel(labels… ): オブジェクトのラベルがラベル リストのいずれかと一致する場合、
オブジェクトは hasId(ids… ) を渡すことができます。 オブジェクトの ID が ID リストのいずれか 1 つと一致する場合、
has(key, value)を渡すことができます。 : 属性が含まれています。" 属性「key=value」を持つオブジェクトは、頂点またはエッジを渡して動作します。 has
(label, key, value): 属性「key=value」を含み、ラベル値がパスと動作に一致するオブジェクトを含みます。頂点またはエッジに has
(key, predicate): が含まれます キーが key であり、対応する値が述語パスを満た​​すオブジェクトです。頂点またはエッジに作用します
hasKey(keys… ): オブジェクトの属性キーには以下が含まれている必要があります渡すキー リストのすべてのメンバー。頂点属性に作用します。
hasValue(values… ): object 属性値に値リストのすべてのメンバーが含まれている場合にのみ、渡すことができます。頂点属性に作用します。 has
( key): キーがキーパスである属性を含むオブジェクト。頂点またはエッジに作用します。
hasNot(key): キーがキーである属性を含まないオブジェクト。頂点またはエッジに作用します。

gV().has('person','name',within('vadas','marko')).values('age').mean()

ラベルが人物、名前が(vadasまたはmarko)の点の年齢を求め、平均値を計算して初期化します。

ループ動作

おすすめ

転載: blog.csdn.net/cclovezbf/article/details/132337641