我们希望对一个加权有向图进行分片。用户可以动态添加节点和边,最初的数据库/图为空。我们将节点和边存储在键值数据库中(可能是Redis):对于每个节点,我们将nodeId作为键,并使用排序集合存储引用节点的键,每个nodeId在排序集合中的得分是边的权重。(有关此问题,请参见Redis:实现加权有向图)。我们没有平衡约束,图上最常见的操作是Dijkstra算法,我们希望将I/O(在我们的情况下是网络)最小化。可能的解决方案是:每个DB服务器包含其他服务器的IP列表:key:server1,value:....250.1;key:server2,value:....250.2;key:server3,value:....250.3。每个nodeId都将是serverX.originalNodeId。哪种算法决定节点放在何处?我们应该支持重新定位节点吗?
我猜天真的方法是将节点A添加到serverX中,其中argmax(在server X中与节点A有边缘的节点数),只要serverX没有完全占满。
我猜天真的方法是将节点A添加到serverX中,其中argmax(在server X中与节点A有边缘的节点数),只要serverX没有完全占满。