天天看點

21.1nosql介紹,memrcached介紹,安裝memcached,檢視memcachedq狀

NoSQL(Not Only SQL)意即“不僅僅是SQL”,泛指非關系型的資料庫。随着網際網路web2.0網站的興起,傳統的關系資料庫在應付web2.0網站,特别是超大規模和高并發的SNS類型的web2.0純動态網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的資料庫則由于其本身的特點得到了非常迅速的發展。NoSQL資料庫的産生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題。與之相對應的關系型資料庫代表是:mysql、oracle、sql server等。

對于關系型資料庫來說,是需要把資料存儲到庫、表、行、字段裡,查詢的時候根據條件一行一行地去比對,當量非常大的時候就很耗費時間和資源,尤其是資料是需要從磁盤裡去檢索

NoSQL資料庫存儲原理非常簡單(典型的資料類型為k-v),不存在繁雜的關系鍊。比如像關系型資料庫mysql在查詢的時候,就得需要去找到對應的庫 >>> 表(通常是多個表) >>> 字段,經過這樣的一個過程才能查找到相應的資料。

NoSQL除了存儲原理簡單,而且NoSQL資料還可以存儲在記憶體裡,查詢速度非常快。NoSQL在性能表現上雖然能優于關系型資料庫,但是它并不能完全替代關系型資料庫,因為有些應用需要複雜的關系鍊,那麼NoSQL就無法勝任了。NoSQL因為沒有複雜的關系、資料結構,擴充非常容易,支援分布式等應用,例如最經常被應用于分布式緩存。

常見NoSQL資料庫:

k-v形式的:memcached、redis 适合儲存使用者資訊,比如會話(session)、配置檔案、參數、購物車等等。這些資訊一般都和ID(鍵)挂鈎,這種情景下鍵值資料庫是個很好的選擇。

文檔資料庫:mongodb   将資料以文檔的形式儲存。每個文檔都是一系列資料項的集合。每個資料項都有一個名稱與對應的值,值既可以是簡單的資料類型,如字元串、數字和日期等;也可以是複雜的類型,如有序清單和關聯對象。資料存儲的最小機關是文檔,同一個表中存儲的文檔屬性可以是不同的,資料可以使用XML、JSON或者JSONB等多種形式存儲。

列存儲 Hbase

圖  Neo4J、Infinite Graph、OrientDB

Memcached 是一個高性能的分布式記憶體對象緩存系統,用于動态Web應用以減輕資料庫負載。它通過在記憶體中緩存資料和對象來減少讀取資料庫的次數,進而提高動态、資料庫驅動網站的速度。Memcached基于一個存儲鍵/值對的hashmap。其守護程序(daemon )是用C寫的,但是用戶端可以用任何語言來編寫,并通過memcached協定與守護程序通信。

Memcached是國外社群網站LiveJournal團隊開發,其最新版本釋出于2010年,作者為Anatoly Vorobey和Brad Fitzpatrick。目的是為了通過緩存資料庫查詢結果,減少資料庫通路次數,進而提高動态web站點性能。官方站點 http://×××w.memcached.org/

Memcached 特點:

資料結構簡單(k-v),資料存放在記憶體裡,是以資料不是持久化存儲的,不能落地。這意味着重新開機伺服器或者重新開機Memcached服務就會丢失原來存儲的資料。是以在重新開機前需要先把資料寫到磁盤之後再重新開機才能保證資料不丢失。

多線程

基于c/s架構,協定簡單

基于libevent的事件處理

自主記憶體存儲處理(slab allowcation)

資料過期方式:Lazy Expiration 和 LRU

Memcached的資料流向:

21.1nosql介紹,memrcached介紹,安裝memcached,檢視memcachedq狀

Slab Allocation的原理:

将配置設定的記憶體分割成各種尺寸的塊(chunk), 并把尺寸相同的塊分成組(chunk的集合),每個chunk集合被稱為slab。

Memcached的記憶體配置設定以Page為機關,Page預設值為1M,可以在啟動時通過-I參數來指定。

Slab是由多個Page組成的,Page按照指定大小切割成多個chunk。

21.1nosql介紹,memrcached介紹,安裝memcached,檢視memcachedq狀

Growth factor:

Memcached在啟動時通過-f選項可以指定 Growth Factor 增長因子。該值控制 chunk 大小的差異。預設值為1.25。

通過 memcached-tool 指令檢視指定 Memcached 執行個體的不同 slab 狀态,可以看到各 Item 所占大小( chunk 大小)差距為1.25

指令:# memcached-tool 127.0.0.1:11211 display

Memcached的資料過期方式:

Lazy Expiration :

Memcached 内部不會監視記錄是否過期,而是在get時檢視記錄的時間戳,檢查記錄是否過期。這種技術被稱為lazy(惰性)expiration。是以,Memcached不會在過期監視上耗費CPU時間。

LRU:

Memcached會優先使用已逾時的記錄的空間,但即使如此,也會發生追加新記錄時空間不足的情況,此時就要使用名為Least Recently Used(LRU)機制來配置設定空間。顧名思義,這是删除“最近最少使用”的記錄的機制。是以,當記憶體空間不足時(無法從slab class擷取到新的空間時),就從最近未被使用的記錄中搜尋,并将其空間配置設定給新的記錄。從緩存的實用角度來看,該模型十分理想。

memcached可以通過yum安裝,當然也可以去官網下載下傳相應的源碼包進行編譯安裝,如果是初次接觸的話,先用最簡單的安裝方式或許會比較好一點,先來看看yum中可以安裝的memcached版本:

啟動memcached服務:

檢視程序:

-u指定運作該服務的使用者,-p指定監聽端口,-m指定配置設定給這個程序的記憶體大小,機關是m,-c指定最大并發數量

檢視端口:

有兩種方式可以更改memcached的服務參數,第一種是使用絕對路徑來啟動,然後通過選項來指定參數,例如:

第二種方式是修改配置檔案:

如果需要加上監聽的ip,可以把OPTIONS="" 改為OPTIONS="127.0.0.1" 

memcached裡有一個memcached-tool,這個工具是用來檢視memcached的狀态的,如下示例:

我們平時需要關注get_hits(命中數量)以及curr_items(存在memcached中的項目)的值,使用get_hits的值除以curr_items的值,可以計算出命中率。這是為了檢測memcached是否有緩存了資料以及是否能被正常的通路這些緩存的資料。

除了memcached-tool之外,還可以使用nc來檢視memcached的狀态,安裝指令如下:

檢視狀态的指令如下:

這和使用memcached-tool來檢視的效果基本上是差不多的。

若安裝libmemcached了,還可以使用如下指令檢視memcached服務狀态:

繼續閱讀