그래프 데이터베이스에 적합하다고 생각되는 문제가 있지만이를 적용하는 가장 좋은 방법은 확실치 않습니다.평판 확산을 위해 그래프 데이터베이스를 사용하는 방법은 무엇입니까?
처음에는 방향 연결을 가질 수있는 개체 집합이 있습니다 (몇 천만 개, 개체 내외부 링크 수천 개). 그런 다음, 각 객체는 잠재적으로 매우 많은 수의 사용자 (수천만)로부터 명성을 축적 할 수 있습니다 (upvotes, karma 등).
까다로운 부분은 사용자가 개체의 평판을 조정할 때마다 몇 가지 복잡한 규칙을 기반으로 모든 연결된 개체의 평판을 업데이트 할 수 있다는 것입니다. 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 일지 모르지만, 사용자가있는 것처럼 버텍스 당 잠재적으로 많은 속성이 확장되는 방식을 확신하지 못합니다. 아니면 평판이 사용자 정점의 가중치를 적용한 것일 수도 있습니다. 다른 종류의 성능 문제가있는 것 같습니다.
이러한 종류의 문제를 인기있는 그래프 데이터베이스 중 하나로 간단하게 번역 할 수 있습니까?
SQL 예제에서 각 객체는 사용자별로 "평판"을 갖고있는 것처럼 보입니다. "명성"이 모든 사용자에게 동일하지 않습니까? 모델에서 object_reputations가 수행하는 작업의 의미를 명확하게 설명해 주시겠습니까? –
@stephenmallette 올바른 모든 개체는 모든 사용자에 대해 다른 평판을 가지고 있습니다. 모든 객체가 실제로는 아닙니다 (평판이 그래프를 따라 확산되는 정도에 따라 다름)하지만 모든 객체의 10 %는 특정 사용자에 대한 평판을 얻습니다. –