Neo4j が提供する開発環境・デモ・学習用のグラフデータベースとして、Neo4j Sandbox が提供されています。
本ブログでは、Neo4j Sandbox のバックアップ機能について紹介します。
Neo4j Sandbox は、3 日間の有効期限しかありません。しかし、バックアップをリクエストすることで、その後 30 日間ダウンロード可能なリンクが発行され、ダンプファイルを取得できます。
ダウンロードしたダンプファイルは、以下に利用できます。
ただし、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 を使っているため、オフライン状態にするとデータが消失してしまう問題を抱えていました。
それを、以下の方法で解決しました。
neo4j-admin backup --from <sandbox> --backup-dir <backup_dir>
neo4j-admin restore --from <backup_dir + "/neo4j"> --database <backup_id>
neo4j-admin dump --database <sandbox_id> --to <backup_id>.dump
また、すべての処理は非同期で行われます。ユーザーが GUI からバックアップをリクエストしたとき、Celery と呼ばれる非同期ジョブ実行サービスのジョブ情報を Amazon SQS にキューイングします。別のバックアップサービスが、Amazon SQS からキューを取り出し、上記バックアップ処理を実行します。
以上、Neo4j Sandbox のバックアップ機能とその裏側の仕組みについて紹介しました。
Neo4j Aura に気軽にダンプファイルをアップロードできるようになったのは、検証していたデータセットを長く使いたくなったり、時間をかけて Neo4j について学習したくなったりしたときに活きてくるでしょう。