我們已將分區數據庫和每個用戶的數據存儲在特定服務器上。番石榴表替代
我的使用情況是相當簡單:
- 用戶有交談。
- 對於一個對話,數據庫中有兩個代表記錄(每個用戶都有自己的對話記錄)。
如果用戶刪除操作,我想刪除每個用戶之間的所有對話。也就是說,我需要刪除每個服務器中與用戶相關的所有對話。我非常需要每個服務器的分組數據。
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可以代表M x N
的數據,但我只有M + N
的數據。
什麼是正確的數據結構來表示這些數據?
編輯:
當然表可以處理這種情況,但我不知道它是否是恰當與否這個問題。讓我考慮一下Table的問題是有行列方法,這意味着一個複雜的算法。在我的用例中,列有一個值,這意味着每個用戶只有一個對應的服務器,但每行有多個值意味着每個服務器都有多個用戶。
你爲什麼認爲'Table'無法處理它?有多種實現方式,例如'HashBasedTable'適用於稀疏表。有一些開銷,你可以通過手工執行來消除,但它值得嗎? – maaartinus
@maaartinus編輯。你能擴大消除手工製造費用嗎?它真的會幫助我。謝謝 – Cemo
看看肖恩帕特里克弗洛伊德的答案,這是關於我會做什麼。但是,我不明白你爲什麼要在你的數據結構中使用服務器? – maaartinus