Twitter 的資料庫架構是 MemCache 為內存資料庫,MySQL 作為持久存儲,怎麼連接的?
01-09
這個屬於基礎知識了.如果需要查詢數據,首先查詢memcached是否已經緩存了數據,如果緩存了,就從memcached獲取值返回而不是查詢資料庫,如果返回一個undifined object,那麼就去查詢資料庫,得到結果,然後保存在memcached里(不要忘記了這一步驟).如果更新了數據,那麼就從cache里刪除數據.
參考: http://www.db110.com/?p=1799
@Gary Chen 說的是對的,不過我想再引申一下這種用法我現在的德國公司,用了一種看起來很先進,其實很坑爹的架構memcache作為client的查詢,而且只供查詢,即client都先要拿到一些id才能從memcache取到數據,同時,client是不會也不能直接跟db聯繫的。
那麼client取到一些需要的id這個操作,是通過solr來取到的。而solr的更新是通過資料庫硬更新來取得的,就是說,每一分鐘,都有一個cronjob在更新數據從db 到 solr。
我當時看完這個架構,除了覺得不錯之外,隱隱有一絲不安,這樣硬更新,其實是非常坑爹的。我現在正在修復這個架構的漏洞。不過在不能改變系統底層架構的前提下,我表示很坑爹。特別是同時有20+的人在操作server去批量更新數據的時候。比如php伺服器先從memcache中嘗試查找數據,如果命中則返回,不命中則從mysql中查找然後推送到memcache中,同時返回,下次再找就命中了。
至於怎麼連接的,硬體上都是一堆伺服器通過乙太網連接的。如果用比較簡單原始的架構,就是在應用層面去判斷,如果cache中沒有,就去取db,再將數據寫入cache......如果想比較靈活,減少代碼量,可以用job任務在後台跑,通過mysql udf實現同步。
推薦閱讀:
※如何註冊推特?
※推特大陸手機註冊不了,怎麼辦啊,就算郵箱註冊了之後,進去裡面還是要求綁定手機!!?
※Twitter市值是微博6倍,這是為什麼?
※Twitter莫名其妙被凍結提示需要手機號該怎麼辦?