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万件の関係を入れ、不正検知するデモ。

2015年2月10日火曜日

Neo4j 説明会「Neo4j導入事例集」鈴木いっぺい氏

先ほどの翻訳しつつ説明していた人による説明。
医療、金融、テレコムのEnterprise系で、ここ数年、特に導入が広がっており、投資も伸びている。

  1. テレコム業界:ネットワーク機器の機器構成。依存度の分析。依存度が高いものに障害が生まれる可能性があるため、どう分散させるか、のトポロジーのためにまず分析、で利用。資産管理にも。ソーシャライゼーション。ユーザどうしが意見を交わしたり、をグラフ化。コール分析。ヘルプデスクなどで、どの地域でどんなクレームが、等。マスターデータマネジメント。
  2. 金融業界:不正検知、クレジットリスク分析。遠くで使うと電話がかかってくる等、大量のトランザクションから異常条件にフラグをつける。人、カード、金融機関、商品、をグラフ化。不正の検知、予防。顧客の管理。組織の管理(BtoBで、組織によってサービスを変える)、レコメンデーション(人ともの)、アクセス管理などのセキュリティ。資産管理(ドキュメント、人、もの、金)、マスタデータマネジメント。
  3. 医療業界:患者と医者、保険会社。救急車などものが絡む世界。プロバイダーグラフ(医者の紹介。症状における医者のレコメンデーション)、患者グラフ(地域と症状)、バイオ情報(ゲノム分析、新薬開発)、マスターデータマネジメント(医療の資産、患者)、Collaborative Medicine(診療プロセス、臨床試験のモデル)

突き詰めるとかなり広い部分で適用できる。


【Neo4jの決め手】

従来のRDBの限界(データモデリングの限界、スキーマの変更が多発、性能面)。あまり新規で入る、というより何かの置き換えが事例として多い。
トライアルで好結果(データモデリングの根本改善、将来的な拡張)
複数のデータソースとの関係構築(FacebookとTwitterとSQLServerと地図情報と住民データベースとのアグリゲートでモバイル向けに……とか。Enterprise向けも増えている。)


【事例】

  • ebay
  • accenture(荷物の配送ルート管理。ロジスティックスの会社。地図情報、トラック、荷物をノード化、モデリング。ピーク時一秒2500個。常にトラックをいっぱいに、かつ最短に、のアルゴリズム。どう一筆書きするか)
  • glassdoor(オンラインジョブサーチ。人と人、会社。誰がどこで働いているか。自分の友達で行きたい会社につとめている人はいないか。)
  • SFT(フランス大手通信キャリア。データセンター内のスイッチ、ルータ。数千台の関係をグラフ化。柔軟な機器管理、問題発生可能性確認ルールエンジン。)
  • ドイツテレコム(ビデオ配信、時にスポーツの実況中継で、SNSでゲームの審判に対してユーザ意見を募る、ユーザ参加型スポーツチャンネル。視聴率UP)
  • telenor(顧客サービス)
  • cisco
  • clasmate-com(卒業アルバムサービス。オンライン化し、どこにいるかわからない同級生を探すSNS。複雑な検索条件を柔軟に。)
  • National Geographic(1888年創業のNPO。コンテンツの量、メディアの種類が多い。ジャーナル、雑誌、テレビ、音楽、ラジオ、本、映画、地図、…… どうやったら配信を最適化し、、たとえばライオンに興味を持ったらライオン保護募金広告を打つレコメンデーションエンジン等。PostgreSQLベースで800万人を100年分、で、性能面でにっちもさっちも。)
  • Acrobat
  • Draker(ソーラーパネル監視システム。ソーラーファーム、インバータ、電線。どのパネルが変電効率が良いか、障害が発生しているか。未然に問題を防ぐIoTアプリの実現。配線図がそのままデータモデルへ。)
  • CruchaBase(くらちべーす、とよむ。人と会社、もののデータベース配信サービス。複雑な検索ができるのが、他の業界DBと比べてすごい。)
  • eHarmony(恋人探しサイト。人と人とをつなげる。アメリカで最大のサイトで数千万人。人間のパーソナリティ(趣味、学校、地域、だけではなく、かなり細かいファクターまで)を持つ。従来RDBでやっていたがパンク。)

