BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Neo4j - 組み込み型のネットワークデータベース

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

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

この記事に星をつける

おすすめ度
スタイル

BT