我有一个似乎很适合图形数据库的问题,但我不确定应用它的最佳方法。
首先,有一组对象可以有定向链接(几千万个,典型的链接输入/输出数是每个对象几千个)。然后,每个对象都可以从潜在的非常多的用户(也有数千万)那里积累声誉(想想赞成票、业力等)。
棘手的部分是,每当用户调整对象的声誉时,我想根据一些相当复杂的规则更新其所有链接对象的声誉(可能超过一级)。
在 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 为例,对象是顶点,对象之间的链接是边(到目前为止一切都很好),声誉是......?可能是 VertexPropetries,但我不确定每个顶点的属性可能与用户数量一样多,事情将如何扩展。或者,声誉可能是来自用户顶点的加权边缘......这似乎有不同类型的性能问题。
您能否将此类问题简单翻译成流行的图形数据库之一?