我有一个这样的图表:
Source | Sink | Timestamp
A B 2012-08-01 03:02:00
B C 2012-08-01 03:02:00
C D 2012-08-01 03:02:00
...
我正在从另一个表构建此表。我想设计我的表,以便:
目前,除了存储Source
,Sink
和Timestamp
之外,没有其他优化措施。考虑到每个快照包含800K链接,因此无法完整存储图形,因此我正在寻找可能基于delta
的方法。关于如何解决这个问题的任何建议?
图表本身是高度动态的,即可以在每个快照中添加或删除节点和链接。
答案 0 :(得分:0)
我认为你正在看这样的事情:
SNAPSHOT_VER(“version”)随每个新快照单调递增。每个新快照都是增量或删除相对于上一个快照的节点和边缘的增量:
在查询给定快照中存在的图形时,您应该可以这样做:
SELECT *
FROM NODE
WHERE
CREATED_VER <= @snapshot_ver
AND (DELETED_VER IS NULL OR @snapshot_ver < DELETED_VER)
(可以为EDGE构建等效查询。)
这将获取在给定快照或更早版本中创建的所有节点,或者根本不删除或者在给定快照之后删除。
查询最新图表时,您可以简单地:
SELECT *
FROM NODE
WHERE DELETED_VER IS NULL
你可能需要{DELETED_VER,CREATED_VER DESC}(在NODE和EDGE中)的综合索引,以便在这两种情况下都能获得良好的性能。