一つ一つの深さ、より、幅の広さの説明。定石以上の展開の仕方を、
日本国内で相談できる事業拠点が設立されている。IaaS上のインテグレーションを提供。上のレイヤーのミドルウェアを提供していく。(会社名:??)
日本語の情報が殆ど無いので、今後公式サイトとかホワイトペーパとかコミュニティ含め活動していく予定。

Neo4j 説明会「NeoTechnology社のオンラインプレゼンテーション」David Montag氏 (NeoTechnology COO)

スイスからオンラインでの話らしい! エンジニア。NeoTechnologyはスウェーデンにある会社で、シリコンバレーにもオフィスがある。アメリカ、ヨーロッパで半分半分くらいで開発。人数は60-70名(→80-100人)。最近出資を受けて開発人員増強中。
 Neo4j、ビックデータとの立ち位置、他のNoSQLとの違いについて語る予定。新しい2.2の説明も。
 ネット経由&スピーカ(&私がそもそも英語が苦手)のため聞きづらかったが、通訳がとても丁寧で助かった……。


【Neo4jの概要、強み、特徴とか】

Neo Technology Overview。世界をリードするグラフ型DB。グラフ型DBとしては筆頭くらいに知名度が高い。ダウンロード数も多く、コミュニティも大きい。NoSQLの中では伸び率が高い。2000年にモデルができた。コンテンツ管理の内部プロジェクト。RDBの性能上の問題を解消するために独自のデータモデルへ。2003年にFirst native grahp DB。2007にOpenSourceへ。(生まれたのは2007年と解釈。)2009年には世界で2000のCustomer。2012年にはオライリー書籍が出た。サイファーと呼ばれるQueryLanguageで他のNoSQLと差をつけている。2013年にラベル機能。現在150社の客。月に5万ダウンロード。イベントも活発(年間500以上)。
 非常に細かく、いろいろな範囲に適用されている。eBay、cisco、NetApp、hp等大手もあり。特定の用途ではなく汎用的に評価されている。人、モノ、機器など、オブジェクトに関する関係性を表す必要があるのはどの業界も同じ。データモデリングの仕組みで強い。Social、Recomendationエンジン、Search&Discovery(ドキュメントと人間、事象をつなげる)、Network&Data Center(ネットワーク機器の接続状態で障害予知検知)、MasterDataManagement(RDBの制限から開放される)、Identity&Access(誰が何に、誰が誰の上司、権利をどのレベルで、などモデル化しやすい)、GEO(位置情報。地図情報。ロジスティックス。最短距離計算)。
