2015年3月15日日曜日

Neo4j myFAQ

Windows7+2.2.0-RCでちょっと何かしようと思って試行錯誤中にまとめたもの。適宜追加していきます。
もっとこうすればできるよ、これ違うよ、といった意見絶賛募集中です! (Twitterの @techinfo4dog かコメント欄まで。)

  • なんかいろいろ面倒なので中身消したい → match(n) optional match(n)-[r]-()  delete n,r
  • 中身消したけど、トップページに見えるラベル消えないんだけど → 一度stopして、ディレクトリ(フォルダ)を別のに変える。ディレクトリは事前に作っておかないとだだめ。
  • トップページに全消ししたはずのラベルがのこってうざい → 全消ししたのなら作り直すか。アクセス先のフォルダを、存在する新規フォルダにするとOK
  • Webの円に日本語入る? → 入った。例:CREATE (skill:Skill { title:"はうーにゃ"})
  • 一度にたくさんcreateして関係付けしたいな → create (uml:Skill { name:"UML"}),(executableUML:Skill{name: "ExecutableUML"}),(modeling:Skill{name:"モデリング"}), …… (umtp:Organization {name:"UMTP"}),
    (executableUML)-[:NEEDS]->(uml),(yoken)-[:WAY]->(uml),……(umtp)-[:STANDARDIZATION]->(uml)
  • ローカルのcsv読み込みたいな → D:\temp\テスト.csv の場合、load csv with headers from "file:d://temp//テスト.csv" as line merge (f:Function{function:line.function}) でOK。(1行目にfunctionと書かれたタイトルがあり、Functionというラベルつけて読み込ませたい場合。) (参考 http://mizuvm01.cloudapp.net/wp/2014/10/04/3591
    http://qiita.com/awk256/items/a4c7457aad103a07e5d6 )
  • ローカルのcsv読み込ませたら日本語文字化けしたよ → 上記方法だと、UTF-8に文字コードかえるとOKだった。(Excelからcsv出力したのそのままだとSJISだった。サクラエディタでUTF-8保存するとOK)
  • ほかからhttp://IPアドレス:7474/ で接続したい → neo4j-server.propertiesのorg.neo4j.server.webserver.address=0.0.0.0のコメントを外す(前の#を取り除く。)Windows版の場合は起動画面のSettingsボタンを押すと「ServerConfiguration」に何かパスが書いており、Editボタンを押すと直接編集できる。念のためサーバサービス再起動。(あれー。なんか偉く見た目が違うぞ。)
    http://yanqirenshi.hatenablog.com/entry/2012/06/19/Neo4j_%E3%82%92%E5%A4%96%E9%83%A8%E3%81%8B%E3%82%89%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82
  • 2000ノード×5×2とかやっちゃって描画が帰ってこないよ。追加で色々コマンド投げちゃってCPU泣きそうだよ。試しにサービス落としてみたんだけどw → なんか頑張って追加コマンドは処理している?(追加でcsv読み込ませたのちゃんと読んでいるっぽいしCPU使用率なかなか下がらないw
  • CREATE (person:Person { name:"山田太郎", exist:"A社" }) を消したい。→ match(person:Person) delete person
  • 丸の中身に何も出なくなった→丸をクリックしてCaptionでname選択

2015年3月11日水曜日

Neo4j説明会 NeoTechnology社COO LarsNordwall氏来日公演(2015/3/11) まとめ

Neo4j説明会 NeoTechnology社COO LarsNordwall氏来日公演(2015/3/11) まとめ。Neo4jコミュニティのイベント。イベントは先日の(2015/2/5)に引き続き二回目の参加。


【Neo4jユーザグループからのお知らせ(案浦氏)】

今後は勉強会、ミートアップ、OSC参加予定だとか。OSCとかコミュニティの協力者募集中だとか。

【NeoTechnology社COO, Lars Nordwall氏 来日講演:Neo4jの紹介】

英語……ありがとうございます翻訳付きです。
 4年で会社は成長。今は週に20回のイベント/世界。前半部分はわりと前回のイベントと共通か。
<<事例>>
事例1)ドイツの保険会社「die Bayerische」。保険の種類や対象者が増えた。タイムリーに適切な製品を出したいが客の情報を収集して使うシステムの性能に課題があった。元々はIBM DB2。Neo4jはプロトタイプとして選択の一つとして導入。DB2の全リプレイスを達成し、問題が大きく改善された。コストの面でも改善。プロトタイプは2週間。リプレイスは6ヶ月。固めの会社+固めの国なので反論は多かったが結果的に応えられた。複数のDBからの情報抽出、地域柄(外的DB)による価格変動などで、従来一週間ほど見積にかかっていたがそこでNeo4jが圧勝。
 事例2)ノルウェーのTelenor。部門でプランの内容が変わるのに、柔軟に対応ができず、数分かかっていた。(大企業からクレームが発生したほど。)例えば5万人の企業でも、人事異動で部署の変更があり、履歴を保存すると、どんどん増えていく。そのプランに家族も入っていると更に膨大に。元々はCybase。だんだんtree型からグラフ型に中身が変わってきて、性能上の問題が出てきた。(joinの数が増えてコネクションが増えた。)まずはインメモリDB化したが限界に。6ヶ月の開発期間で全データ移行。
 事例3)CrunchBase。データ共有提供サイトで特にStartupに特化。(企業の出資情報や幹部がどこから来たか、巷の記事、SNSなど様々な情報を集約したもの。)MySQL Clousterを使っていた。ユーザが少し前に急増し、世界中でStartup企業も増えた。ユーザがどのように検索するか、の検索パターンも増え、ある検索は早いが他は遅い、が見えてきた。(構造化DBの限界。)Neo4jをWebでコアに使った事例。CIOがNeo4jに惚れ込んでいるとか。
 
