[network] memcached

memcached

狠常聽到的一個玩意,從 wiki  得知它是一使用32bit的循環冗餘檢察(CRC-32)計算key-value,並將資料分散在各台主機上的一個分散式系統。這樣講有看沒懂...
僅知道
 1. in-memory
 2. key-value

google查了後覺得較滿意的解釋是 當client端連到遠端server時, 若該server架有memcached service, 則在連上memcached後, memcached會給予它一個key, 用來map到它所需要存取的objects. 而這些objects其實是存在後端數台主機裡頭, clients借由key可以馬上知道object在哪裡!
(唉  還是要白話點我才看得懂Orz...)
更白點就是在memory存一張巨大的hashtable, client藉由將key做hash就可以得知它需要的data存在哪台主機。

不過wiki上的範例真是簡潔扼要 = =


function get_foo (int userid) {
result = db_select("SELECT * FROM users WHERE userid = ?", userid);
return result;
}
加上memcached的快取機制後:
function get_foo (int userid) {
result = memcached_fetch("userrow:" + userid);
if (!result) {
result = db_select("SELECT * FROM users WHERE userid = ?", userid);
memcached_add("userrow:" + userid, result);
}
return result;
}



剩下的隨機記錄一下
1) Opensource, 是BSD license
2) 由於安全性較差,通常掛在防火牆內
3) wikipedia, LiveJournal, Digg, Youtube, Facebook 都有使用此技術
4) 再更新的時候, 為了解決cache coherence問題,所以都是同時更新database跟table.
5) 使用LRU演算法(記得有最簡單的STACK跟COUNTER法, 還有依些改善的方法, 但是忘了xD)


= = 本來想說一點就要睡覺的, 怎看一下就到一點半了Orz...

Comments

Popular posts from this blog

股票評價(Stock Valuation) - 股利折現模型

openwrt feed的使用

How to convert Markdown into HTML