Neo4j Sandbox Backups

Neo4j が提供する開発環境・デモ・学習用のグラフデータベースとして、Neo4j Sandbox が提供されています。

本ブログでは、Neo4j Sandbox のバックアップ機能について紹介します。

"New Feature: Neo4j Sandbox Backups"

バックアップ方法

Neo4j Sandbox は、3 日間の有効期限しかありません。しかし、バックアップをリクエストすることで、その後 30 日間ダウンロード可能なリンクが発行され、ダンプファイルを取得できます。

ダウンロードしたダンプファイルは、以下に利用できます。

  • Neo4j AuraDB
  • Neo4j Desktop
  • Neo4j Docker image
  • 他の Neo4j インスタンス

ただし、Neo4j Sandbox の実質永久利用を防ぐため、もちろん Neo4j Sandbox にはインポートできません。

仕組みについて

Neo4j Sandbox は AWS の Fargate 上で可動しています。

実際のデータは、EC2 の Instance store (a.k.a. ephemeral storage) 上に保存されています。Instance store は、インスタンスが持続している間のみ利用できる非永久的なストレージです。

今まで、バックアップを作成するためには、neo4j-admin ツールを利用することがありました。しかし、neo4j-admin が作成するファイルはダンプファイルではありません

ダンプファイルを作成するには、オフライン状態の Neo4j データベースが必要でした。先述したとおり Instance store を使っているため、オフライン状態にするとデータが消失してしまう問題を抱えていました。

それを、以下の方法で解決しました。

  1. まずはオンラインバックアップを作成
    • neo4j-admin backup --from <sandbox> --backup-dir <backup_dir>
  2. データベースをローカルに復元
    • neo4j-admin restore --from <backup_dir + "/neo4j"> --database <backup_id>
  3. ダンプファイルをローカルデータベースから作成
    • neo4j-admin dump --database <sandbox_id> --to <backup_id>.dump
  4. S3 にアップロード

また、すべての処理は非同期で行われます。ユーザーが GUI からバックアップをリクエストしたとき、Celery と呼ばれる非同期ジョブ実行サービスのジョブ情報を Amazon SQS にキューイングします。別のバックアップサービスが、Amazon SQS からキューを取り出し、上記バックアップ処理を実行します。

最後に

以上、Neo4j Sandbox のバックアップ機能とその裏側の仕組みについて紹介しました。

Neo4j Aura に気軽にダンプファイルをアップロードできるようになったのは、検証していたデータセットを長く使いたくなったり、時間をかけて Neo4j について学習したくなったりしたときに活きてくるでしょう。

2021-10-18