我们有分区数据库,每个用户的数据都存储在特定的服务器上。
我的用例相当简单:
- 用户有对话。
- 对于一个对话,数据库中有两个代表记录(每个用户都有自己的对话记录)。
如果对用户进行删除操作,我想删除每个用户之间的所有对话。也就是说,我需要删除每个服务器中与用户相关的所有对话。我迫切需要每台服务器的分组数据。
Table<Integer, Integer, Set<Integer>> setPerUser = HashBasedTable.create();
for(Conversation conversation : conversations) {
Integer serverIndex = getServerForUser(conversation);
Integer userId = conversation.getUserId();
Set<Integer> uci = setPerUser.get(serverIndex, userId);
if(uci == null) {
uci = Sets.newHashSet();
setPerUser.put(serverIndex, userId, uci);
}
uci.add(conversation.id);
}
一开始我以为每一行都可以代表服务器和列用户。似乎 Table 数据结构不适合这种情况。在这种情况下,表表示的是太稀疏的数据。虽然 Table 可以表示M x N
数据,但我只有M + N
数据。
表示这些数据的正确数据结构是什么?
编辑:
当然 Table 可以处理这种情况,但我不确定它是否适合这个问题。让我想到 Table 的是具有行和列方法,这意味着复杂的算法。在我的用例中,列有一个值,这意味着每个用户只有一个对应的服务器,但每一行有多个值意味着每个服务器有多个用户。