在《nosql架構實踐》系列的前面兩篇文章中,介紹了《以nosql為主》和《以nosql為輔》的架構。由於nosql資料庫天生具有高效能、易擴充套件的特點,所以我們常常結合關聯式資料庫,儲存一些高效能的、海量的資料。從另外乙個角度看,根據nosql的高效能特點,它同樣適合用於快取資料。用nosql快取資料可以分為記憶體模式和磁碟持久化模式。
說起記憶體模式快取,我們自然就會想起大名鼎鼎的memcached。在網際網路發展過程中,memcached曾經解救了資料庫的大部分壓力,做出了巨大的貢獻,直到今天,它依然是快取伺服器的首選。memcached的常見使用方式類似下面的**:
memcached提供了相當高的讀寫效能,一般情況下,都足夠應付應用的效能要求。但是基於記憶體的memcached快取的總資料大小受限於記憶體的大小。
當前如日中天、討論得異常火熱的nosql資料庫redis又為我們提供了功能更加強大的記憶體儲存功能。跟memcached比,redis的乙個key的可以儲存多種資料結構strings、hashes、lists、sets、sorted sets。redis不但功能強大,而且它的效能完全超越大名鼎鼎的memcached。redis支援list、hashes等多種資料結構的功能,提供了更加易於使用的api和操作效能,比如對快取的list資料的修改。
同樣,其他一些nosql資料庫也提供了記憶體儲存的功能,所以也適合用來做記憶體快取。比如tokyo tyrant就提供了記憶體hash資料庫、記憶體tree資料庫功能,記憶體tree資料可根據key的順序進行遍歷。你可以通過使用其提供的相容memcached協議或自定義的協議來使用。
雖然基於記憶體的快取伺服器具有高效能,低延遲的特點,但是記憶體成本高、記憶體資料易失卻不容忽視。幾十gb記憶體的伺服器,在很多公司看來,還比較奢侈。所以,我們應該根據應用的特點,盡量的提高記憶體的利用率,降低成本。
大部分網際網路應用的特點都是資料訪問有熱點,也就是說,只有一部分資料是被頻繁訪問的。如果全部都cache到記憶體中,無疑是對記憶體的浪費。
這時,我們可以利用nosql來做資料的快取。其實nosql資料庫內部也是通過記憶體快取來提高效能的,通過一些比較好的演算法,把熱點資料進行記憶體cache,非熱點資料儲存到磁碟以節省記憶體占用。由於其資料庫結構的簡單,從磁碟獲取一次數 據也比從資料庫一次耗時的查詢划算很多。用nosql資料庫做快取伺服器不但具有不錯的效能。而且還能夠cache比記憶體大的資料。
使用nosql來做快取,由於其不受記憶體大小的限制,我們可以把一些不常訪問、不怎麼更新的資料也快取起來。比如論壇、新聞的老資料、資料列表的靠後的頁面,雖然使用者訪問不多,但是搜尋引擎爬蟲會訪問,也可能導致系統負載上公升。
如果nosql持久化快取也使用類似基於記憶體的memcached設定過期時間的方式,那麼持久化快取就失去了意義。所以用nosql做快取的過期策略最好不使用時間過期,而是資料是否被更新過,如果資料沒有更新,那麼就永久不過期。下面我們用**(php)演示一種實現這種策略的方法:
把nosql當持久化cache使用的模式,在很多大資料量、有熱點、查詢非熱點資料比較消耗資源的場景下比較有用。
到這裡,關於nosql架構實踐的三篇文章就結束了。nosql架構並不侷限於我介紹的三種模式,他們之間也可以進行組合,應該根據你具體的應用場景靈活使用。不管是什麼模式,都是為了解決我們的問題而出現的,所以在系統架構的時候,要問下自己,我為什麼要用nosql;在對nosql架構模式選型的時候,要問下自己,我為什麼要這麼用nosql。
NoSQL架構實踐(三) 以NoSQL為快取
在 nosql架構實踐 系列的前面兩篇文章中,介紹了 以nosql為主 和 以nosql為輔 的架構。由於nosql資料庫天生具有高效能 易擴充套件的特點,所以我們常常結合關聯式資料庫,儲存一些高效能的 海量的資料。從另外乙個角度看,根據nosql的高效能特點,它同樣適合用於快取資料。用nosql快...
NoSQL架構實踐(三) 以NoSQL為快取
在 nosql架構實踐 系列的前面兩篇文章中,介紹了 以nosql為主 和 以nosql為輔 的架構。由於nosql資料庫天生具有高效能 易擴充套件的特點,所以我們常常結合關聯式資料庫,儲存一些高效能的 海量的資料。從另外乙個角度看,根據nosql的高效能特點,它同樣適合用於快取資料。用nosql快...
NoSQL架構實踐(一) 以NoSQL為輔
前面 為什麼要使用nosql 和 關聯式資料庫還是nosql資料庫 兩篇從大體上介紹了為什麼要用nosql,何時該用nosql。經常有朋友遇到困惑,看到nosql的介紹,覺得很好,但是卻不知道如何正式用到自己的專案中。很大的原因就是思維固定在mysql中了,他們問得最多的問題就是用了nosql,我如...