私はリレーショナルDBを頻繁に使用しており、利用可能な他のタイプに挑戦することにしました。
この特定の製品は見栄えがよく、有望です:http: //neo4j.org/
グラフベースのデータベースを使用した人はいますか?ユーザビリティの観点からの長所と短所は何ですか?
これらを実稼働環境で使用しましたか?それらを使用するように促した要件は何でしたか?
私はリレーショナルDBを頻繁に使用しており、利用可能な他のタイプに挑戦することにしました。
この特定の製品は見栄えがよく、有望です:http: //neo4j.org/
グラフベースのデータベースを使用した人はいますか?ユーザビリティの観点からの長所と短所は何ですか?
これらを実稼働環境で使用しましたか?それらを使用するように促した要件は何でしたか?
以前の仕事でグラフデータベースを使用しました。私たちはneo4jを使用していませんでした。これは、Berkeley DBの上に構築された社内のものでしたが、同様でした。それは生産で使用されました(それはまだです)。
グラフデータベースを使用した理由は、システムによって格納されているデータと、システムがデータを使用して実行していた操作が、リレーショナルデータベースの弱点であり、グラフデータベースの強みであったためです。システムは、固定スキーマがなく、関係によって相互にリンクされているオブジェクトのコレクションを格納する必要がありました。データについて推論するために、システムは、グラフデータベースでの2回のトラバーサルとなる多くの操作を実行する必要がありましたが、SQLでは非常に複雑なクエリになります。
グラフモデルの主な利点は、迅速な開発時間と柔軟性でした。既存の展開に影響を与えることなく、新しい機能をすばやく追加できます。潜在的な顧客が自分のデータの一部をインポートしてモデルの上に移植したい場合、通常は営業担当者が現場で行うことができます。柔軟性は、新しい機能を設計するときにも役立ち、新しいデータを厳密なデータモデルに絞り込もうとする必要がなくなりました。
奇妙なデータベースを持つことで、他の多くの奇妙なテクノロジーを構築し、競合他社の製品と区別するための多くの秘密のソースを得ることができます。
主な欠点は、標準のリレーショナルデータベーステクノロジーを使用していなかったことです。これは、顧客が企業である場合に問題になる可能性があります。お客様は、巨大なOracleクラスターでデータをホストできない理由を尋ねるでしょう(お客様は通常、大規模なデータセンターを持っていました)。チームの1つは、実際にデータベース層を書き直してOracle(またはPostgreSQL、またはMySQL)を使用しましたが、元の層よりも少し遅くなりました。少なくとも1つの大企業がOracleのみのポリシーを持っていましたが、幸いなことにOracleはBerkeleyDBを購入しました。また、多くの追加ツールを作成する必要がありました。たとえば、CrystalReportsだけを使用することはできませんでした。
グラフデータベースのもう1つの欠点は、自分で作成したことです。つまり、問題が発生した場合(通常はスケーラビリティで)、自分で解決する必要がありました。リレーショナルデータベースを使用した場合、ベンダーは10年前にすでに問題を解決していたでしょう。
企業顧客向けの製品を構築していて、データがリレーショナルモデルに適合する場合は、可能であればリレーショナルデータベースを使用してください。アプリケーションがリレーショナルモデルに適合しないが、グラフモデルには適合する場合は、グラフデータベースを使用してください。それが他のものにしか適合しない場合は、それを使用してください。
アプリケーションが現在のblubアーキテクチャに適合する必要がない場合は、グラフデータベース、CouchDB、BigTable、またはアプリに適合するものを使用してください。それはあなたに利点を与えるかもしれません、そして新しいことを試すのは楽しいです。
何を選択した場合でも、データベースエンジンの構築が本当に好きでない限り、データベースエンジンを自分で構築しないようにしてください。
私たちはNeoチームと1年以上協力しており、非常に満足しています。学術的成果物とそれらの関係をモデル化し、グラフデータベースにスポットを当て、ネットワーク上でレコメンデーションアルゴリズムを実行します。
すでにJavaで作業している場合、Neo4jを使用したモデリングは非常に簡単で、私たちが試した他のソリューションのR/Wで最もフラットで最速のパフォーマンスを発揮すると思います。
正直なところ、オブジェクトのプロパティと関係を保持する複雑なテーブル構造を設計するよりもはるかに簡単であるため、グラフ/ネットワークの観点から考えないのは難しいです。
そうは言っても、ビジネス側が迅速なSQLクエリを実行する方が簡単であるという理由だけで、MySQLにいくつかの情報を格納します。Neoで同じ機能を実行するには、現時点で帯域幅がないコードを作成する必要があります。ただし、すぐにすべてのデータをNeoに移動します。
幸運を。
2つのポイント:
まず、SQL Serverで過去5年間使用してきたデータについて、最近、実行する必要のあるクエリの種類(ネストされたリレーションシップ...ご存知のとおり...グラフ)について、SQLでスケーラビリティの壁にぶつかりました。 )。私はneo4jで遊んでいますが、この種のルックアップが必要な場合、ルックアップ時間は数桁速くなります。
第二に、グラフデータベースが古くなっているという点まで。いいえ。早い段階で、人々はデータを効率的に保存および検索する方法を見つけようとしていたため、グラフおよびネットワークスタイルのデータベースモデルを作成して試してみました。これらは、物理モデルが論理モデルを反映するように設計されているため、効率はそれほど高くありませんでした。このタイプのデータ構造は、半構造化データには適していましたが、構造化高密度データには適していませんでした。そのため、Coddという名前のこのIBMの人物は、構造化データを配置および保存するための効率的な方法を研究しており、リレーショナルデータベースモデルのアイデアを思いつきました。そしてそれは良かった、そして人々は幸せだった。
ここには何がありますか?2つの異なる目的のための2つのツール。グラフデータベースモデルは、半構造化データおよびエンティティ間の関係(存在する場合と存在しない場合があります)を表すのに非常に適しています。リレーショナルデータベースは、非常に静的なスキーマを持ち、結合の深さがそれほど深くない構造化データに適しています。1つはある種類のデータに適しており、もう1つは他の種類のデータに適しています。
フレーズを造るために、特効薬はありません。グラフデータベースモデルは時代遅れであり、それを使用することは40年の進歩をあきらめると言うのは非常に近視眼的です。これは、Cを使用することで、JavaやC#などを取得するために経験したすべての技術的進歩を放棄していると言っているようなものです。しかし、それは真実ではありません。Cは、特定のタスクに必要なツールです。そして、Javaは他のタスクのためのツールです。
私は何年もの間MySQLを使用してエンジニアリングデータを管理してきましたが、それはうまく機能しましたが、私たちが抱えていた問題の1つは、常にスキーマを事前に計画する必要があることでした。私たちが知っていたもう1つの問題は、データをドメインオブジェクトにマッピングして戻すことでした。
これでneo4jの試用を開始したばかりで、両方の問題を解決しているようです。各ノード(およびリレーション)に異なるプロパティを追加する機能により、データへのアプローチ全体を再考することができました。動的言語と静的言語(RubyとJava)に似ていますが、データベース用です。データベースにデータモデルを構築することは、はるかに機敏で動的な方法で行うことができ、それによってコードが劇的に簡素化されます。
また、コード内のオブジェクトモデルは一般にグラフ構造であるため、データベースからのマッピングも簡単で、コードが少なく、その結果、バグも少なくなります。
また、追加のボーナスとして、neo4jにデータをロードするための最初のプロトタイプコードは、実際には以前のMySQLバージョンよりも高速に実行されています。私はこれについて(まだ)確かな数字を持っていませんが、それは素晴らしい追加機能でした。
しかし、結局のところ、選択はおそらくドメインモデルの性質に主に基づいているはずです。表やグラフにうまく対応できますか?いくつかのプロトタイプを作成して決定し、データをロードして試してみてください。neoclipseを使用して、データのさまざまなビューを確認します。それが済んだら、うまくいけば、良いことをしているのかどうかがわかります。
非リレーショナルデータベースが満たすニーズについて説明している優れた記事は次のとおりです。http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php
リレーショナルデータベースには欠陥や間違いがないこと、最近では主流のソフトウェアやWebサイトでますます多くのデータを処理し始めていること、そしてリレーショナルデータベースは拡張できないことを(名前は別として)指摘するのは良い仕事です。これらのニーズのために。
会社でイントラネットを構築しています。
テーブル(Oracle、MySQL、SQL Server、Excel、Access、さまざまなランダムリスト)に格納されているデータをロードして、Neo4Jまたはその他のグラフデータベースにロードする方法を理解することに興味があります。具体的には、共通データがシステムにすでに存在する既存のデータと重複する場合に何が起こるか。
はい、一部のデータはRDBMSで最適にモデル化されていることは知っていますが、複数の異なるテーブルを重ね合わせる必要がある場合は、グラフモデルの方がテーブル構造よりも優れているという考えがあります。
たとえば、私は製造環境で働いています。私たちが取り組んでいる主要なプロジェクトがあり、複雑さのために、各部門は、左側の列にBOM(Bill Of Materials)階層があり、次に個人によって作成されたメモとチェックのいくつかの列を持つ個別のExcelスプレッドシートを作成しましたこれらのシートを作った人。
したがって、問題の1つは、これらすべてのメモを1つの「ビュー」にマージして、特定の部分で対処する必要のあるすべての問題を誰かが確認できるようにすることです。
2番目の問題は、共通のコンポーネントが複数のサブアセンブリで使用されている場合、Excelスプレッドシートが階層BOMを表すのに苦労することです。つまり、誰かがイグニッションサブアセンブリのP34リレーについてメモを書いた場合、同じコメントをモータードライバーサブアセンブリで使用されるP34リレーに関連付ける必要があります。これは、Excelスプレッドシートでは発生しません。
会社のイントラネットでは、何でも簡単に検索できるようにしたいと思っています。部品番号、BOM構造、電話番号、電子メールアドレス、会社のポリシー、または手順に関連するデータなど。これを拡張して、コンピューターのハードウェア資産とインストールされたソフトウェアを管理したいと思います。
情報ネットワークにデータが入り始めたら、「XYZプロジェクトに取り組んでいるすべての人にメールを書きたい」などのクールなトラバーサルを開始できると思います。XYZプロジェクト内でデータを作成および変更するタグが付けられるため、人々はプロジェクトに関連付けられます。したがって、XYZプロジェクトを検索キーとして使用することにより、XYZプロジェクトに関連するすべてのものを含む巨大なセットが作成されます。XYZプロジェクトを構築した人々へのリンクを含みます。人々のリンクは彼らの電子メールアドレスに接続します。XYZプロジェクトに参加することで、彼らは私のメールに含まれるようになります。これは、プロジェクトに携わっている人々のリストを維持しようとしている秘書とはまったく対照的です。たくさんのリストを作成します。私たちはリストを維持し、それらが最新であることを確認するために多くの時間を費やしています。
別のクールなトラバーサルでは、特定のソフトウェアがインストールされているすべてのコンピューターをバージョン別に報告できます。そのレポートを使用して、古いソフトウェアの余分なコピーを削除したり、最新のコピーが必要な人を更新したりするタスクを生成できます。ライセンスの追跡にも役立ちます。
少し遅れるかもしれませんが、 Neo4jにリストされている有名なプロジェクトであるNeo4jを使用するプロジェクトが増えています。また、Neo4jの背後にある会社であるNeoTechnologyは、顧客ページにいくつかの参照があります
注:私はNeo4jチームの一員です