自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NoSQL架構(gòu)實(shí)踐(三) 以NoSQL為緩存

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)運(yùn)維
由于NoSQL數(shù)據(jù)庫(kù)天生具有高性能、易擴(kuò)展的特點(diǎn),所以我們常常結(jié)合關(guān)系數(shù)據(jù)庫(kù),存儲(chǔ)一些高性能的、海量的數(shù)據(jù)。從另外一個(gè)角度看,根據(jù)NoSQL的高性能特點(diǎn),它同樣適合用于緩存數(shù)據(jù)。用NoSQL緩存數(shù)據(jù)可以分為內(nèi)存模式和磁盤(pán)持久化模式。

在《NoSQL架構(gòu)實(shí)踐》系列的前面兩篇文章中,介紹了《以NoSQL為主》和《以NoSQL為輔》的架構(gòu)。由于NoSQL數(shù)據(jù)庫(kù)天生具有高性能、易擴(kuò)展的特點(diǎn),所以我們常常結(jié)合關(guān)系數(shù)據(jù)庫(kù),存儲(chǔ)一些高性能的、海量的數(shù)據(jù)。從另外一個(gè)角度看,根據(jù)NoSQL的高性能特點(diǎn),它同樣適合用于緩存數(shù)據(jù)。用NoSQL緩存數(shù)據(jù)可以分為內(nèi)存模式和磁盤(pán)持久化模式。

內(nèi)存模式

說(shuō)起內(nèi)存模式緩存,我們自然就會(huì)想起大名鼎鼎的Memcached。在互聯(lián)網(wǎng)發(fā)展過(guò)程中,Memcached曾經(jīng)解救了數(shù)據(jù)庫(kù)的大部分壓力,做出了巨大的貢獻(xiàn),直到今天,它依然是緩存服務(wù)器的首選。Memcached的常見(jiàn)使用方式類(lèi)似下面的代碼:

 

Memcached提供了相當(dāng)高的讀寫(xiě)性能,一般情況下,都足夠應(yīng)付應(yīng)用的性能要求。但是基于內(nèi)存的Memcached緩存的總數(shù)據(jù)大小受限于內(nèi)存的大小。

當(dāng)前如日中天、討論得異?;馃岬腘oSQL數(shù)據(jù)庫(kù)Redis又為我們提供了功能更加強(qiáng)大的內(nèi)存存儲(chǔ)功能。跟Memcached比,Redis的一個(gè)key的可以存儲(chǔ)多種數(shù)據(jù)結(jié)構(gòu)Strings、Hashes、Lists、Sets、Sorted sets。Redis不但功能強(qiáng)大,而且它的性能完全超越大名鼎鼎的Memcached。Redis支持List、hashes等多種數(shù)據(jù)結(jié)構(gòu)的功能,提供了更加易于使用的api和操作性能,比如對(duì)緩存的list數(shù)據(jù)的修改。

同樣,其他一些NoSQL數(shù)據(jù)庫(kù)也提供了內(nèi)存存儲(chǔ)的功能,所以也適合用來(lái)做內(nèi)存緩存。比如Tokyo Tyrant就提供了內(nèi)存hash數(shù)據(jù)庫(kù)、內(nèi)存tree數(shù)據(jù)庫(kù)功能,內(nèi)存tree數(shù)據(jù)可根據(jù)key的順序進(jìn)行遍歷。你可以通過(guò)使用其提供的兼容Memcached協(xié)議或自定義的協(xié)議來(lái)使用。

持久化模式

雖然基于內(nèi)存的緩存服務(wù)器具有高性能,低延遲的特點(diǎn),但是內(nèi)存成本高、內(nèi)存數(shù)據(jù)易失卻不容忽視。幾十GB內(nèi)存的服務(wù)器,在很多公司看來(lái),還比較奢侈。所以,我們應(yīng)該根據(jù)應(yīng)用的特點(diǎn),盡量的提高內(nèi)存的利用率,降低成本。

大部分互聯(lián)網(wǎng)應(yīng)用的特點(diǎn)都是數(shù)據(jù)訪問(wèn)有熱點(diǎn),也就是說(shuō),只有一部分?jǐn)?shù)據(jù)是被頻繁訪問(wèn)的。如果全部都cache到內(nèi)存中,無(wú)疑是對(duì)內(nèi)存的浪費(fèi)。

這時(shí),我們可以利用NoSQL來(lái)做數(shù)據(jù)的緩存。其實(shí)NoSQL數(shù)據(jù)庫(kù)內(nèi)部也是通過(guò)內(nèi)存緩存來(lái)提高性能的,通過(guò)一些比較好的算法,把熱點(diǎn)數(shù)據(jù)進(jìn)行內(nèi)存cache,非熱點(diǎn)數(shù)據(jù)存儲(chǔ)到磁盤(pán)以節(jié)省內(nèi)存占用。由于其數(shù)據(jù)庫(kù)結(jié)構(gòu)的簡(jiǎn)單,從磁盤(pán)獲取一次數(shù) 據(jù)也比從數(shù)據(jù)庫(kù)一次耗時(shí)的查詢劃算很多。用NoSQL數(shù)據(jù)庫(kù)做緩存服務(wù)器不但具有不錯(cuò)的性能。而且還能夠Cache比內(nèi)存大的數(shù)據(jù)。

