【发布时间】:2011-09-18 04:47:54
【问题描述】:
我们想对加权有向图进行分片,
用户可以动态添加节点和边,起初DB/Graph是空的。
我们将节点和边保存在一个键/值数据库中(可能是Redis):对于每个节点,我们将 nodeId 作为键,引用节点的键的 sortedset 是 sortedSet 中每个 nodeId 的分数是边的权重。
(请参阅此处的问题:Redis: Implement Weighted Directed Graph)
我们没有平衡约束,图上最常见的动作是 Dijkstra,我们希望最小化 I/O(在我们的例子中是网络)
可能的解决方案:每个数据库服务器都包含一个具有 IP 的其他服务器的列表:
键:server1,值:....250.1
键:server2,值:....250.2
键:server3,值:....250.3
每个nodeId都是serverX.originalNodeId
决定哪个节点去哪里的算法是什么?我们应该支持重新定位节点吗?
我想最简单的方法是,将节点 A 添加到 serverX,其中 argmax(服务器 X 中与节点 A 有边的节点数),只要 serverX 没有被完全占用..
【问题讨论】:
-
“碎片”?我一定是老了。这是什么意思?
标签: database-design graph nosql redis distributed-computing