🌎

Neo4jとは

2022/09/26に公開

NoSQLとは?

Neo4jはNoSQLのDBMSです。
データベースというと、リレーショナルデータベース(RDB)が一般的ですが、RDBでないデータベースが2000年ごろから広がり始めました。そうした「RDBではないデータベース」をNoSQLと言います。RDBと区別するために、それ以外のデータベースを総称して使われています。
ちなみにNoSQLは「Not Only SQL」の略です。
つまり、「RDBはもう不要!これからはNOSQLだけあればいい!」ということではなく、「RDBだけではなくて、新しいデータベースも利用する必要がある」という背景があります。
※RDBを操作するための言語をSQLと言います。

NoSQLの種類

NoSQLは下記4つに分類されることが一般的です。

1. キー・バリュー型

「キー」と「バリュー」という組み合わせから作られるシンプルなモデル。
RDBのようにテーブルや関係性を定義する必要がない。
代表例:Redis、Amazon DynamoDB

2. 列指向型(カラム指向型)

キー・バリュー型を高度にしたモデル。
キーが1つのバリューと対になるのではなく、キーが複数のカラム(列)を持つことができる。
代表例:GoogleBigTable、Cassandra

3. ドキュメント型

JSONやXMLをそのままドキュメントの形でデータを管理するモデル。
複雑な階層構造のデータをそのまま1レコードにできる。
代表例:MongoDB

4. グラフ型

数学のグラフ理論に基づいた「ノード(主要なデータの要素)」、「エッジ(関係性)」、「プロパティ(属性情報)」から構成されるモデル。
SQLではJOINが複雑になるほど速度が遅くなるが、グラフ型では関係性が複雑であっても速度が速い。
代表例:Neo4j、TigerGraph

Neo4jとは

下記4つで構成されるデータモデル
1. ノード
2. リレーションシップ
3. プロパティ
4. ラベル

なぜNeo4jなのか

グラフ型の人気は年々増加傾向にある


出典: https://db-engines.com/en/ranking_categories

グラフ型の中ではNeo4jがダントツで人気がある


出典: https://db-engines.com/en/ranking/graph+dbms

Neo4jのメリット

RDBでフォロー機能を実装した場合

このようなテーブル定義で、imaizumiのフォロワーを取得するSQLは下記のようになる。

  • imaizumiのフォロワー
SELECT u1.name
FROM User as u1 
JOIN Relationship
ON Relationship.follower_id = u1.id
JOIN User as u2
ON Relationship.followed_id = u2.id
WHERE u2.name = 'imaizumi'

この段階でもSQLはまあまあ長いが、例えば、imaizumiのフォロワーのフォロワーを取得したい場合はJOINがもっと増えてパフォーマンスが落ちる。
また、階層が増えれば増えるほど、クエリが複雑化する。

Neo4jでフォロー機能を実装した場合

Cypherクエリの場合は下記のようになる。

  • imaizumiのフォロワー
MATCH (imaizumi:User{name: "imaizumi"})<-[:FOLLOW]-(follower:User)
RETURN follower.name
  • imaizumiのフォロワーのフォロワーを取得するCypherクエリ
MATCH (imaizumi:User{name: "imaizumi"})<-[:FOLLOW]-(:User)<-[:FOLLOW]-(follower_of_follower:User)
WHERE follower_of_follower <> imaizumi
RETURN follower_of_follower.name

Cypherクエリはシンプルに、かつ直感的に分かりやすく書ける。

参考

NOSQLの基礎知識
【図解】NoSQLとは?注目される背景や種類をわかりやすく解説
NoSQLとは?メリットやRDBMSとの違いについてわかりやすく解説
Neo4jドキュメント

Discussion