問題タブ [graph-databases]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nosql - グラフデータベースとは何ですか?
Javaで書かれた組み込みNoSQLデータベースのオプションを見ると、グラフデータベースが出てきます。グラフデータベースとは何ですか(特にKey-Valueストアやドキュメント指向データベースとは対照的です)。いつ使用しますか(使用しない場合)。
neo4j - Gremlinで同じプロパティを持つ頂点をマージする方法は?
基本的に、Rob にリンゴがあり、Anna にもそのようなリンゴがあるグラフがあるとします。
ロブ --has-->りんご アンナ --has-->りんご
これは明らかに間違いです。次のような Rob と Anna の両方からのエッジを持つ 1 つの「apple」頂点のみが必要です。 Rob --has--> apple <--has--Anna
Gremlin に、すべての頂点を「apple」というラベルで「マージ」し、エッジを保持するオプションはありますか? この悪い質問で申し訳ありませんが、英語は私の母国語ではなく、この TT ではかなり新しいものです。
graph-databases - OrientDBでエッジが接続されていないすべての頂点を見つけることができますか?
入ってくるエッジがないすべての頂点についてクラスターにクエリを実行する簡単な方法はありますか?
php - ユーザーのフォロワーからユーザーの重要性または「Betweenness Centrality」を計算しますか?
他のユーザーとのつながりに基づいて、最も接続されているユーザーや最も価値のあるユーザーなど、ユーザー アカウント間の興味深い関係を見つける方法を知りたいです。
以下に、私が使用する 2 つのテーブルを示します。1 つはすべてのユーザーを保持し、もう 1 つはフォローしているユーザーのキーを保持します。
どのタイプのアルゴリズムを探していますか?
重要でない人のフォロワーがほとんどまたはまったくいないと仮定すると、どうすればグラフの中心にいる人を見つけることができますか? 重要な人がフォローしているので、彼らは重要だと思います。
アップデート
David と Steve が指摘しているように、特定のノードがどれだけ近いか、どのノードがサブ コミュニティを形成しているか、どのユーザーが最も接続されているかなどはすべて、このスキーマから引き出すことができる有用なデータの例です。
この「フォロワー」設計は現在多くのサイトで使用されているため、さまざまな人々に役立つ可能性のある堅牢な SQL またはプログラミング言語の実装を取得することを期待して、報奨金を開始しました。
一部のアルゴリズムの結果は魅力的ですが、他のアルゴリズム (関連するノードの検索など) は、サイトのユーザーに推奨できるため、サイトのユーザーにとって価値があることに注意してください。
graph-databases - OrientDB:特定のクラスの直接隣接頂点を持たないすべての頂点を検索します
OrientDBのクエリ言語を使用しa
て、クラスの頂点で終わる発信エッジがないb
(つまり、クラスの直接隣接頂点がない)クラスター内のすべての頂点をどのように見つけることができますb
か?他の出力エッジがあるかどうかは関係ありません。
database - Neo4j (およびグラフデータベース) ができないことで、RDBMS ができることは何ですか?
「A Graph Database –transforms a–> RDBMS」
Neo4j サイトは、RDBMS でできることはすべて Neo4j でもできることを暗示しているようです。
RDBMS の代替として Neo4j を選択する前に、いくつかの疑問に答える必要があります。
私はNeo4jに興味があります
- データ「スキーマ」をすばやく変更する機能
- 関係や正規化ではなく、エンティティを自然に表現する能力
- ...非常に表現力豊かなコードにつながります(ORMよりも優れています)
これは、高性能ではなく、その機能に興味がある NoSQL ソリューションです。
質問: Neo4j には、RDBMS の代替として適さない可能性のある問題がありますか?
私は特にこれらについて心配しています:
- アプリケーションロジックに実装しなければならないDB 機能はありますか? (たとえば、いくつかの NoSQL DB のアプリケーション層で結合を実装する必要があります)
- O(n) よりも高速にルックアップできるように、フィールドは "インデックス化" されていますか?
- ホット バックアップとレプリケーションを処理するにはどうすればよいですか?
- スキーマを「変更」することや、異なるバージョンのスキーマを持つエンティティを共存させることに関する問題はありますか?
nosql - URL から手動でグラフ データベースを作成するオプションは何ですか?
そのため、多数の URL を主観的/手動でコピーする必要があります。次に、これらの URL 間の関係をリンクで示します。これを行うには、neo4j、Infogrid などのグラフ データベースにリンクを貼り付けます。
ただし、オンラインの他のツールを使用して同じことを単純化して実装する方法はありますか。問題は、このプロセスが長時間にわたって繰り返され、多くの関係が絶えず作成されるため、リンクを貼り付けてオフラインで非常に多くの関係を作成するのは面倒で時間がかかることです.
どんな提案でも大歓迎です。
neo4j - DB が空でないのに、Gremlin idx が null を返すのはなぜですか?
私は以下を使用してグラフを開いています:
次に、次を使用して頂点を追加します。
その後、db に (Gephi を使用して) 単一の頂点があることがわかりますが、実行すると:
常に false を返します。何らかの方法でインデックス作成を有効にする必要がありますか? Gremlin には特定の Neo4j バージョンが必要ですか?
ログ情報の追加:
これをGremlin 1.3で試してみました-同じ結果です。だから私はそれが私が欠けているものだと思います。
date - JavaでGremlinPipelineとPipeFunctionsを使用してクエリを実行するにはどうすればよいですか?
グラフモデルでは、子と呼ばれる頂点timeCategory
がyear-vertices
ありmonth-vertices
ますday-vertices
。edge-label
で年、でIS_YEAR
月IS_MONTH
などを識別できます。
次のコードのように、特定の年の範囲のすべての頂点を返すクエリを実行したいと思います。
...これは、すべてのプロパティ値(整数としての年)を出力するのに最適ですが、必要なのは、年プロパティが特定の範囲内にあるすべての頂点のリストです。
2番目の質問は、パイプの値から共通部分を作成することです。
例:年パイプ、月パイプ、日パイプの3つのパイプがあり、パイプには年、月、または日を識別する頂点が含まれています。
すべての出力頂点を1つの特別な日付にすることは可能ですか...
セミコード:allVertices2012-01-01 = yearpipe.out()AND monthpipe.out()AND daypipe.out
確かに、私はいくつかのfor-eachループでいくつかの比較を行うことができますが、(単純な)グレムリンがあるかどうかを知りたいと思いました-それをより良くする方法。
algorithm - リンク解析パターン検索
問題の説明
巨大なグラフ データベースにリンク分析アルゴリズムを実装しています。
グラフ データベースは、エンティティ (頂点) と関係 (エッジ) で構成されます。
各エンティティ タイプにはプロパティがあります。たとえば、Person : [年齢、身長、体重]。
各関係にもプロパティがあります。たとえば、Call(Phone,Phone) : [date, duration]または Own(Person, Phone) : [start-date, end-date] などです。
今、私は次の構造を持つパターンを与えられています:
[エンティティ タイプ,制約] [関係タイプ,制約] [エンティティ タイプ,制約] [関係タイプ,制約] ... [エンティティ タイプ,制約]
例えば:
[person,age>20] [own, start-date>1/1/2010] [phone, end with '5'] [call date>1/1/2010] [phone, starts with '6'] [ownedまでに、開始日<1/2/2011] [人物、身長>40]。
パターン内のすべてのエンティティと関係に対して、すべての有効な割り当てを見つける必要があります。
次のプリミティブを使用して、データベースにクエリを実行できます。
- 与えられた一連の制約について、最初の 1000 個の[entity-type,relationship-type,entity-type]割り当てを見つけます。
- 上記の次の 1000 を見つける
- 与えられた一連の制約について、最初の[concrete-entity,relationship-type,entity-type]割り当てを見つけます。
- 上記の次の 1000 を見つける
特定のクエリに対するすべての回答を RAM に保持することは不可能です。各エンティティー - 関係 - エンティティーのトリプルには、何百万 (何十億?) の割り当てが存在する可能性があります。ただし、パターン全体の割り当て数は少ないものとします。
私が試したこと:
チェーンET1-RT1-ET2-RT2-ET3-RT3 の場合... 単純な実装は次のようになります。
問題は、同じサブ問題を複数回解決している可能性があることです。
このような冗長性を排除し、メモリ効率の良いアルゴリズムを探しています。
ノート:
アルゴリズムを探しています。「SQL JOINを使用する」/「SPARQLを使用する」などの回答ではありません...