グラフ データベースに適していると思われる問題がありますが、それを適用する最善の方法がわかりません。
最初に、方向リンクを持つことができるオブジェクトのセットがあります (それらの数は数千万で、典型的なリンクのイン/アウト数はオブジェクトごとに数千です)。次に、各オブジェクトは、潜在的に非常に多数のユーザー (数千万人も) から評判 (賛成票、カルマなどを考えてください) を蓄積できます。
注意が必要なのは、ユーザーがオブジェクトの評価を調整するたびに、かなり複雑なルールに基づいて、リンクされたすべてのオブジェクトの評価を (おそらく 1 度を超えて) 更新したいということです。
SQL では、これは次のようになります。
CREATE TABLE objects (id INTEGER PRIMARY KEY);
CREATE TABLE object_links (from_object_id INTEGER, to_object_id INTEGER);
CREATE TABLE users (id INTEGER PRIMARY KEY);
CREATE TABLE object_reputations (object_id INTEGER, user_id INTEGER, reputation FLOAT);
UPDATE
object_reputations
SET
object_reputations.reputation = object_reputations.reputation + ... # some formula goes here
FROM
object_reputations
INNER JOIN object_links
ON object_reputations.object_id = object_links.to_object_id
WHERE
object_links.from_object_id = ...;
これはグラフを扱っているため、グラフ データベースは自然に適合するように思われますが、Neo4j / OrientDB / Blazegraph / Tinkerpop API をざっと読んだだけでは、この問題をどのようにマッピングできるのかわかりません。全然します。
例として Tinkerpop を使用すると、オブジェクトは Vertex であり、オブジェクト間のリンクは Edge であり (これまでのところすべて良い)、評判は...? おそらくVertexPropetriesですが、頂点ごとにユーザーと同じ数のプロパティが潜在的にある場合、物事がどのようにスケーリングされるかはわかりません。または、評判はユーザー頂点からの加重エッジである可能性があります...これには、別の種類のパフォーマンスの問題があるようです。
この種の問題を一般的なグラフ データベースの 1 つに簡単に変換できますか?