<<テクノロジー面>>
データの量が増え、その増加量の予測がしにくい。データの質が表形式だけではなく非構造化、関係性が複雑に。例えばLinkedin、Google、facebookは独自のグラフ型DBで対応している。顧客とデータとの関連をどう強化するか、で、グラフ型DBが重要なポイントになる。レコメンデーションエンジン(推奨エンジン)を導入するのは競争力を高めるのに重要だが、そのエンジンとしてグラフ型は非常に効果が高い。クレジットカードの不正検知のコスト低減にも。ものともの、人と人をリアルタイムに、は従来DBでは難しい。(従来は夜間バッチだった。)グラフ型DBはオンラインですぐに検知し、事件を未然に防いだりもできる。
 従来のRDBでは絵(ホワイトボード)に書いたビジネスモデルを表に変換するが、グラフ型DBはそれをそのまま関係付けて入れられる。表形式ではビジネスモデルとの変換を説明するのが大変。そこを理解するのは専門の知識が必要で、鬼門。グラフ型だと新しくビジネスロジックを加える場合も、スキーマレスでノードの追加が簡単。表形式では異なる形式をつなぐのが大変でコストがかかるし、性能上の問題が出てしまう。データに価値がある場合にはRDBだがデータの関係性に価値がある場合はグラフ型の効果が出てくる。
 joinが多いテーブルだと必要な情報を取り出すのに大量のSQL文が必要だが、サイファー言語使うことで短くできて、開発時間も短縮でき、引き継ぎが簡単。
<<その他>>
HA機能はEnterpriseにしかないが、年商が一定以下の企業には無料で提供するキャンペーンを行っている。それ以外にも価格テーブル設定があるので要相談。


【Cypher Query Language(Creationline社、C.Lee氏)】

現場の立場から、CypherQueryをどう使うか。SQLライクで多能性(絵も書いちゃう)がある言語。Simple、Powerful、Easy、Beautiful。
 グラフデータはラベル、ノード、関係性、属性(キー、バリュー)。ノードストアの中にラベルがありその中にノードがありその中に属性がある。属性の数に制約無い。1200byteを1000個でもOK。ラベルの数にも制約がない。関係性ストアの中にはタイプがありその中に属性。タイプを決めて属性を持つことで多様性。関係性は32000個(?)は持てる。
http://www.creationline.com/lab/7685 (説明に使われていた図は多分ここのかな)
http://www.creationline.com/wp-content/uploads/2015/03/cypher-sql-data-model1.png


 関係性を持つのに、例えばRDBは顔見知り1、好感度2のように入れるが、関係性と人とが同じ扱いになる。グラフ型だといろいろなパターン(あらゆる関係性を表す形状)を持てる。(←ニュアンス微妙か)
 Cypher QLの構成要素は、シンタックス、一般的な文、読み取り、書き込み、Function。
 Cypher QLの実行ツールとして、Neo4jウェブインタフェース、シェル(neo4j-shell)、REST API、Neo4jドライバ。
 CREATE[DELETE],SET[REMOVE],MERGE(登録更新削除)。MATCH,WHERE,RETURN(検索、フィルター)。
 
 match(movie:Movie{title:"xxx"}) return movie
 create(person:Person{name:"a",born:1900})
 return person,movie
 match...
 
 (CypherQLに対して)お前は何者だ? →俺はお前が諦めたすべてだ。、とか。


【書籍紹介(Microsoftのさとうなおき氏)】

オライリー「グラフデータベース」が発売された。(さとうなおき氏:Azureのテクノロジスト、以前はOracleでJavaエバンジェリスト、IT系書籍翻訳とかやってる人)
 英語版は無料でPDFのダウンロードができる。2014年夏に翻訳プロジェクトが立ち上がって、3/25発売される。http://www.oreilly.co.jp/books/9784873117140/
 Neo4jの本というよりグラフ型DBの本だが、例としてNeo4jを主体に、汎用的にまとめられているらしい。Cypher入門も入っている。
 ……これは買い、ですね。3240円。


【Neo4jの国内での活動について(CREATIONLINE安田氏)】

CREATIONLINEのWebサイトに導入事例とか特徴とか価格とか日本語であり。(http://www.creationline.com/)
導入のコンサル、トレーニングサービスもあり。(←おー)
サイトで、CypherQLの入門編とかあるらしい。(http://www.creationline.com/neo4j/topics.html 下部)


【デモ】

45万件のノードと45万件の関係を入れ、不正検知するデモ。