Neo4j v4.0のハイライト #neo4j
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
2020年1月15日、Neo4j v4.0がリリースされました。
https://community.neo4j.com/t/latest-neo4j-major-release-4-0-available/13747
次が今回のリリースのハイライトです。
- スタンドアロンおよび大規模分散クラスター(Causal Cluster)で利用可能な複数のデータベース
- スタンドアロンおよび大規模分散クラスターで利用可能なメタデータリポジトリ「システム」データベース
- スキーマベースのセキュリティとロールベースのアクセス制御
- ロールおよびユーザー管理機能
- サイファー管理コマンド
- データベースファブリックを使用したデータベースへのシャーディング&フェデレーション
- サーバーからクライアントへのフロー制御を備えたJava、Javascriptおよび.NET Reactiveドライバー
- キープアライブ信号を備えたBoltプロトコル
- ネイティブインデックスの新しいインデックス作成アルゴリズム
- 複数のデバイスでI / Oワークロードを簡単に分散するトランザクションログフォルダー
- トランザクションのメモリ制約の制御
- すべてのエディションとインストールで利用可能な、Boltおよびルーティングプロトコルを含む新しいneo4j://スキーム
- リアクティブドライバー(SDN / RX)に基づくSpring Data Neo4jの新しい実験バージョン
次は機能の強化などを除く、v3.5から4.0へバージョンアップする際の重大な変化です。
区分 | V3.5 | V4.0 | コメント |
---|---|---|---|
Java | sdk 8 | sdk 11 | |
Multi databases | - | New | CREATE DTABASE |
System database | - | New | |
Fabric | - | New | データベース越しのシャーディング&フェデレーション(水平分散&統合) |
Sub Query | - | New | |
HA Cluster | 〇 | ✖(廃止) | 機能的に大規模分散クラスターのコア(レプリケーションセット)と同等であるために存在意味が無くなっていました。今後、HAクラスターの機能は大規模分散クラスターのコアが担うことになります |
Java11
Neo4j Server4.0を利用するためには、JDK11をインストールする必要があります。
Neo4j Desktopの場合、JDK11の上でv1.2.4以降を利用してください。
Open JDK11は、次のURLからダウンロードできます。
http://jdk.java.net/java-se-ri/11
エンタープライズ向けのOracle JDKは有償化の流れになっているようなのでライセンスポリシーを確認してください。
ただ、個人利用は従来通り無償らしいです。
サブクエリ
CALL { Cypher構文 }のようにネストしたクエリを実行し、そのリターン値を上位のクエリブロックから利用できます。
CALL { CALL { MATCH (p:Person) WHERE p.name = 'Tom Hanks' RETURN p } RETURN p } RETURN p.name p.name "Tom Hanks"
マルチデータベース
デフォルトデータベースとシステムデータベース
データベースにログインすると、デフォルトデータベース(neo4j)に接続されます。
初期状態では、2つのデータベースが存在しています。
neo4j$ :dbs
[説明]
neo4j | Defaultのデータベース |
---|---|
system | システム情報を保存するリポジトリデータベース |
データベースの作成
1DBMS上で複数のデータベースを作成し、それぞれ異なる内容のグラフが運用できるようになりました。
CREATE DATABASE database_name1;
CREATE DATABASE database_name2;
CREATE DATABASE database_name3;
データベース間のスイッチは「:useコマンド」を使います。
neo4j$ :use system system$ show databases name address role requestedStatus currentStatus error default "neo4j" "localhost:7687" "standalone" "online" "online" "" true "system" "localhost:7687" "standalone" "online" "online" "" false
SYSTEMデータベース上でMOVIEとNORTHWINDを作成してみます。
system$ CREATE DATABASE movie (1 system update, no records) system$ CREATE DATABASE northwind (1 system update, no records) system$ show databases name address role requestedStatus currentStatus error default "neo4j" "localhost:7687" "standalone" "online" "online" "" true "system" "localhost:7687" "standalone" "online" "online" "" false "movie" "localhost:7687" "standalone" "online" "online" "" false "northwind" "localhost:7687" "standalone" "online" "online" "" false
このように1DBMS上で全く異なる複数のデータベースを運用できるようになりました。
データベースファブリック(シャーディング&フェデレーション)
データベースファブリックはNeo4j v4.0リリースの花と言ってもいいでしょう。
Neo4jはマスタータイプのアーキテクチャーです。
このタイプのデータベースでは通常スケールアップしかできないのですが、シャーディングという手法でデータを複数のシャードというパーティションに水平分散します。
MySQLやMongoDBがこの方式を利用しています。
データベースファブリックでは複数のデータベースをシャード(パーティション)のように扱い、巨大グラフをサブグラフに分割し、それぞれのデータベースに分散して格納します。
そして、Cypherで複数のデータベースを統合して読み書きします。
データベースファブリック
- 一連の繋がりを持つグラフを複数のデータベースにパーティション化して分散し、統合して問い合わせを行う方式のことです
- 全く繋がりを持たない複数のグラフをファブリックで運用しても無意味かも知れません
ファブリックデータベース
- 分散されているグラフを統合する仮想データベースです
- ファブリックデータベースは明示的にデータを持ちません
- ファブリックデータベースは明示的に作成しません(neo4j.confに設定)
- Cypherはファブリックデータベース上で実行します
ターゲットデータベース
- サブグラフを持っているデータベースです
- シングルインスタンス中の複数のデータベース、マルチインスタンス中のシングルデータベース、クラスターどちらでも構いません
ファブリックデータベースとターゲットデータベースの構成について
- ファブリックデータベースとターゲットデータベースは1DBMS上で構築できます
- ファブリックデータベースとターゲットデータベースは別々のDBMSに分離することもできます
- ターゲットデータベースはシングルDBMS、マルチDBMS、大規模分散クラスターのどちらの構成でも構いません
次はCypherの例示です。
サブクエリを書くようなイメージで複数のデータベースにまたがる問合せを実行します。
構文を見ると、サブクエリと酷似しています。
example$ CALL { USE example.graphA MATCH (p:Person) WHERE p.name = 'Tom Hanks' RETURN p.name AS names } CALL { USE example.graphB WITH names MATCH (a:Person { name: names} )-[r:ACTED_IN]->(m:Movie) RETURN a,r,m } RETURN a,r,m
大規模分散クラスター(Causal Cluster)との差
大規模分散クラスターはスケールアップのアーキテクチャーです。
いくら大規模になっても、リードレプリカーを多数持っていても、基本的に同じデータの塊です。
これでNeo4jは水平分散ができないという汚名は返上ですね。
HAクラスター廃止
HAクラスターはv4.0で廃止となりました。
そもそもHAクラスターは大規模分散クラスター(Causal Cluster)の登場により機能が被っていました。
大規模分散クラスターはレプリケーションセットとリードレプロードの運用で高可用性と性能拡張の機能を兼ねていました。
まとめ
Neo4j v4.0が発表された時に最も驚いたのはデータベースファブリックでした。
はじめはサブクエリの一種だと勘違いしてましたが、理解出来てからはとても嬉しかったです。
さすがNeoj4は期待を裏切ったりしません!