Submit Search
Neo4j を Javaプログラムから使う
13 likes
6,173 views
Masahiro Satake
Neo4j をローカルまたはリモートで使うときの関係クラスを整理してみました (Java開発者向け・Neo4j初心者向け) 2013年5月25日(日) の「第2回Neo4j 勉強会」での発表資料です。
Technology
Read more
1 of 24
Download now
Downloaded 38 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
More Related Content
PPT
Maven2 plugin
Funato Takashi
PDF
Heroku java
Kazuyuki Kawamura
PDF
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
PPTX
Panamaを先取り!? JVMCIでJITと遊ぶ
Yasumasa Suenaga
PDF
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
PDF
明日から使えるgradle
kimukou_26 Kimukou
PDF
Gradle a new Generation Build Tool
Shinya Mochida
PDF
Catch up Java 12 and Java 13
Yuji Kubota
Maven2 plugin
Funato Takashi
Heroku java
Kazuyuki Kawamura
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
Panamaを先取り!? JVMCIでJITと遊ぶ
Yasumasa Suenaga
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
明日から使えるgradle
kimukou_26 Kimukou
Gradle a new Generation Build Tool
Shinya Mochida
Catch up Java 12 and Java 13
Yuji Kubota
What's hot
(20)
PDF
Head toward Java 15 and Java 16
Yuji Kubota
PDF
Head toward Java 13 and Java 14 #jjug
Yuji Kubota
PDF
JDKの選択肢とサーバーサイドでの選び方
Takahiro YAMADA
PDF
TDD勉強会キックオフ for Java
Yuta Kawadai
PDF
Advanced database monitoring in modern java
Chihiro Ito
PDF
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
PDF
JDK9 新機能 (日本語&ショートバージョン) #jjug
Yuji Kubota
PDF
jjugccc2018 app review postmortem
tamtam180
PDF
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
PDF
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
PDF
OpenShiftでJBoss EAP構築
Daein Park
PPTX
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
Takahiro YAMADA
PPT
Jenkinsプラグイン開発
Takahisa Wada
PDF
Firefoxの開発プロセス
Makoto Kato
PPTX
TDC20111031_Groovy_Geb
Nobuhiro Sue
PPTX
OpenShift from Easy way to Hard ? Way
ロフト くん
PPTX
20161022 Linux on Azureの世界
Takayoshi Tanaka
PPTX
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
PDF
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
Takahiro YAMADA
Head toward Java 15 and Java 16
Yuji Kubota
Head toward Java 13 and Java 14 #jjug
Yuji Kubota
JDKの選択肢とサーバーサイドでの選び方
Takahiro YAMADA
TDD勉強会キックオフ for Java
Yuta Kawadai
Advanced database monitoring in modern java
Chihiro Ito
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
JDK9 新機能 (日本語&ショートバージョン) #jjug
Yuji Kubota
jjugccc2018 app review postmortem
tamtam180
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
OpenShiftでJBoss EAP構築
Daein Park
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
Takahiro YAMADA
Jenkinsプラグイン開発
Takahisa Wada
Firefoxの開発プロセス
Makoto Kato
TDC20111031_Groovy_Geb
Nobuhiro Sue
OpenShift from Easy way to Hard ? Way
ロフト くん
20161022 Linux on Azureの世界
Takayoshi Tanaka
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
Takahiro YAMADA
Ad
Similar to Neo4j を Javaプログラムから使う
(19)
PPTX
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
Keiichiro Seida
PDF
無駄にNeo4jを使っている日々
Toshi Harada
PDF
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
Insight Technology, Inc.
PDF
異次元のグラフデータベースNeo4j
昌桓 李
PPTX
Neo4j ハンズオン
zacky135
PDF
Neo4j Stream, [RDB/NoSQL]Kafka Connector CDC(Change Data Captuer)の紹介
昌桓 李
PDF
Do postgres-dream-of-graph-database
Toshi Harada
PDF
Spring “BigData”
Recruit Technologies
PDF
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
PPTX
Getting Started with Graph Database with Python
ロフト くん
PPTX
Neoの世界へ
時雨 大西
PDF
Infinispan - Open Source Data Grid rev2
nekop
PDF
Neo4jで始めるグラフDB入門 - LT Thursday
Yusuke Komahara
PDF
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
PDF
社会ネットワーク分析第7回
Satoru Mikami
PDF
Hadoop book-2nd-ch3-update
Taisuke Yamada
PDF
はてなブックマーク in Scala
Lintaro Ina
PDF
グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介
ippei_suzuki
PPTX
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
Ryusaburo Tanaka
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
Keiichiro Seida
無駄にNeo4jを使っている日々
Toshi Harada
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
Insight Technology, Inc.
異次元のグラフデータベースNeo4j
昌桓 李
Neo4j ハンズオン
zacky135
Neo4j Stream, [RDB/NoSQL]Kafka Connector CDC(Change Data Captuer)の紹介
昌桓 李
Do postgres-dream-of-graph-database
Toshi Harada
Spring “BigData”
Recruit Technologies
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
Getting Started with Graph Database with Python
ロフト くん
Neoの世界へ
時雨 大西
Infinispan - Open Source Data Grid rev2
nekop
Neo4jで始めるグラフDB入門 - LT Thursday
Yusuke Komahara
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
社会ネットワーク分析第7回
Satoru Mikami
Hadoop book-2nd-ch3-update
Taisuke Yamada
はてなブックマーク in Scala
Lintaro Ina
グラフデータベース:Neo4j、そしてRDBからの移行手順の紹介
ippei_suzuki
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
Ryusaburo Tanaka
Ad
Neo4j を Javaプログラムから使う
1.
Neo4j を Javaプログラムから使う (ローカルとリモート) 初心者向け/Java開発者向け @madgaoh
2.
今日の登場人物 ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) CypherPlugIn neo4j-rest-graphdb neo4j-cypher-plugin neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data <<interface>> RestAPI 2 RestGraphDatabase RestAPIFacade RestCypherQueryEngine
3.
必要なjarファイルを classpathに通す http://docs.neo4j.org/chunked/stable/tutorials-java-embedded-setup.html • Neo4jをダウンロードして libディレクトリの下にあるjarを全 部classpathに通す •
Mavenを使って依存jar一式を取得する <dependencies> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j</artifactId> <version>1.8.2</version> </dependency> </dependencies> 3
4.
ローカルで使う data EmbeddedGraphDatabase neo4j-kernel EmbeddedGraphDatabase graphdb = new
EmbeddedGraphDatabase("path/to/db/data"); Node nodeA = graphdb.createNode(); Node nodeB = graphdb.createNode(); nodeA.createRelationshipTo(nodeB, MyTypeEnum.FRIEND); graphdb.shutdown(); 4
5.
ローカルで使う data EmbeddedGraphDatabase neo4j-kernel EmbeddedGraphDatabase graphdb = new
EmbeddedGraphDatabase("path/to/db/data"); Node nodeA = graphdb.createNode(); Node nodeB = graphdb.createNode(); nodeA.createRelationshipTo(nodeB, MyTypeEnum.FRIEND); graphdb.shutdown(); もしまだ無ければ 新規作成される 注意 最後は必ずシャットダウン 5
6.
ローカルで使う (ファクトリ経由で生成する) <<interface>> GraphDatabaseService data EmbeddedGraphDatabase neo4j-kernel GraphDatabaseService graphdb = new
GraphDatabaseFactory() .newEmbeddedDatabase (" path/to/db/data "); Node nodeA = graphdb.createNode(); Node nodeB = graphdb.createNode(); nodeA.createRelationshipTo(nodeB, MyTypeEnum.FRIEND); graphdb.shutdown(); 6
7.
ローカルで使う (ビルダーでカスタマイズする) <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase data EmbeddedGraphDatabase neo4j-kernel GraphDatabaseService graphdb = new
GraphDatabaseFactory() .newEmbeddedDatabaseBuilder(" path/to/db/data ") .setConfig(GraphDatabaseSettings.read_only, "true") .newGraphDatabase(); Node nodeA = graphdb.createNode(); graphdb.shutdown(); 7 リードオンリーの指定
8.
ローカルで使う (ビルダーでカスタマイズする) <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase data EmbeddedGraphDatabase neo4j-kernel GraphDatabaseService graphdb = new
GraphDatabaseFactory() .newEmbeddedDatabaseBuilder(" path/to/db/data ") .setConfig(GraphDatabaseSettings.read_only, "true") .newGraphDatabase(); Node nodeA = graphdb.createNode(); graphdb.shutdown(); 8 もしまだ無ければ 例外発生! 書き込み操作はできない (例外発生!)
9.
ローカルで使う (Cypherのクエリで検索する) ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-cypher neo4j-kernel EmbeddedGraphDatabase data GraphDatabaseService graphdb = new
GraphDatabaseFactory() .newEmbeddedDatabaseBuilder(" path/to/db/data ") .newGraphDatabase(); ExecutionEngine engine = new ExecutionEngine(graphdb); Map<String, Object> params = new HashMap<>(); params.put("id", 1); ExecutionResult result = engine.execute("START n = node({id}) RETURN n", params); 9
10.
ローカルで使う (Cypherのクエリで検索する) ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-cypher neo4j-kernel EmbeddedGraphDatabase data GraphDatabaseService graphdb = new
GraphDatabaseFactory() .newEmbeddedDatabaseBuilder(" path/to/db/data ") .newGraphDatabase(); ExecutionEngine engine = new ExecutionEngine(graphdb); Map<String, Object> params = new HashMap<>(); params.put("id", 1); ExecutionResult result = engine.execute("START n = node({id}) RETURN n", params); 注意 Cypher は Scala で書かれており、 ExecutionEngine は同名のクラスでも Scala 用と Java 用があるので、正解は Package名に .javacompat と付く方 10
11.
RESTfulサーバとして起動する ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data > curl -X
POST http://server:7474/db/data/node -d {"last_name": "satake", "first_name": "masahiro"}' > curl -X GET http://server:7474/db/data/node/1 Jetty (AppServer) + Jersey (JAX-RS) + Jackson (JSON) 11
12.
neo4j-rest-graphdb とは • Neo4jのREST-APIをラップしてくれるクライアントサイド用 Javaライブラリ • Mavenリポジトリが別になっている –
セントラルに登録されていない • pom.xml に リポジトリの追加の設定が必要 • GitHubで見ると java-rest-binding という名前になっている – 寄贈されたもの・・・(だけど neo4j-contrib でもない・・・?) – 本体のバージョンと完全には同期していない • 5/22 現在の最新は1.8.1 – Branch 1.8.1を見ると1.8.2を追いかけてはいる • 同時に1.9-SNAPTSHOT 2.0-SNAPSHOT もある https://github.com/neo4j/java-rest-binding 12
13.
neo4j-rest-graphdb (Mavenリポジトリを追加) <repositories> <repository> <id>neo4j-public-repository</id> <name>Publically available Maven
2 repository for Neo4j</name> <url>http://m2.neo4j.org</url> </repository> </repositories> : <dependencies> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-rest-graphdb</artifactId> <version>1.8.1</version> </dependency> </dependencies> 13
14.
neo4j-rest-graphdb (Server側と本体バージョン合わせる) 1) 本体のライブラリだけ明示的に1.8.2にする <dependencies> : <dependency> <groupId>org.neo4j</groupId> <artifactId>server-api</artifactId> <version>1.8.2</version> </dependency> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-kernel</artifactId> <version>1.8.2</version> </dependency> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-lucene-index</artifactId> <version>1.8.2</version> </dependency> : </dependencies> 2) 1.9-SNAPSHOT(RC2)
に上げてしまう <repositories> <repository> <id>neo4j-public-repository</id> <name>Publically available Maven 2 repository for Neo4j</name> <url>http://m2.neo4j.org</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> : <dependencies> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-rest-graphdb</artifactId> <version>1.9-SNAPSHOT</version> </dependency> </dependencies> 3) ブランチ最新ソースからビルド 14
15.
リモートで使う (neo4j-rest-graphdbを利用) ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-rest-graphdb neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data RestAPI api =
new RestAPIFacade("http://server:7474/db/data"); Map<String, Object> props = new HashMap<>(); api.createNode(props); api.close(); <<interface>> RestAPI 15 RestAPIFacade
16.
リモートで使う (neo4j-rest-graphdbを利用) ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-rest-graphdb neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data RestAPI api =
new RestAPIFacade("http://server:7474/db/data"); Map<String, Object> props = new HashMap<>(); api.createNode(props); api.close(); <<interface>> RestAPI 16 注意 最後は必ずクローズする RestAPIFacade
17.
リモートで使う (ローカルの時と同じinterfaceで) ExecutionEngine <<interface>> RestAPI <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-rest-graphdb neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data GraphDatabaseService graphdb
= new RestGraphDatabase(api); // or new RestGraphDatabase ("http://..."); // or GraphDatabaseFactory.databaseFor("http://..."); RestGraphDatabase RestAPIFacade 17
18.
<<interface>> RestAPI <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-rest-graphdb neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data RestAPI api
= new RestAPIFacade("http://server:7474/db/data"); GraphDatabaseService graphdb = new RestGraphDatabase(api); // or new RestGraphDatabase ("http://..."); // or GraphDatabaseFactory.databaseFor("http://..."); Node nodeA = graphdb.createNode(); graphdb.shutdown(); ExecutionEngine RestGraphDatabase RestAPIFacade リモートで使う (ローカルの時と同じInterfaceで) 18
19.
<<interface>> RestAPI <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-rest-graphdb neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data RestAPI api
= new RestAPIFacade("http://server:7474/db/data"); GraphDatabaseService graphdb = new RestGraphDatabase(api); // or new RestGraphDatabase ("http://..."); // or GraphDatabaseFactory.databaseFor("http://..."); Node nodeA = graphdb.createNode(); graphdb.shutdown(); ExecutionEngine RestGraphDatabase RestAPIFacade リモートで使う (ローカルの時と同じInterfaceで) 19 注意 ここでも最後は必ずシャットダウン (サーバはシャットダウンされない。 内部のRestAPIやリソースの開放)
20.
リモートで使う (Cypherのクエリで検索する) ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-rest-graphdb neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data <<interface>> RestAPI GraphDatabaseService graphdb =
new RestGraphDatabase(api); ExecutionEngine engine = new ExecutionEngine(graphdb); RestGraphDatabase RestAPIFacade ExecutionEngine 20
21.
リモートで使う (Cypherのクエリで検索する) ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) neo4j-rest-graphdb neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data <<interface>> RestAPI RestGraphDatabase RestAPIFacade ExecutionEngine 21 GraphDatabaseService graphdb =
new RestGraphDatabase(api); ExecutionEngine engine = new ExecutionEngine(graphdb); 注意 Client-Sideで Cypher クエリを使う場合に Server側の cypher ライブラリは使わない
22.
リモートで使う (Cypherのクエリで検索する) ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) CypherPlugIn neo4j-rest-graphdb neo4j-cypher-plugin neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data <<interface>> RestAPI RestAPI api =
new RestAPIFacade("URL…"); RestCypherQueryEngine engine = new RestCypherQueryEngine(api); RestGraphDatabase RestAPIFacade RestCypherQueryEngine 22
23.
ExecutionEngineneo4j-server (HTTP) (RESTful) (JSON) CypherPlugIn neo4j-rest-graphdb neo4j-cypher-plugin neo4j-cypher neo4j-kernel Client-Side Server-Side <<interface>> RestAPI RestAPI api =
new RestAPIFacade("URL…"); RestCypherQueryEngine engine = new RestCypherQueryEngine(api); Map<String, Object> params = new HashMap<>(); params.put("id", 1); QueryResult result = engine.query ("START n = node({id}) RETURN n", params); RestGraphDatabase RestAPIFacade RestCypherQueryEngine 23 リモートで使う (Cypherのクエリで検索する)
24.
ご清聴ありがとうございました ExecutionEngine <<interface>> GraphDatabaseService EmbeddedReadOnly GraphDatabase neo4j-server (HTTP) (RESTful) (JSON) CypherPlugIn neo4j-rest-graphdb neo4j-cypher-plugin neo4j-cypher neo4j-kernel EmbeddedGraphDatabase Client-Side Server-Side data <<interface>> RestAPI 24 RestGraphDatabase RestAPIFacade RestCypherQueryEngine
Download