冥冥乃志スマートフォン用の表示で見る冥冥乃志ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。この広告は、90日以上更新していないブログに表示しています。1.4が対応したみたいなので、これから先に予定している機能のこともあり、用途の検討も含めて少し使ってみました。SpringBootからの利用ではなく、Neo4Jそのものの検証です。そもそもNeo4Jとは?大体以下から大まかに抜粋。Wikipediaレコード(Neo4J的にはNode)と関連のグラフ構造でデータを表現するグラフデータベースです。データ構造がリレーションモデルではないので、当然系譜的にはNoSQLなわけですが、他のNoSQLとは違ってKeyValue形式ではないのが特長です。Editionの可用性とともに、この辺結構プッシュしてた感じです。Editionがあります。クエリエンジンや基本的なデータベースとしての機能において両者の違いはなく、クラスタリングやキャッシュなどの運用面において違いがあるようです。Editionは無料。使ってみての諸々インストールはダウンロードして展開してアプリたちあげるだけなので割愛。困ったことはありませんでした。先ほども少し触れましたが、データモデルは「ノード(Node)」「コネクション(Connection)」で表されます。ノードとコネクションのデータ構造管理とクエリ発行がグラフデータベースシステムの役割です。ノード今までのRDBMSで言えばレコードに相当します。考え方としてタイプよりもインスタンスを元に作成されるので、レコードほどスキーマ基準の考え方をしなくてもいいようです。ノードは属性とラベル(グルーピングのために使ったり、スキーマっぽく処理したり)を付与することができます。ノードの属性に指定可能なタイプは以下の通りです。booleanbyteshortintlongfloatdoublecharstringJavaで作られているので、この辺は基本的にJavaと一致すると思えば良いかと。コネクションノードとノードを結ぶ関係のことで、RDBMSなら外部キーやら制約やらに相当するかと思いますが、Neo4Jではコネクションそのものに値が持てます。コネクションもインスタンスベースとなるので、ラベルなどによるグルーピングはできますが、厳密なスキーマ運用はシステム上ではしていないです。インデックス、トランザクション構文やプロシジャのサンプルにもありましたが、今回は使っていません。全文検索インデックスもある模様。Cypher御本尊はここ。neo4j.com細かいシンタックスに触れると単に公式ドキュメントの引き写しになるので、使ってみたときのハマりどころとか気づきを主に。ノードとコネクションのCRAETE例えば、知り合い同士の関連を表す場合(公式のサンプルから引っこ抜いてきました)。コネクションの定義です。同一ステートメントの中でしか有効じゃありません。名称がつくわけではないようです。指定してCREATE投げたら、当然別ステートメントだから参照されず、目的のノード間に対するコネクションが作られず、宙ぶらりんな謎ノードがこれでもかと作られました。組み合わせて使いましょう。ノードが存在する可能性があるときはMERGEを使います。検索してみて、見つからなければCREATEしてくれます。スキーマレスなので、属性のあるなしでエラーは多分出ないです。検索の基本、MATCHノードとコネクションの関係を表すパターンで検索をします。ノードの条件検索ノードに設定された名称を条件に検索します。いう関係を持つノードを検索します。ルートになるノードに検索条件をつけます。複数の項目セットを返すことができます。コネクションのパターンは一つで終わらせる必要はありません。友達の友達から趣味が合いそうな人をお勧めするみたいなクエリも書けます。surfer関連の長さを指定するパターン関係の本数が3以上で5を最大とする関連、みたいな長さを基準にしたパターンも可能。つけると実行計画を出してくれるようです。必要なAPIはmavenリポジトリで公開されていて、Javaのクラスで作ります。neo4j.com関数の読み込みも、プロシジャーを作ってjarに固めてpluginディレクトリに入れておけばOKです。サンプル写経して、自分でプロシジャを作ってみたリポジトリがこちら。してできたjarをpluginに入れてNeo4Jを起動すれば関数が使えました。テストをサポートするライブラリなんかも用意されています。サンプル通りにテストコード書いて実行すると若干起動が遅い上に以下のような出力が出るので、jerseyでNeo4Jを起動しているのかもしれません。0とりあえず単体で呼ぶことはできたんですが、例えばこれをMATCHの結果から計算してそのままセットする、みたいなことは、まだCypherのシンタックスがよくわかってないのでできませなんだ。そもそもですね、こんな関数的なプロシジャ作るべきではなくて、もっとバッチっぽい用途でビジネスロジックをデータベースエンジン側に寄せるようなやり方に使うべきで、プロシジャの中でクエリ投げろ、ということですね、きっと。まとめまあ、SpringBootのサポート状況はさておき、グラフデータベース自体は結構使えるんじゃないかという感触です。可用性については、公式サイトの導入事例が結構でかいところなので、現段階ではあまり気にしてないというか。»プロフィールid:mao_instantlifeソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。月別アーカイブ参加グループプログラミングはてなブログをはじめよう!mao_instantlifeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。