neo4jでデータをexportする (neo4j-shell-tools)

  • 0
    いいね
  • 0
    コメント

    neo4jを利用してデータをexportするまでの流れを見ます。
    neo4j自体の利用についてはいろいろな人が書いているので…。

    下準備

    今回はDockerでneo4jを利用します。公式のリポジトリを利用するのですが、neo4j-shell-toolsは入っていないため、若干拡張します。

    上記に対応したDockerfileは以下に置きました。

    https://github.com/tkit/neo4j-dockerfile

    READMEに従ってDockerを起動してください。

    一度コンテナを停止すると、 ${HOME}/neo4j配下にデータファイルが置かれます。

    データを投入する

    どんなデータを使ってもいいのですが、公式にデータが置かれているので、それを使います。

    https://neo4j.com/developer/example-data/

    下の方にある「cineasts_12k_movies_50k_actors.zip (14MB)」をダウンロード、展開してください。

    graph.db というディレクトリが作成されます。このファイルをデータファイルとして上書きします。

    $ rm -rf ${HOME}/neo4j/data/databases/graph.db
    $ cp -pr graph.db ${HOME}/neo4j/data/databases/graph.db
    

    終わったらもう一度dockerを起動します。

    $ docker start neo4j_custom
    

    http://localhost:7474/browser/ にアクセスして適当なクエリを実行すると、データが反映されていることが分かります。

    データ投入後

    データをエクスポートする

    コンテナの外からneo4j-shellコマンドによって様々な操作を行うことができます。

    $ docker exec neo4j_custom bin/neo4j-shell -c "help"
    

    Available commands: alias begin call cd commit create cypher dbinfo drop dump env explain export foreach gsh help index jsh load ls man match merge mknode mkrel mv optional paths planner profile pwd return rm rmnode rmrel rollback runtime schema set start trav unwind using with
    Use man for info about each command.

    上記が公式コンテナの利用できるコマンドで、以下がneo4j-shell-toolsを追加した後に利用できるコマンドです。若干増えています。
    (ちなみにexport-binaryコマンドなども使えるはずなのですが使えないのはなんでだろう)

    Available commands: alias auto-index begin call cd commit create cypher dbinfo drop dump env eval explain export export-cypher export-graphml foreach gsh help import-cypher import-geoff import-graphml index jsh load ls man match merge mknode mkrel mv optional paths planner profile pwd return rm rmnode rmrel rollback runtime schema set start trav unwind using with
    Use man for info about each command.

    この中から、今回はexport-cypherコマンドを利用します。

    $ docker exec neo4j_custom bin/neo4j-shell -c "help export-cypher"
    
    
      -b     Batch Size default 1000.
      -o     Output Cypher file.
      -r     Add all nodes of selected relationships.
    
    $ docker exec neo4j_custom bin/neo4j-shell -c "export-cypher -o /tmp/backup.log"
    Wrote Nodes 0. 100%: nodes = 63042 rels = 466766 properties = 0 time 2057 ms total 2057 ms
    Wrote Relationships 1. 100%: nodes = 63042 rels = 573417 properties = 94754 time 1598 ms total 3655 ms
    Wrote to Cypher-file /tmp/backup.log 2. 100%: nodes = 63042 rels = 573417 properties = 94754 time 3 ms total 3658 ms
    

    これでバックアップが完了します。/tmp/backup.logにcypher形式でデータが保管されているので、緊急時はこれからデータを戻せば良さそうです。

    その他

    community editionだとHA系の機能が軒並み使えないので、community editionでバックアップをオンライン中に取る場合はどうしたらいいのだろうと考えた結果、この方式なのかなと思っています。

    このexport-cypherコマンド実行中にCRUDのうちCとRは行ってみましたが、普通に結果が返ってきていましたので、ロックがかかっているわけではないのかな?と思います。(それはそれで疑問なのですが、そこまで調べていません)