価値としては、従来のデータモデリング、管理の方式と比較し、制限から開放してくれる、が大きな特徴。データ表現のしかたの自由度が大きく広がる。付随して、アクセスをかけたときの性能が良い。リアルタイム検索。(スケーラブルにすると)大きくなっても速度に影響を与えない。
特に、ビジネス要件の「量が増える」(モバイル、IoT)に着目し、いかにリアルタイムで処理するか。トランザクションの量、つなぐべきDB、接続しなければならないデータソースの数。請求書処理一つとっても、数字だけではなく、請求先、過去の購買履歴、友人などで分析し、将来的なサービスの付加価値をつけるとか。データソースを統合した運用のしかたを。
Neo4jが目指すのは、一つのベクトルから分析、ではなく、周辺含め将来含めより広いところで分析を。従来、ある一つの答えを見出すソリューションだったのが、広い範囲で求められており、それができるデータ管理ソリューションを作っていくのが狙い。グラフ型DBはわりと早い段階から存在しており、それを使っていた会社は成功している。(Early adoptersとして、Linkedin、Google、Facebook)
Cypher(さいふぁー、とよむ。Cypher Query)はPowerful and Expressive Query Language。LABELとPROPERTY、NODE。
例:MATCH(:Person{name:"Dan"})-{:LOVES]->(:Person{name:"Ann"}
一秒に400万のマッチクエリを1コアのマシンで出せる。他のRDBにくらべて非常に早い。
企業の組織の中で上司がいて、その部下、さらにその部下の名前を出す、を検索するために、SQL Queryではかなり長いものを書くことになるが(A4を2枚びっしり、くらい)、Cypher Queryでは4行程度。ある変更が加わった時の変更労力が大きく異なる。
従来のRDB(Relational Database)では関係性(Relationships)をうまく扱えないし、パフォーマンスが落ちるし、JOINが増えるとQueryが複雑になるし、新しいRelationshipsを追加するとスキーマの再設計(Schema redesign)が必要。不可能ではなく、複雑な構造をとらざるを得ず、性能が影響受けてしまう。
また、NoSQLの他のDBも、関係性を取り扱うわけではない。MongoDB、CouchDB、Cassandra…… データを簡素化して検索する、に特化したDBで、関係性を表すクエリは作りこみが必要。JOIN構造を持つDB、ACID特性を維持できないものもある。
Neo4jは、グラフとしてデータをRe-Imagineする。Agile development、High performance、Verical and horizontal scale、Seamless evolution。データのモデリングを自然な形で構築し、自然な形で検索することで、開発労力を削減。Enterpriseでの実績もあり信頼の出来る技術に成長している。
ホワイトボードに書いたモデルが、Physical Modelになる。モデリングのプロセスとして、データの関係を表記すると、そのまま直結できる。データベースアーキテクトが要らない世界。技術者である必要もなく、マーケティング部門がアプリ設計時にDB関係柄をホワイトボードに書いてDBが設計できる、垣根の低い技術として評価されている。
特徴として、Native Graph Storage、Ntive Graph Processing、Whiteboard Friendry Data Modeling、High Data Integrity(Filly ACID transactions)、Powerful Expressive Query Language(10-100倍コードが短い。MySQLとくらべて1/50に減った例あり)、Scalability and High Availability(クラスタは商用版のみ?)、Built-in ETL、Integration。敷居が低いが保全性はRDB並み。


【Neo4j 2.2で変わったこと】

現在2.1。近々2.2。いくつか性能の問題が指摘されていたが、今回のリリースで大きく改善した。
  •  2.1ではInitial Import:csvからの初期時の読み込み(Load csv機能)。複数のcsvを同時に読み込み可能。DBpedia(?)  2.2ではオンプレミスだけではなくオンラインも読み込みができるNew Bulk Import機能。非常に高速。ベンチマークで非常に大量のロードを実施。
  •  Cypher Architecture。従来のRule-Based OptimizerからCost-Based Optimizerになり、クエリー速度を改善し、ベンチマークで1800ms→23ms、870→43、16→0.9。コストベースは、どういう順番で計算すればよいかを考えている。
  •  Concurrent Writes。ディスクへの書き込みの並列化。従来はシーケンシャル。Small Transaction(小さな書き込みを大量に)では5-15倍早くなった。(Transactions per second TPSで。)SSDだと5-100倍。並列処理でSmall Transactionの改善効果が大きい。特にSSDでは。
  •  Authentication。セキュリティ面の強化。ユーザ認証機能追加。(これまで無かったの???)

【質疑応答】

  • コストの計算方法は? →難しいので別途文章で。
  • RDBとのコスト計算の違いは? →
  • モニタリングは? →APIは準備している。OSSで公開されているサードパーティのはある。
  • ACID特性準拠による性能への影響は? ロックとか →ノードとリレーションシップとでロック(?) 解除されたら次が入る(?)

Neo4j 説明会「Ne4Jユーザグループ再結成」テクノロジックアート 長瀬嘉秀氏

2015/2/10、connpassで見つけた、Neo4j 説明会(NeoTechnology社 COO Lars Nordwall氏 来日講演) 行ってみた。代々木のHatchUp。
http://jp-neo4j-usersgroup.connpass.com/event/11754/?utm_campaign=event_participate_to_follower&utm_source=notifications&utm_medium=email&utm_content=detail_btn


ハッシュタグは、#Neo4jUsersGroup。
Google groupにグループあり。
Facebook:https://www.facebook.com/neo4jusersgroup
Twitter:https://twitter.com/Neo4jUsersGroup

 日本でNeoTechnologyによる販売が決まり、数年前にユーザーズグループ作っていたが再結成することになった。積極的に参加してほしいとのこと。
 ……あれ、すごく見覚えあるなぁと思ったら、先日のモデルベース開発での講演者ですか。
 これまでに二回ほど勉強会が実施されている。
 今後、勉強会、事例発表、製品情報、OSCへの出展等。現在は英語しか文献が出ていない。
 こうやったらグラフ型DB使えるよ、の発表予定。