Ketama演算法增加虛擬節點對分布式儲存帶來的問題

2021-06-02 00:24:00 字數 1313 閱讀 1178

測試**:

public class usertest 

// if (!file.exists())

// filewriter writer = new filewriter(file.getabsolutepath(), true);

// writer.write(key + system.getproperty("line.separator"));

// writer.close();

// }

//新增乙個節點6,將1中的資料複製到6中,驗證資料是否都能找到

// for (string key : allkeys)

// }

// if (!find)

else if (node.getname().equals("node6"))

// }

system.out.println(hashalgorithm.ketama_hash.hash(hashalgorithm.ketama_hash.md5("userid-3"), 0)); }

/*** gets the mock node by the material parameter

* * @param nodecount

* the count of node wanted

* @return

* the node list

*/private listgetnodes(int nodecount)

return nodes; }

/*** all the keys

*/private listgetallstrings()

return allstrings;

}}

測試發現,不是某個節點的資料被對映到node6中,而是好幾個,如果是做資料遷移的話,麻煩就不小了。

對於快取來說,增加虛擬節點確實能帶來好處,因為他只關心命中率,對於資料一致性要求不高。但是對於儲存系統來說,就要考慮

資料遷移的問題,如果採用了虛擬節點,那麼乙個物理節點就存在多個虛擬節點。如果增加一台機器,它又會對應多個虛擬機器點。

當再次對所有節點重新分配,需要將所有新增的虛擬節點的順時針下乙個虛擬節點統計出來,然後將統計出來的對應的所有物理節點的資料

遷移到新增的物理節點上。這也是個大的工作量。

又或者是我理解錯了?當加一台物理節點時,不給他分配虛擬節點,只查詢比他大的最小的虛擬節點,然後找出該虛擬節點的物理節點,將此物理節點的資料

遷移到新物理節點上,但這是否新的物理節點有些浪費呢?有待研究

Vue 虛擬節點及diff演算法詳解

vue進入2.0以來在其內部加入了虛擬dom的實現,減少了dom的操作,極大提高了效能,同時其diff演算法的時間複雜度為o n 效能很高。首先我們來看下什麼是虛擬dom virtual dom 虛擬dom就是提通過js生成乙個dom物件,之後通過diff演算法比較之後生成patch,即補丁,之後虛...

redis虛擬機器模擬集群,節點,增加多埠命令

redis啟動多埠,執行多例項 使用redis在同一臺機器上,啟用多個埠,實現多個例項,完成集群的模擬實現。redis預設啟動埠為6379,我們可以使用 port 來指定多個埠,如下,在linux終端命令 redis server redis server port 6380 redis serve...

c 對xml多屬性節點的增加,刪除,修改操作原始碼

別人的 可以借鑑一下,先保留明天上公司摘抄一下。using system using system.collections using system.componentmodel using system.data using system.drawing using system.web usin...