ホーム » 「graph database」タグがついた投稿

タグアーカイブ: graph database

Neo4jでグラフアルゴリズム

Qiitaでまとまった記事(全体はこちら)を書いてみようかと思っています。トピックは、

  • Neo4jの概要(この辺はとりあえず他コンテンツを参照で)
  • Neo4jのアーキテクチャとアプリケーション機能分担
  • Neo4jのJava API
  • Neo4jのプロシージャによる拡張
  • 基本的なデータ構造:キュー、スタック、プライオリティキュー
  • 幅優先探索
  • 深さ優先探索
  • 最短経路:ダイクストラ法
  • 最短経路:A*法
  • 最短経路:双方向ダイクストラ法
  • 旅行計画問い合わせ(Trip planning query)
  • 補足:Neo4jプロシージャの単体テストとCypherからの返却値の解説
  • 補足:Spring Data Neo4jとSpring Bootを利用してWebアプリ化

というところが目標。ダイクストラ法までは記事にしてみました。時間を見つけてブラッシュアップしていきます。

Neo4jでグラフアルゴリズム:幅優先探索 – Qiita

技術的な記事を投稿しました

グラフデータベースNeo4jを用いた幅優先探索の実装例を紹介する。Neo4jは通常は、Cypherというグラフデータベース検索言語を利用してアクセスする。Cypherは、グラフに対するパターンマッチを容易にすることに特徴があるが、Neo4jにビルトインで組み込まれている探索アルゴリズムを呼び出すことも可能である。よって、Neo4jを利用して幅優先探索を行う場合、自前でアルゴリズムを実装する必要は基本的にはない。あえて、本稿で自前による探索アルゴリズムを実装する例を紹介す…
— 読み進める qiita.com/ggszk/items/f50a0705e45764f13107

グラフデータベースNeo4jをユーザ定義プロシージャで拡張しよう – Qiita

ひさびさに技術的な記事を書いて見ました。

グラフデータベースNeo4jは、主にCypherという独自のグラフデータベース検索言語を使って利用する。最短経路探索などのアルゴリズムはビルトインされている。しかし、せっかくグラフデータベースが使えるのであれば、自分で作ったアルゴリズムを利用したいだろう。直接グラフデータベースにアクセスする方法もあるが、Neo4jにはユーザ定義のプロシージャを組み込む機能が用意されている。その利用方法はNeo4j開発初期のころよりもかなり簡単になっており、Cypherと…
— 読み進める qiita.com/ggszk/items/c15e6e346aef5e19f8ed

Neo4jのデータロード

Neo4jのコミュニティ版には,バルクロード機能はついてない.データロードについてちょっと調べてみた.

最近Early Releaseが出たgraph databases(O’Reilly)によると,Cypherで次のような書き方ができるらしい.

CREATE shakespeare = { firstname : 'William', lastname : 'Shakespeare' },
    juliusCaesar = { title : 'Julias Caesar' },
    (shakespeare)-[:WROTE { date : 1599 }]->(juliusCaesar),
    theTempest = { title : 'The Tempest' },
    (shakespeare)-[:WROTE { date : 1610}]->(theTempest),
    ...
これは小さいデータを入れるのには使えそうだ.また,neo4j-shellにテキストを食わせられないかなと思ったら,同じことを考えた人がいるらしく,このページにその人とNeo4j開発者のNeubauerさんとのやりとりがある.でかいデータだとダメで,batch-importを使えということだそうだ.中の人が言うのだからそれがよいのだろう・・・.とりあえず自分の環境でもビルドして動作させることができた.

Neo4j 1.4.2で複数サーバ可能に(on Mac)

グラフデータベースNeo4jでお手軽にアプリケーションを作るには、Neo4j Serverが便利だ。Neo4j Serverはhttpサーバとして動作し、グラフデータベースへのRest APIを提供するものである。グラフデータの取得、Traverse、Shortest Path程度ならこれで間に合う。

ただし、Neo4j Serverは、1サーバで複数データベースを利用することはできない。よって、複数データベースを(1つのマシンで)利用する場合は、portの異なる複数のhttpサーバを上げることになる。その方法はマニュアルに書かれていたが、少なくともMac上では動作しなかった。それは、開発側も了解していて、サーバスクリプトの修正版がunofficialに流れていた。それが1.4.2で正式に取り入れられたようである。

動作確認してみたが、確かに問題なく動作するようになっている。1.4.2と1.4.1のデータベースには互換性があるので、データベースの再構築は不要である(1.3.xだと多分作り直し)。データベースをServerがアクセスする所定のディレクトリに配置し、起動すれば大丈夫である。

参考に、設定は、confディレクトリ内のneo4j-server-propertiesでportを変更

---
# http port (for all data, administrative, and UI access)
org.neo4j.server.webserver.port=7704
---

と、neo4j-wrapper.confでサーバ毎にサービス名を区別すればよい

---
# Name of the service
wrapper.name=neo4j-7704
---

category

archive