天天看點

非關系型資料庫NoSQL

NoSQL(not only sql)非關系型資料庫

一、關系型資料庫與非關系型資料庫對比:

常見的關系型資料庫:MySQL、Oracle、SqlServer

關系型資料庫涉及聯合查詢(join),資料量大的時候查詢會鎖表變慢

NoSQL資料之間無關系,可以随意擴充

NoSQL資料存儲簡單,而且可以存在記憶體中,是以讀寫速度非常快,即使資料量很大也很快

NoSQL不需要建立表、字段等資料,他可以随時存儲自定義的格式,而關系型資料庫增、改字段非常麻煩,尤其是資料量非常大的情況下,就更麻煩

二、常見的NoSQL有哪幾種?

鍵值(Key-Value)資料庫 産品:redis、memcached、riak,redis/memcached 屬于鍵值(Key-Value)資料庫,适合存儲使用者資訊,比如會話、配置檔案、參數、購物車等等,這些資訊一般都和ID(鍵)挂鈎,這種情況下,鍵值資料庫是個很好的選擇

三台web,使用者登入時候任何一台,登入資訊儲存在redis或者memcached中,再次登入web2,不需要驗證登入,完成session保持

面向文檔(Document-Oriented)資料庫,産品:MongoDB、CouchDB、RavenDB

MongoDB屬于文檔(Document-Oriented)資料庫,将資料以文檔的方式存儲,每個文檔都是一系列資料庫的集合。每個資料項都有一個名稱與對應的值,值既可以是建檔的資料類型,如字元串,數字和日期等;也可以是複雜的類型,如有序的表和關聯對象。資料存儲的最小機關是文檔。

列存儲(wide column store/Column-Family)資料庫 産品:Cassandra\Hbase

圖(Graph-Oriented)資料庫 産品:Neo4J、Infinite Graph、OrientDB

三、memcached介紹

memcached是通過緩存資料庫查詢結果,減少資料庫通路次數,進而提高動态web站點性能,官方站點http://memcached.org/

基于C/S(服務端用戶端)架構,協定簡單

基于libevent架構的事件處理

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

資料過期方式:lazy Expiration 和 LRU

memcached資料流向

非關系型資料庫NoSQL

Slab Allocation的原理——将配置設定的記憶體分割成各個尺寸的快(chunk),并把尺寸相同的快分成組(chunk的集合),每個chunk的集合被稱為Slab

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

Slab是由多個Page組成的,Page按照指定大小切割成多個chunk,其機構如下圖:

大小關系可以這樣了解: slab>page>chunk

非關系型資料庫NoSQL

Memcached資料過期方式

Lazy Expiration

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