0

非常に大きなセット (たとえば 100 万以上) の "タスク" のセットがあり、それぞれが小さな "リソース" のセットを必要としているとします (非常に大きなセットから約 10 個、たとえば 10,000 以上)。

「リソース」のサンプル セット (ここでも約 10) を取得するクエリを実行し、これらのリソースを使用するすべてのタスクを検索したいと考えています。最終的には、次のような「タスク」に対してより複雑なクエリを実行したいと考えています。

  • 自分よりも多くの「リソース」を必要とする「タスク」はどれですか?
  • 特定の「タスク」と「リソース リスト」との距離はどれくらいですか?

この問題は、いくつかの点で Web 検索と非常によく似ていると思います。「タスク」は Web ページであり、「リソース」はそれらのページ上の単語です。並列問題では、「これらの単語が与えられた場合、それらを含むすべての Web ページを特定の回数表示する」などのクエリを実行したいと考えています。

私が知る限り、この問題は通常のデータベース (そして NoSQL データベースでさえも!) には適していません。「リソース」のリストは拡張可能である必要があるため、従来のデータベースの列にすることはできません。それらの数も多いため、10,000 列のデータベースを作成するのは正しくないようです。

私が想像していたのは、すべてのデータをメモリに保持し、順番に検索することでした。しかし、それはおそらくあまりスケーラブルではなく、電源が失われるとすべてのデータが失われます...

このような問題を解決する方法についてのガイダンスが欲しいです!

4

1 に答える 1

1

Neo4j (グラフ データベース) を調べて、それが問題領域に適合するかどうかを確認します。

http://www.neo4j.org/

各タスクは、グラフ内のノードになります。

Neo4j の優れた点は、プロパティ グラフをサポートしていることです。つまり、各ノードはキーと値のペアを持つことができます。( http://www.neo4j.org/learn/graphdatabase )。これは、各ノードに n 個のリソースを関連付けることができることを意味します。

通常のリレーショナル データベースで見られるような正規化はありません。各ノードのキーと値のペアのみ。

Gremlin は、Groovy の上にある DSL であり、グラフ トラバーサル用の優れた構文を持ち、Neo4j で動作します。検索/クエリなどを実行できます。それと。

https://github.com/thinkaurelius/titan/wiki/Gremlin-Query-Language

于 2013-06-20T23:34:53.747 に答える