使用NoSQL來(lái)做緩存,由于其不受內(nèi)存大小的限制,我們可以把一些不常訪問(wèn)、不怎么更新的數(shù)據(jù)也緩存起來(lái)。比如論壇、新聞的老數(shù)據(jù)、數(shù)據(jù)列表的靠后的頁(yè)面,雖然用戶訪問(wèn)不多,但是搜索引擎爬蟲(chóng)會(huì)訪問(wèn),也可能導(dǎo)致系統(tǒng)負(fù)載上升。

如果NoSQL持久化緩存也使用類(lèi)似基于內(nèi)存的memcached設(shè)置過(guò)期時(shí)間的方式,那么持久化緩存就失去了意義。所以用NoSQL做緩存的過(guò)期策略最好不使用時(shí)間過(guò)期,而是數(shù)據(jù)是否被更新過(guò),如果數(shù)據(jù)沒(méi)有更新,那么就永久不過(guò)期。下面我們用代碼(php)演示一種實(shí)現(xiàn)這種策略的方法:

場(chǎng)景:新聞?wù)军c(diǎn)的評(píng)論系統(tǒng)。用戶對(duì)新聞頁(yè)面的url進(jìn)行評(píng)論,然后根據(jù)url進(jìn)行查詢展示。

 

 

 

我把上面代碼演示的緩存使用方式稱為基于版本的緩存。這種方式同樣適用于基于內(nèi)存的Memcached。它能實(shí)現(xiàn)緩存數(shù)據(jù)的實(shí)時(shí)性,讓用戶感覺(jué)不到延遲。只要用戶一發(fā)表評(píng)論,該新聞的評(píng)論緩存就會(huì)失效。用戶很少去評(píng)論一些過(guò)時(shí)的新聞,那么緩存就一直存在于NoSQL中,避免了爬蟲(chóng)訪問(wèn)過(guò)時(shí)新聞的評(píng)論數(shù)據(jù)而沖擊數(shù)據(jù)庫(kù)。

總結(jié)

目前國(guó)內(nèi)的新浪微博已經(jīng)在大量的使用Redis緩存數(shù)據(jù),趕集網(wǎng)也在大量的使用Redis。Redis作為一些List,Hashes等數(shù)據(jù)結(jié)構(gòu)的緩存,非常適合。

把NoSQL當(dāng)持久化Cache使用的模式,在很多大數(shù)據(jù)量、有熱點(diǎn)、查詢非熱點(diǎn)數(shù)據(jù)比較消耗資源的場(chǎng)景下比較有用。

NoSQL架構(gòu)實(shí)踐總結(jié)

到這里,關(guān)于NoSQL架構(gòu)實(shí)踐的三篇文章就結(jié)束了。NoSQL架構(gòu)并不局限于我介紹的三種模式,他們之間也可以進(jìn)行組合,應(yīng)該根據(jù)你具體的應(yīng)用場(chǎng)景靈活使用。不管是什么模式,都是為了解決我們的問(wèn)題而出現(xiàn)的,所以在系統(tǒng)架構(gòu)的時(shí)候,要問(wèn)下自己,我為什么要用NoSQL;在對(duì)NoSQL架構(gòu)模式選型的時(shí)候,要問(wèn)下自己,我為什么要這么用NoSQL。

原文鏈接:http://www.cnblogs.com/sunli/archive/2011/03/31/nosql-architecture-practice_3.html

【編輯推薦】

  1. NoSQL架構(gòu)實(shí)踐(一)以NoSQL為輔
  2. NoSQL架構(gòu)實(shí)踐(二)以NoSQL為主
  3. NoSQL理論研究:內(nèi)存是新的硬盤(pán),硬盤(pán)是新的磁帶
  4. 關(guān)于NoSQL數(shù)據(jù)庫(kù)你應(yīng)該知道的10件事
責(zé)任編輯:艾婧 來(lái)源: 博客園
相關(guān)推薦

2011-03-14 14:59:01

NoSQL

2011-03-14 15:56:37

NoSQL

2022-08-21 21:28:32

數(shù)據(jù)庫(kù)實(shí)踐

2011-05-13 09:46:20

MySQLNoSQL

2012-02-16 09:20:19

NoSQL

2011-08-18 14:09:35

NoSQL

2015-02-04 13:07:39

DTCC

2011-11-29 09:49:16

數(shù)據(jù)庫(kù)其他數(shù)據(jù)庫(kù)NoSQL

2016-12-04 16:36:18

NoSQL數(shù)據(jù)庫(kù)大數(shù)據(jù)

2012-02-01 16:26:04

NoSQLMoreSQL數(shù)據(jù)庫(kù)

2011-10-20 13:37:46

OracleNoSQL數(shù)據(jù)庫(kù)

2012-05-15 10:28:29

NoSQL數(shù)據(jù)庫(kù)建模技術(shù)

2023-07-06 00:41:03

SQLNoSQL數(shù)據(jù)庫(kù)

2011-02-22 08:49:38

NoSQL

2013-09-09 09:57:04

大數(shù)據(jù)NoSQL數(shù)據(jù)庫(kù)

2012-05-15 11:03:22

NoSQL數(shù)據(jù)建模

2011-12-09 11:02:52

NoSQL

2011-05-16 09:27:10

MySQLNoSQL

2011-03-24 17:09:08

TrinityNoSQL

2024-02-02 10:51:53

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)