グラフベースのデータベース(http://neo4j.org/)の使用例は何ですか? [閉まっている]

StackOverflow https://stackoverflow.com/questions/1000162

  •  05-07-2019
  •  | 
  •  

質問

Relational DBを頻繁に使用し、利用可能な他のタイプに挑戦することにしました。

この特定の製品は見栄えが良く、有望です: http://neo4j.org/

グラフベースのデータベースを使用した人はいますか?ユーザビリティの観点からの長所と短所は何ですか?

これらを運用環境で使用しましたか?それらを使用するように促した要件は何でしたか?

役に立ちましたか?

解決

前のジョブでグラフデータベースを使用しました。 neo4jは使用していませんでした。これはBerkeley DBの上に構築された社内のものですが、似ていました。本番環境で使用されました(現在も使用されています)。

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

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

奇妙なデータベースを持つことで、他の多くの奇妙な技術を構築し、製品を競合他社のものと区別するための秘密のソースをたくさん得ることができます。

主な欠点は、標準のリレーショナルデータベーステクノロジーを使用していないことでした。これは、顧客が企業の場合に問題になる可能性があります。顧客は、なぜ巨大なOracleクラスターでデータをホストできないのかと尋ねるでしょう(通常、顧客は大規模なデータセンターを所有していました)。チームの1人は、実際にデータベースレイヤーを書き換えてOracle(またはPostgreSQL、MySQL)を使用しましたが、元のデータベースレイヤーよりも少し遅くなりました。少なくとも1つの大企業でもOracleのみのポリシーがありましたが、幸いなことにOracleはBerkeley DBを購入しました。また、多くの追加ツールを作成する必要がありました。たとえば、Crystal Reportsを使用することはできませんでした。

グラフデータベースのもう1つの欠点は、それを自分で構築したことです。つまり、問題(通常はスケーラビリティ)に直面したとき、それを自分で解決する必要がありました。リレーショナルデータベースを使用した場合、ベンダーは10年前にすでに問題を解決していたでしょう。

企業顧客向けの製品を構築していて、データがリレーショナルモデルに適合する場合は、可能であればリレーショナルデータベースを使用します。アプリケーションがリレーショナルモデルに適合していないが、グラフモデルに適合している場合は、グラフデータベースを使用します。他の何かにしか適合しない場合は、それを使用します。

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

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

他のヒント

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

すでにJavaで作業している場合、Neo4jを使用したモデリングは非常に単純であり、試した他のソリューションのR / Wに対して最もフラットで最速のパフォーマンスがあると思います。

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

そうは言っても、ビジネス側が迅速なSQLクエリを実行しやすいという理由だけで、MySQLにいくつかの情報を保存します。 Neoで同じ機能を実行するには、現在の帯域幅を持たないコードを記述する必要があります。ただし、すぐにすべてのデータをNeoに移動します!

がんばって。

2つのポイント:

まず、過去5年間SQL Serverで作業してきたデータで、実行する必要のあるクエリの種類(ネストされたリレーションシップ... ..graphs)。私はneo4jで遊んでいますが、この種の検索が必要な場合、検索時間は数桁速くなります。

第二に、グラフデータベースが古くなっている点まで。いいえ。早い段階で、人々はデータを効率的に保存および検索する方法を見つけようとしていたため、グラフおよびネットワークスタイルのデータベースモデルを作成し、それを使用しました。これらは物理モデルが論理モデルを反映するように設計されたため、効率はそれほど大きくありませんでした。このタイプのデータ構造は、半構造化データには適していましたが、構造化密集データには適していません。そのため、Coddという名前のこのIBM男は、構造化データを効率的に配置および保存する方法を研究しており、リレーショナルデータベースモデルのアイデアを思いつきました。そしてそれは良かったし、人々は幸せだった。

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

フレーズを作成するために、Silver Bulletはありません。グラフデータベースモデルは時代遅れであり、それを使用することは40年の進歩をあきらめると言うのは非常に目が見えません。これは、Cを使用すると、JavaやC#のようなものを手に入れるために私たちが経験したすべての技術的進歩をあきらめるということです。それは本当ではありません。 Cは、特定のタスクに必要なツールです。また、Javaは他のタスクのためのツールです。

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

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

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

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

しかし、一日の終わりには、おそらくドメインモデルの性質に基づいて選択する必要があります。テーブルまたはグラフにより適切にマッピングされますか?いくつかのプロトタイプを実行することで決定し、データをロードして、それで遊んでください。 neoclipseを使用して、データのさまざまなビューを確認します。それができたら、良いことをしているかどうかを知っていることを願っています。

会社でイントラネットを構築しています。

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

はい、一部のデータはRDBMSでモデル化するのが最適ですが、いくつかの異なるテーブルを重ね合わせる必要がある場合、グラフモデルはテーブル構造よりも優れているという考えがあります。

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

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

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

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

情報ネットワークにデータが入力され始めたら、「XYZプロジェクトで作業している全員にメールを送りたい」などのクールなトラバースを開始できると思います。 XYZプロジェクト内のデータの作成および変更としてタグ付けされるため、人々はプロジェクトに関連付けられます。したがって、XYZプロジェクトを検索キーとして使用することにより、XYZプロジェクトに関連するすべてのものを含む巨大なセットが作成されます。 XYZプロジェクトを構築した人々へのリンクを含みます。ユーザーのリンクはメールアドレスに接続します。したがって、XYZプロジェクトへの関与により、彼らは私のメールに含まれます。これは、プロジェクトで働いている人々のリストを維持しようとしている秘書とはまったく対照的です。多くのリストを生成します。リストを維持し、リストが最新であることを確認するのに多くの時間を費やしています。そして、そのほとんどは当社の製品に価値を追加しません。

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

非リレーショナルデータベースが満たすニーズについて説明する優れた記事は次のとおりです。 http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php

(名前は別として)リレーショナルデータベースに欠陥や誤りがないことを指摘するのは良い仕事であり、最近は人々が主流のソフトウェアやWebサイトでますます多くのデータを処理し始めていること、そしてそのリレーショナルデータベースこれらのニーズに対応することはできません。

少し遅れる可能性がありますが、Neo4jを使用するプロジェクトの数が増えています。これは、 Neo4j 。また、Neo4jの背後にある会社であるNeoTechnologyには、顧客ページ

でいくつかの参照があります。

注:私はNeo4jチームの一員です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top