トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Neo4j

[SQL,グラフDB]

Neo4j

  • 大量データをJOINさせたりしたい

  プラットフォームの選択

  • Windowsの場合WSLを使用してDebianでインストールしたほうがいい気がする
  • neo4j-shell
    • /etc/neo4j/neo4j.conf のコメントを外しておく
# Enable a remote shell server which Neo4j Shell clients can log in to.
dbms.shell.enabled=true
# The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
dbms.shell.host=127.0.0.1
# The port the shell will listen on, default is 1337.
dbms.shell.port=1337

インストールした後はserviceコマンドで起動できる。

$ sudo service neo4j start

  Neo4jのコンフィグまわり

  • デフォルトではCSVファイルインポートができないので、Settingsから以下の設定を有効化

これをやらないとクエリを投げてもLOADできない。

# Determines if Cypher will allow using file URLs when loading data using
# `LOAD CSV`. Setting this value to `false` will cause Neo4j to fail `LOAD CSV`
# clauses that load data from the file system.
dbms.security.allow_csv_import_from_file_urls=true

  CSVロード(デフォルト)

  • RDBからダンプしたCSVファイルをロードする
    • Neo4jはCSVファイルを <NEO4J_HOME>/import/myfile.csv<NEO4J_HOME>import/myproject/myfile.csv から読み取る
LOAD CSV WITH HEADERS 
FROM "file:///xxx.csv" AS line
CREATE (:Record { title: line.title })
  • WSLの環境へヘッダありCSVを読み込む例

まず一度WSLのLinux環境へファイルを送る

$ sudo cp /mnt/c/tmp/xxx.csv /var/lib/neo4j/import/

その後LOADクエリを実行する

> LOAD CSV WITH HEADERS
FROM 'file:///xxx.csv' AS line
CREATE (:X { head1: line.head1 });

なんか読み込みめっちゃ早い

  neo4j-import

 Windowsの C:\User\you\Documents というパスはWSLでは/mnt/c/Users/you/Documentsとして見えます。
 この変換はほとんどの場合自動で行われますが、明示的に行いたい場合WSL上にwslpathというコマンドが用意されてます。

  Cypherクエリ

参考

SELECT

  • SELECT * FROM x; 相当
MATCH (n) RETURN n;

LIMIT/ORDER BY

  • テスト時によく使うやつ
MATCH (n)
RETURN n.name
ORDER BY n.name
LIMIT 3

DELETE

  • DELETE FROM x; 相当
MATCH (n) DETACH DELETE n;

CREATE TABLE

  • CREATE/INSERT 相当

単独レコード(ノード)追加

CREATE (a:Artist { Name : "Strapping Young Lad" });

複数レコード(ノード)追加

CREATE (a:Album { Name: "Killers"}), (b:Album { Name: "Fear of the Dark"});

or

CREATE (a:Album { Name: "Piece of Mind"}) 
CREATE (b:Album { Name: "Somewhere in Time"});

RDBにはない操作…いや~、残念だなw(大嘘)

ノード間の関係を作成

MATCH (a:Artist),(b:Album)
WHERE a.Name = "Strapping Young Lad" AND b.Name = "Heavy as a Really Heavy Thing"
CREATE (a)-[r:RELEASED]->(b);
お名前: コメント: