2009-06-16 13 views
116

私はリレーショナルDBをたくさん使いましたが、他のタイプのベンチャーを利用することに決めました。グラフベースのデータベース(http://neo4j.org/)の使用例は何ですか?

この特定の製品は良いと有望に見える:http://neo4j.org/

は、誰もが、グラフベースのデータベースを使用していますか?ユーザビリティの展望から賛否両論は何ですか?

実稼働環境でこれらを使用しましたか?あなたがそれらを使用するよう促した要件は何でしたか?

答えて

173

前のジョブでグラフデータベースを使用しました。私たちはneo4jを使用していませんでしたが、Berkeley DBの上に構築された社内のものでしたが、それは似ていました。それは生産に使われました(それはまだです)。

グラフデータベースを使用した理由は、システムによって保存されたデータと、システムがデータで行っていた操作が、関係データベースの弱点であり、まさにグラフデータベースの強力なスポットであったためです。システムでは、固定スキーマがなく、リレーションシップによってリンクされているオブジェクトのコレクションを格納する必要がありました。データを推論するために、システムはグラフデータベース内でいくつかのトラバーサルとなる多くの操作を行う必要がありましたが、それはSQLではかなり複雑なクエリになります。

グラフモデルの主な利点は、迅速な開発時間と柔軟性でした。既存の展開に影響を与えることなく、すぐに新しい機能を追加することができました。潜在的な顧客が自分のデータの一部をインポートしてモデルの上に移植したいと思った場合、通常は営業担当者が現場で行うことができます。柔軟性は新しいフィーチャを設計する際にも役立ち、新しいデータを厳格なデータモデルに絞り込む手間を省くことができました。

奇妙なデータベースを持つことで、他の奇妙な技術をたくさん作り、競合他社の製品と区別するための秘密のソースをたくさん提供します。

主な欠点は、標準的なリレーショナルデータベース技術を使用していないことでした。これは、顧客がエンタープライズであるときに問題になる可能性があります。私たちの顧客は、巨大なオラクルのクラスタでデータをホストするだけではいかがでしたか(なぜなら、顧客は通常大規模なデータセンターを持っていた)チームの1人は実際にOracle(またはPostgreSQL、またはMySQL)を使用するようにデータベース層を書き直しましたが、元のデータベースよりもわずかに遅かったです。少なくとも1つの大企業にはOracle専用のポリシーがありましたが、幸いにもOracleはBerkeley DBを買収しました。また、多くのツールを追加する必要がありました。たとえばCrystal Reportsだけではできませんでした。

グラフデータベースのもう一つの欠点は、私たち自身で構築したことです。つまり、問題が発生したとき(通常はスケーラビリティがある場合)、自分で解決しなければなりませんでした。リレーショナルデータベースを使用した場合、ベンダーはすでに10年前に問題を解決していました。

エンタープライズユーザーのための製品を構築しており、データがリレーショナルモデルに適合している場合は、リレーショナルデータベースを使用してください。アプリケーションがリレーショナル・モデルに適合しないが、グラフ・モデルに適合しない場合は、グラフ・データベースを使用します。それが他のものにしか合わない場合は、それを使用してください。

アプリケーションが現在のblubアーキテクチャに適合する必要がない場合は、グラフデータベース、CouchDB、BigTableなどを使用してください。それはあなたに利点を与えるかもしれませんし、新しいものを試してみることも楽しいかもしれません。

どのようなものを選んでも、データベースエンジンの構築が本当に好きでない限り、自分でデータベースエンジンを構築しないでください。

+62

"データベースエンジンの構築が本当に好きでない限り、自分でデータベースエンジンを構築しないようにしてください"の場合は+1、rotfl –

13

私は、エンジニアリングデータの管理に長年MySQLを使用していましたが、うまくいきましたが、私たちが持っていた問題の1つは、スキーマを常に計画しなければならないということでした。私たちが知っていたもう一つの問題は、データをドメインオブジェクトにマッピングして戻すことでした。

これで、neo4jを試し始めました。両方の問題を解決しているようです。各ノード(および関係)に異なるプロパティを追加する機能により、我々の全アプローチをデータに再考することができました。動的対静的言語(Ruby対Java)に似ていますが、データベースに対してです。データベース内にデータモデルを構築することは、はるかに機敏かつ動的な方法で行うことができ、コードを大幅に簡素化します。

コード内のオブジェクトモデルは一般的にグラフ構造であるため、データベースからのマッピングも簡単で、コードが少なくなり、バグも少なくなります。

追加のボーナスとして、私たちのデータをneo4jにロードするための私たちの初期プロトタイプコードは、実際には以前のMySQLバージョンよりも高速に実行されています。私はこれに(まだ)実数はありませんが、それは素晴らしい追加機能でした。

しかし、その日の終わりには、おそらくドメインモデルの性質に基づいて選択する必要があります。それはテーブルやグラフによくマッピングされますか?いくつかのプロトタイプを作成し、データを読み込み、それを使ってプレイすることによって決定します。 neoclipseを使用すると、データのさまざまなビューを見ることができます。それを済ませたら、うまくいけば、あなたが良いことをしているかどうかを知ることができます。

+1

現在、私はGraphic Dbを使用するビジネス要件はありません。私はRDBMS以外は考えていません。 ほとんどの時間私は円形の穴にスクエアペグしようとしている可能性があります。 グラフベースのDbはまったく新しい展望です.Scenegraphベースの永続フレームワーク(Java3D、Xith3D)を使用しましたが、これはGraphicsベースのアプリケーションを格納するためのものでした。 この全体の会話は、私に新しい予感を与えています。 グラフベースのDbを使用していて、実際に動作しているものを見ることができるアプリケーションの参照です! – Khangharoth

30

私たちは1年以上にわたってNeoチームと協力してきており、非常に満足しています。私たちは学術成果物とそれらの関係をモデル化します。これはグラフDBのためのものであり、ネットワーク上で推薦アルゴリズムを実行します。

すでにJavaで作業している場合は、Neo4jを使用したモデリングは非常に簡単で、私たちが試した他のソリューションのR/Wでは一番速く/最高のパフォーマンスがあると思います。

正直言って、私は苦労しているグラフ/ネットワークの観点から考えると、オブジェクトのプロパティと関係を保持するために複雑なテーブル構造を設計するよりもずっと簡単です。

これは、ビジネス側が簡単なSQLクエリを実行するのが簡単であるという理由で、MySQLにいくつかの情報を格納するということです。 Neoと同じ機能を実行するには、今のところ帯域幅を持たないコードを書く必要があります。私たちがやってすぐに、私はすべてのデータをNeoに移しています!

幸運。

+1

MySQLにどのような情報を保存するのか教えていただけますか? 新しいコミュニティを作成するつもりですが、ユーザー名、パスワード、名字などのすべての「定期的な」情報をneo4jに保存することはできますか、それは本当に適切ではありませんか? :o – Muqito

+3

すべての情報を絶対にNeoに保存することができます。私は、すべてのアカウント情報がグラフにある2つのシステムを構築しました。私が通常グラフの外に保存する情報の種類は、報告するために照会する必要がある大量の時系列データです。 – DataRiot

+1

.Net/Microsoftスタック内で作業している場合、Neo4jCLientはうまく動作します。 –

20

2点:

まず、私はSQL Serverで過去5年間に取り組んできたデータに、私は最近、我々は(実行する必要があるクエリのタイプにSQLとスケーラビリティの壁にヒットしましたネストされたリレーションシップ...あなたが知っている...グラフ)。私はneo4jで遊んでいました。この種のルックアップが必要なときに、検索時間が数桁も短くなっています。

第2に、グラフデータベースが古くなるという点です。いいえ。初期段階では、データを効率的に保存および参照する方法を理解しようとしていたときに、グラフおよびネットワークスタイルのデータベースモデルを作成して再生しました。これらは物理モデルが論理モデルを反映するように設計されているため、効率はそれほど高くありませんでした。このタイプのデータ構造は、半構造化データには適していましたが、構造化高密度データには適していませんでした。そこで、Coddという名前のこのIBMの人は、構造化されたデータを整理して格納する効率的な方法を研究していました。そして、リレーショナルデータベースモデルのアイデアを思いつきました。そしてそれはよかったし、人々は幸せだった。

ここには何がありますか? 2つの異なる目的のための2つのツール。グラフデータベースモデルは、半構造化データとエンティティ間の関係(存在する場合と存在しない場合がある)を表現するのに非常に適しています。リレーショナルデータベースは、非常に静的なスキーマを持ち、結合深度が深くならない構造化データに適しています。 1つはデータの種類に適しており、もう1つは他の種類のデータに適しています。

フレーズをコインするには、シルバーブレットはありません。グラフデータベースのモデルが古くて使い尽くされていると言うのは非常に短いです。それは、Cを使って、JavaやC#のようなものを得るために行ったすべての技術的進歩をあきらめているようなものです。それは本当ではない。 Cは特定のタスクに必要なツールです。そして、Javaは他のタスクのためのツールです。ここで

3

は非リレーショナルデータベースが埋めることの必要性について語っ良い記事です:http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php

それはそのわずかことを、リレーショナルデータベースには欠陥または間違っアレントこと(脇名から)指摘で良い仕事をしていません最近では、主流のソフトウェアやWebサイトでますます多くのデータを処理するようになってきており、リレーショナルデータベースはこれらのニーズに対応することができません。

2

が少し遅れているかもしれませんが、Neo4jを使用しているプロジェクトの数が増えています。よく知られているものはNeo4jです。またNeoTechnology、のNeo4jの背後にある同社は、their customers page

ノートでいくつかの参照を持っている:私は私の会社でイントラネットを構築していますのNeo4jチーム

3

の一部です。

テーブル(Oracle、MySQL、SQL Server、Excel、Access、さまざまなランダムリスト)に格納されたデータをNeo4Jや他のグラフデータベースに読み込む方法を理解することに興味があります。具体的には、共通データがシステム内の既存のデータと重複する場合はどうなりますか。

はい、私はいくつかのデータがRDBMSでモデル化されていることを知っていますが、いくつかの異なる表をスーパーインポーズする必要がある場合、グラフモデルは表構造より優れています。

たとえば、私は製造環境で働いています。私たちが取り組んでいる主要なプロジェクトがあり、複雑さのために、各部門では、左の列にBOM (Bill Of Materials)の階層構造を持つ別々のExcelスプレッドシートを作成し、これらのシートを作成した個人が作成したメモと小切手の列をいくつか作成しました。

問題の1つは、これらのすべてのメモを1つの「ビュー」にまとめて、特定の部分で対処する必要があるすべての問題を誰かが見ることができるようにすることです。

第2の問題は、Excelスプレッドシートが、共通コンポーネントが複数のサブアセンブリで使用されている場合に階層BOMを表すのに嫌なことです。つまり、誰かが点火サブアセンブリのP34リレーに関するメモを書き込む場合、同じコメントが、モータドライバサブアセンブリで使用されるP34リレーに関連付けられている必要があります。これは、Excelスプレッドシートでは発生しません。

社内イントラネットでは、簡単に何かを検索できるようにしたいと考えています。部品番号、部品表構造、電話番号、電子メールアドレス、会社ポリシー、または手順に関連するデータなど。私はこれをさらに拡張して、コンピュータのハードウェア資産とインストールされたソフトウェアを管理したいと考えています。

情報ネットワークに人口が集まるようになると、「XYZプロジェクトで働いているすべての人に電子メールを書いてみたいです」などのクールトラバーサルを開始することができます。人々はXYZプロジェクト内のデータの作成と変更とタグ付けされるため、プロジェクトに関連付けられています。したがって、XYZプロジェクトを検索キーとして使用すると、XYZプロジェクトに関連するすべての膨大なセットが作成されます。 XYZプロジェクトを構築した人へのリンクを含みます。人のリンクは自分のメールアドレスに接続します。 XYZプロジェクトに関与することで、それらは私の電子メールに含まれます。これは、プロジェクトに携わる人々のリストを維持しようとしている幹事とは全く対照的です。私たちはたくさんのリストを生成します。リストを管理し、最新のものであることを確認するために多くの時間を費やしています。そして、そのほとんどは当社の製品にいかなる価値も付加しません。

別のクールトラバーサルは、特定のソフトウェアがインストールされているすべてのコンピュータをバージョン別に報告することができます。このレポートを使用して、古いソフトウェアの余分なコピーを削除し、最新のコピーを必要とする人々を更新するタスクを生成することができます。ライセンストラッキングにも役立ちます。

+0

@ Paul Bock:neo4jを使ってこのような問題を解決するのは本当にうまくいくと思います。メーリングリストに参加すれば、コミュニティから多くの情報を得ることができると確信しています:http://neo4j.org/community/list/ – nawroth

+2

これはリレーショナルデータベース。何か不足していますか? –

+5

「NoSQL」に関する議論は、スケーリングを伴わない限り、リレーショナルデータベースではできないことに焦点を当てています。私はしばしば(少なくとも私にとっては)解決策がどれほど自然であるか、あなたの問題を解決する上でどのくらい効率的であるかなどについて考えています。 – Eelco

関連する問題