Neo4jの概要
Neo4j(ネオフォージェイ)とは、グラフ構造のデータモデル(※1)を扱うデータベース管理システム(DBMS)であり、グラフデータベース(※2)に分類されます。
Neo4j(ネオフォージェイ)は、グラフデータベースの中で最も利用されている製品の一つであり、アメリカのNeo Technology社によって開発が行われています。開発言語はJavaです。
Neo4j(ネオフォージェイ)は、RDBMSのパフォーマンスの問題を解決するために2000年から開発が始まり、2002年に初期バージョンがリリースされ、2007年にオープンソース化、2010年にバージョン1.0がリリースされています。
Neo4j(ネオフォージェイ)は、スキーマレスなデータ構造、開発の容易性、ノード単位のACIDトランザクションなどが評価されており、グラフデータに適したデータベースアーキテクチャとして、世界中で注目を集めています。
アメリカIDG傘下のIT情報サイトInfoWorldが主催する、優れたハードウェア、ソフトウェア、開発ツール、クラウドサービスを表彰する「InfoWorld's 2014 Technology of the Year Award」で選出されるなど、すでに欧米では高い評価を得ているNeo4j(ネオフォージェイ)ですが、今後日本でも本格的な導入が進んでいくことが期待されています。
※1グラフ構造のデータモデルとは、最小単位である「ノード」と、ノード間の「関係性」を持つようなデータ構造のことです。
※2 グラフデータベースはNoSQLの一種であり、グラフ理論を基に、ノードおよびノード間の関係性を扱うことができます。グラフデータベースは、データを表形式で保存するリレーショナルデータベースと異なり、複雑な関係性を基にしたデータ処理ができることが大きな特徴です。また、スキーマ(テーブル定義)が必要ないことも特徴です。ノードの属性を複雑な階層でも管理することができるうえ、クエリの作成が容易である、GUIツールが充実しているなどの理由から近年注目を集めています。
Neo4jの主な特徴
Neo4jの主な特徴は以下の通りです。
- 堅牢なトランザクション
Neo4jはACID準拠(原子性、一貫性、独立性、永続性)のトランザクションをサポートしており、常にデータの整合性を保証します。 - 柔軟なスキーマ
Neo4jはプロパティグラフモデルと呼ばれるモデル化手法に基づいており、自然に近い形でデータをモデル化することができます。 - 高性能な検索
Neo4jは一秒に数百万単位のデータを検索するのに最も高速であるindex-free adjacency(グラフのようにお互いに点と線で繋がっているデータの性質)を持っているため、データセットのボリュームや複雑さに関係なく、一定のパフォーマンスを保つことができます。 - クエリ言語
Neo4jではCypherという宣言型のグラフクエリ言語を使用します。Cypherは直感的に理解と習得ができ、SQLよりもコード量を減らすことができます。 - 主要な言語とフレームワークに対応
Neo4jはJava、C#、Python、JavaScript等の主要な言語向けのドライバを公式にサポートしています。また、Neo4jコミュニティではSpring Data、Django ORM、Laravel、JDBC等の主要なフレームワークもサポートしています。 - クラウド環境に対応
Neo4jはAmazon Web Services(AWS)、Microsoft Azure、Google Cloud Platformなどのクラウド環境でも利用可能です。また、公式のDockerイメージを使用すれば簡単に導入できます。 - マルチデータベース
Neo4j 4.0 からはクラスタ毎に複数のデータベースを扱うことができるマルチデータベースに対応しました。 - リアクティブアーキテクチャ
Neo4j 4.0 からはリアクティブアーキテクチャを導入し、応答性、弾力性、堅牢性を高めました。
リレーショナルデータベースとの比較
リレーショナルデータベース | Neo4j | |
---|---|---|
データストレージ | データは事前に定義された行と列を持つ表に分割されるため、クエリの効率性を損ないます。 | index-free adjacencyを持つグラフストレージ構造により、トランザクションやリレーションシップの処理がより高速になります。 |
データモデル | データモデルは論理モデルから物理モデルに変換する必要があります。データタイプとソースを事前に知っておく必要があるため、変更にはコストがかかります。 | データモデルは論理モデルと物理モデルが一致しており柔軟性があります。データタイプとソースはいつでも追加・変更することができ、開発期間が大幅に短縮されます。 |
クエリ性能 | データ処理のパフォーマンスは、結合(またはリレーションシップ)の数と深さに影響を受けます。 | グラフ処理は、リレーションシップの数と深さに関わらず、レイテンシが低く、リアルタイムのパフォーマンスを保証します。 |
クエリ言語 | SQL:結合の数が増えるほど複雑になるクエリ言語。 | Cypher:リレーションシップクエリを記述するための最も効率的で表現力豊かな方法を提供するグラフクエリ言語。 |
トランザクションサポート | ACIDトランザクションをサポート。 | ACIDトランザクションをサポート。 |
データセンター効率 | サーバの統合は可能ですが、スケールアップにはコストがかかります。 また、スケールアウトも、購入、エネルギーの使用、および管理時間の面でコストがかかります。 | データとリレーションシップは、一緒に格納されており、複雑さと規模が拡大するにつれてパフォーマンスが向上します。これにより、サーバの統合とハードウェアの非常に効率的な使用が実現します。 |
Neo4jのユースケース
- セキュリティの強化
従来の不正アクセスの検出は、ユーザアカウント・IPアドレス・利用デバイスなど個々のデータポイントに対して検出を行っています。 Neo4jでは、個々のデータポイントのリレーションシップに対する検出も行うことが可能であるため、従来の検出方法では、検知できなかった不正アクセスの検知を可能にします。
- 検索機能の強化
グラフベースの検索機能を利用することで、キーワード検索の場合、追加のキーワードを入力せずに関連する情報を表示することが可能です。
Neo4jの動作環境
Neo4jは以下の環境で動作します。
※Neo4j 4.x の場合
- サポートされているプラットフォーム
物理、仮想、コンテナに関わらず、x86_64 アーキテクチャのシステムでサポートされます。 - ハードウェア
個人使用およびソフトウェア開発の場合
CPU 最低Intel Core i3。Intel Core i7 を推奨 メモリ 最小2GB。16GB またはそれ以上を推奨 ストレージ 最小10GB SATA。SATAExpressまたはNVMeを搭載したSSDを推奨。
クラウド環境の場合
CPU 最低2vCPU。16以上を推奨(可能であればXeon processor) メモリ 最小2GB。サイズはワークロードによって異なります。場合により使用するグラフのサイズにあうメモリを備えたインスタンスを使用することを推奨。 ストレージ 最小10GB ブロックストレージ。NVMe SSDを推奨。ストレージサイズはデータベースのサイズに依存します。
オンプレミス環境サーバーの場合
CPU Intel Xeon processor メモリ 最小8GB。サイズはワークロードによって異なります。場合により使用するグラフのサイズにあうメモリを備えたインスタンスを使用することを推奨。 ストレージ 最小SATA 7.2K RPM 6Gbpsのハードドライブ。NVMe SSDを推奨。ストレージサイズはデータベースのサイズに依存します。 - ソフトウェア
Neo4jインスタンスを実行するためには、互換性のあるJava仮想マシン(JVM)がインストールされている必要があります。Neo4j 3.x は Java 8、Neo4j 4.x では Java 11 が必要です。
個人使用およびソフトウェア開発の場合
OS種別 サポートされるJDK MacOS 10.14以上 ZuluJDK11 Ubuntu Desktop 16.04以上 OpenJDK11、OracleJDK11、ZuluJDK11 Debian 9以上 OpenJDK11、OracleJDK11、ZuluJDK11 SuSE 15以上 OracleJDK11 Windows10 OracleJDK11、ZuluJDK11
クラウド環境の場合
OS種別 サポートされるJDK Ubuntu Server 16.04以上 OpenJDK11、OracleJDK11、ZuluJDK11 Red Hat Enterprise Linux Server 7.5以上 Red Hat OpenJDK11、OracleJDK11、ZuluJDK11 CentOS Server 7.7 OpenJDK11 Amazon Linux 2 AMI Amazon Corretto 11、OpenJDK11、OracleJDK11 Windows Server 2016以上 OracleJDK11、ZuluJDK11
Neo4jのライセンス
Neo4j(ネオフォージェイ)のコミュニティ版のライセンスは、GNU General Public License(GPLv3.0)です。
ソフトウェアのコピーや配布、ソースコードの公開を原則として、ソースコードの自由な改変も認められています。
Neo4jの参考情報
Neo4jのプロダクトページ
Neo4jのダウンロード
Neo4jのソースコード(GitHub)
Neo4jのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。