Facebook的工作人員反應2010年已達到3000個memcached節點,儲存數千G的緩存。
他們發現一個問題--memcached的連接效率下降了,於是添加,memcached節點,添加完之後,並沒有好轉。
稱爲“無底洞”現象
以會員信息爲例:
‘User-133-age’ 22
‘user-133-height’ 170
‘user-89-age’ 60
‘user-89-height’ 182
當服務器增多,133號用戶的信息也被散落在更多的服務器,所以,同樣是訪問個人主頁,得到的相同的個人信息,節點越多,要連接的節點也越多,對於memcached的連接數,並沒有隨着節點的增多而降低,問題出現。
事實上:
NoSQL和傳統的RDBMS,並不是水火不容,兩者在某些設計上,是可以相互參考的。對於memcached,redis,這種kv存儲,key的設計,可以參考Mysql中表與列的設計。
比如:user表下有age列,name列,身高列,對應的key,可以用user:133:age=23,user:133:name=’lisi’,user:133:height=168;
問題的解決方案
把某一組key,按其共同前綴來分佈:
在用分佈式算法求其節點時,應該以’user-133’來計算,而不是以user-133-age/name/height來計算,這樣3個關於個人信息的key,都落在同一個節點,訪問個人主頁時,只需連接一個節點。