InfoQ

News

Neo4j - 組み込み型のネットワークデータベース

作者 Gavin Terrill, 翻訳者 沼田 暁子 投稿日 2008年6月13日 午後6時19分

コミュニティ
Ruby,
Java,
Architecture
トピック
Object Oriented Design,
データベース設計
タグ
データベース

Neo4j(サイト・英語)は組み込み型で高性能な軽量の永続化ソリューションである。ネットワーク・データベース・モデルに基づいており、これは近ごろ高い関心を得ている。

Neoはネットベース-ネットワーク指向データベース-であり、組み込み型で、ディスクベースの、完全にトランザクションに対応したJava永続化エンジンです。テーブルよりもむしろ、ネットワークの中に構造化されたデータを保存します。ネットワーク(または数学用語ではグラフ)はデータ構造が柔軟で、もっとアジャイルで素早い開発のスタイルを可能にします。

Neoは、成熟していて堅牢なデータベースの全ての機能を備えた、高性能なグラフエンジンと考えることができます。プログラマは、厳密で静的なテーブルよりも、オブジェクト指向の柔軟なネットワーク構造を扱う仕事をします-それにもかかわらず、完全にトランザクションに対応した、エンタプライズ用途に耐え得るデータベースの全ての恩恵を享受します。

Neo を興味深いものにしているのは、いわゆる「ネットワーク指向データベース」を使用していることである。このモデルでは、ドメインのデータは「ノード空間」- ノードや関連、プロパティ(キーと値のペア)のネットワーク -で表現される。関係モデルのテーブルと対比すると、行と列である。関連はファーストクラスのオブジェクトで、プロパティでアノテートされることもあり、ノードが相互に作用するコンテキストを明らかにする。ネットワークモデルは、例えばセマンティックWebアプリケーションのように、自然に階層的に構成される問題領域によく適している。Neoを作成した人たちは、階層的で半構造化されたデータは従来の関係データベースモデルには適していないと考えた。

    1. オブジェクトと関係データベースのインピーダンス・ミスマッチのために、オブジェクト指向の「丸いオブジェクト」を関係データベースの「四角いテーブル」へと押し込むことは、必要以上に難しく時間のかかるものである。
    2. 関係モデルは静的で厳密で固定されているので、変化するビジネスの要求に応えるためにスキーマを発展させることは難しい。同じ理由から、オブジェクト指向のレイヤで素早く進化することによってアジャイルソフトウェア開発の方法論を適用しようとすると、データベースがチームを妨げることがしばしばある。
    3. 関係モデルは、半構造化されたデータの取得がことのほか不得手であるが、この種の情報は情報管理において次のブームになるだろうという考えで、業界アナリストや研究者達は一様に同意している。
    4. ネットワークは非常に効率の良いデータ・ストレージ構造である。人間の脳が一つの巨大なネットワークであったり、あるいはワールドワイドウェブがアドホックなネットワークとして構造化されているのは、偶然ではない。関係モデルはネットワーク指向のデータを取得することはできるが、そのネットワークから横断的に情報を抽出するとなると、非常に弱い。

Neoは比較的新しいオープンソースプロジェクトであるが、1億を超えるノードや関連、プロパティを扱う製品アプリケーションで使用されており、エンタプライズに求められる堅牢性や性能の要件を満たしている。

JTA とJTS、分散ACIDトランザクションの2相コミットを完全にサポートしており、隔離レベルの設定が可能で、トランザクションのリカバリは試練に耐えたものです。これらは言葉だけではありません。Neoは非常に要求の厳しい年中無休の環境で、3年以上に渡って稼動しています。成熟していて堅牢であり、いつでも配備可能なのです。

Java API(source)は12個のクラスで構成されている。ノードの生成はわかりやすい。

Transaction tx = Transaction.begin();
EmbeddedNeo neo = ... // Get factory
// Create Thomas ’Neo’ Anderson
Node mrAnderson = neo.createNode();
mrAnderson.setProperty( ”name”, ”Thomas Anderson” );
mrAnderson.setProperty( ”age”, 29 );
// Create Morpheus
Node morpheus = neo.createNode();
morpheus.setProperty( ”name”, ”Morpheus” );
morpheus.setProperty( ”rank”, ”Captain” );
morpheus.setProperty( ”occupation”, ”Total bad ass” );
// Create a relationship representing that they know each other
mrAnderson.createRelationshipTo( morpheus,
MatrixRelationshipTypes.KNOWS );
// Create Trinity, Cypher, Agent Smith, Architect similarly
...
tx.commit();

ネットワーク内のノードの検索は「traverser」フレームワークを通して行われる。

// Instantiate a traverser that returns all mrAnderson’s friends
Traverser friendsTraverser = mrAnderson.traverse(
Traverser.Order.BREADTH_FIRST,
StopEvaluator.END_OF_NETWORK,
ReturnableEvaluator.ALL_BUT_START_NODE,
MatrixRelationshipTypes.KNOWS,
Direction.OUTGOING);

Neo4j はデュアルライセンスモデルであり、フリー・ソフトウェア(GPL方式(source))と商用がある(しかし、Webページには価格の情報は記載されていない)。現在のバージョンは1.0 beta 6で、Neo4jの次期リリースはRelease Candidate 1になる予定である。Ruby(source)とPython(source)のNeo4j用ラッパも現在開発中である。

原文はこちらです:http://www.infoq.com/news/2008/06/neo4j

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。

Agile2008 チーム参加レポート - カンファレンス参加編

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。

Agile2008 チーム参加レポート - 動機/準備編

筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。

Javaトラブルシューティングメルマガ総集編 2008/08~09

エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。

モデル駆動アプローチがうまく機能しない(しなくなる)8 つの理由

この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。