0xf

日記だよ

neo4j 4.2.3 メモ

マネージドなグラフDBとしては Amazon Neptune があるが、こいつは Cypher をサポートしないのでいったん除外した。おれは Cypher の書き味がなんとなく好きなんです。

動作環境としては適当に debian 系のVMクラウド上に立てた。ドキュメントを参照しつつそのままインストールしていく。特に困ることはない。

VM側では0.0.0.0を待ち受けてファイアウォールで自宅のIPアドレスのみを許可して全開放。人にはよると思うけどローカル docker より状態を持つミドルは外にあった方が好みで、neo4j 4.3 からは M1 も公式サポートするはずですが、ローカルに立てるかなぁというとけっこう微妙に思ってます。でもなー自宅ネットワークの外部IP変わったタイミングで設定し直すとかやってると、また「いやローカルに欲しい」ってなるんだよなぁ。

CLIcypher-shell を利用する。

$ cypher-shell -a <リモートホスト> -u neo4j -p

ブラウザコンソールでもほぼ同じことができるのでブラウザで参照できる状態を作れるならそっちが便利かもしれない。

インストール直後は neo4j ユーザしかいない。パスワードは初期設定で neo4j になってて変更が求められる。パスワードジェネレートボタンがあるのが親切。neo4jユーザは管理ユーザとして扱っておけばよくて、接続したら新しくユーザを作成していくとよいと思う。

メモ (neo4j)

  • 脳内モデルとしては、
    • スキーマレスにプロパティを持てるデータストアで、要素間にリレーションを作れる
    • スキーマレスではあるけどプロパティに対してユニーク制約や検索のためのインデックスを貼れる。マルチカラムインデックスはエンタープライズ版のみ。
    • クエリはリレーションを利用した異様に強力なパターンマッチが使えて便利
  • コミュニティ版は複数DB作れない。エンタープライズ版だと増やせます。
  • コミュニティ版はHA構成作れない。まあ個人で手元ツール作る分には困らないでしょう。
  • 全文検索系には Lucene が組み込まれているので十分高速。日本語周り設定するならトークナイザーの設定とかはしたほうが良いけど最初から考えなくてもいいでしょう。
  • リレーションシップはタイプ(単一)、ノードはラベル(複数可)を持つ。
  • Cypher は neo4jで採用されているクエリ言語。RDBMSSQLみたいなもんです。
  • 式をいろいろ書いていって最後に return で値を返すクエリ式は独特の書き味がある。
    • 手続きをパイプするスタイル。Cloud Watch Logs Insight のクエリ構文に慣れてたりすると違和感薄いかもしれない。
    • 最近手続きについてはこういうスタイルでいいんじゃないかと思うようになってきた。
    • RDBMS側で手続きを実行できるみたいな書き味なので大規模システムの本番系の中央DBにこれを使うことを想像するとドキドキする。これは「DBに仕事をさせたら負け」的な感覚が人生のどこかでインストールされているからだなとわかる。
  • 便利な Web コンソールがビルトインされているので布教用にはまずそっちを見せる。

メモ (Google Cloud)

  • Cloud Run から Compute Engine に接続するには サーバーレス VPC アクセスの構成  |  Google Cloud を利用する。インスタンス数2がミニマムなので最低月 $13 くらい。
    • VPCコネクタでは /28 でサブネットを設定する必要がある。default VPCを使ってる場合、 10.128.0.0/9 とかが使われているので、10.127.255.240/28 を突っ込んでおいた。
    • デフォルトのファイアウォールルールでは新しく追加したサブネットの範囲は接続元として許可されていないので必要に応じて新しく許可ルールを増やす。
  • Cloud Shell Editor から Cloud Run のデプロイをする場合、VPCコネクタの設定ができないぽいので Cloud Run コンソールからやった。一度設定しておけば再度デプロイする時は設定が引き継がれてそう。
    • Cloud Run 側の yaml 定義では spec / template / metadata / annotations / run.googleapis.com/vpc-access-connector に定義されていた。