< back

Neo4j Performance Tuning Tips by Graphable

Neo4j のパフォーマンスに関する内部実装の理解と、それを踏まえた上でパフォーマンスを向上させるための工夫について書かれた記事が Graphable より公開されました。

ハイレベルな内容に留まりながら非常に明快な説明をしている良い記事ですので、本ブログでも紹介することにしました。

"Neo4j Performance Architecture Explained & 6 Tuning Tips"

本記事を読むと、Graph Native なグラフデータベースとはどういう意味なのか、Neo4j の 3 種類のインデックスタイプがどう機能しているのか、どのようにディスクとメモリが活用されているのかについて概要を理解することができます。

同じく Index-Free Adjacency につても紹介されています。こちらは、本ブログのこちらの記事 でも別の切り口から説明しています。

6 Tuning Tips

また、本記事で紹介されている以下 6 つの工夫については、基本的なものも含みますが、ぜひ頭に入れておくと良いでしょう。

  1. EXPLAIN/PROFILE を利用したクエリの実行計画の分析
    • RDBMS でも当たり前に行われるパフォーマンスチューニングの一つ
  2. Neo4j 4.3 で導入された Token Lookup Indexes の利用
    • デフォルトで作成されているため、消さずにそのままの利用を推奨
  3. NFS/NAS ではなく EXT4/XFS のファイルシステムの利用
    • 大量の Disk I/O の発生が前提であるため、ネットワーク上をやり取りするファイルシステムは避けるべき
  4. Disk Contention を防ぐため、データ自体とトランザクションログの保存先を分ける
    • データ自体は dbms.directories.data、トランザクションログは dbms.directories.transaction.logs.root で設定変更可能。詳細はドキュメントを参考のこと
  5. Neo4j は Java アプリケーションなので、JVM のチューニングも行う
    • neo4j.confdbms.memory.heap.{initiali_size,max_size} で変更可能
  6. ディスク上のデータをキャッシュするためにメモリも多用するため、正しい想定メモリ利用量を計算する
    • Total Physical Memory = Heap + Page Cache + OS Memory
October 15, 2021

Recommended

  1. Neo4j を VectorDB として使う

    Neo4j は v5.13 で Vector search index を実装した。使い方は他の VectorDB と同様で、ベクタライズしたデータを Vector Index に格納する。Cypher クエリを通じて近似解を導出する。 この記事では、Vector Index の使い方について紹介する。具体例では、ノ…
  2. フェルミ推定で解く Performance Tuning

    実際の Web プログラマーの現場では、よく「なぜかパフォーマンスが遅い」という現象に悩まされる。その原因は様々である。 例えば、アプリケーション層の実装が起因でメモリを線形的 or 指数関数的に喰っているのが原因かもしれない。 ミドルウェア層の設定ミスが原因で大量の Disk I/O が発生していることが原因かもし…
  3. Neo4j Causal Clustering 紹介

    本記事では、Neo4j における Causal Clustering (因果クラスタリング) について説明します。 クラスタリングの目的 データベースを運用する場合、単一のインスタンスを稼働させるか、Causal Clustering を用いてクラスター構成を組むか(クラスタリング)のいずれかを選択することになるでし…