十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
一、NOSQL介紹
目前創(chuàng)新互聯(lián)已為超過(guò)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、吉林網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
非關(guān)系型數(shù)據(jù)庫(kù)(而MySQL、oracle、sqlserver都是關(guān)系型數(shù)據(jù)庫(kù))
1. 特點(diǎn)
數(shù)據(jù)之間無(wú)關(guān)系,隨意擴(kuò)展
數(shù)據(jù)存儲(chǔ)簡(jiǎn)單,可以存在內(nèi)存中,讀寫(xiě)速度快
不需要建表、字段。自定義格式
2. 分類(lèi)
A. 鍵值(Key-Value)數(shù)據(jù)庫(kù):redis、memcached、riak
redis/memcached 適合存儲(chǔ)用戶(hù)信息,比如會(huì)話、配置文件、參數(shù)、購(gòu)物車(chē)等,這些信息一般和ID(鍵)掛鉤
B. 面向文檔(Document-Oriented)數(shù)據(jù)庫(kù):MongoDB、CouchDB、RavenDB
MongoDB將數(shù)據(jù)以文檔形式存儲(chǔ),每個(gè)文檔都是一系列數(shù)據(jù)項(xiàng)的集合,每個(gè)數(shù)據(jù)項(xiàng)都有一個(gè)名稱(chēng)與對(duì)應(yīng)的值,值既可以是簡(jiǎn)單的數(shù)據(jù)類(lèi)型,如文字、字符串、數(shù)字和日期等,也可以是復(fù)雜的類(lèi)型,如有序列表和關(guān)聯(lián)對(duì)象。數(shù)據(jù)存儲(chǔ)的最小單位是文檔,同一個(gè)表中存儲(chǔ)的文檔屬性可以是不同的,數(shù)據(jù)可以使用XML、JSON或JSONB等多種形式
C. 列存儲(chǔ)(Wide Column Store/Column-Family)數(shù)據(jù)庫(kù):Cassandra、HBase
D. 圖(Graph-Oriented)數(shù)據(jù)庫(kù):Neo4J、Infinite Graph、OrientDB
二、Memcached介紹
國(guó)外Live Journal團(tuán)隊(duì)開(kāi)發(fā),通過(guò)緩存數(shù)據(jù)庫(kù)查詢(xún)結(jié)果,減少數(shù)據(jù)庫(kù)的訪問(wèn)次數(shù)(寫(xiě)入減少不了),從而提高動(dòng)態(tài)Web站點(diǎn)性能。數(shù)據(jù)存在內(nèi)存中,重啟服務(wù)器即數(shù)據(jù)消失
1. 特點(diǎn)
基于c/s架構(gòu),協(xié)議簡(jiǎn)單
基于libevent的事件處理
自主內(nèi)存存儲(chǔ)處理(slab allocation)
數(shù)據(jù)過(guò)期方式:Lazv Expiration和LRU
2. Memcationed流程圖
3.Slab allocation原理
將分配的內(nèi)存分割成各種尺寸的塊(chunk),把尺寸相同的分成組,即chunk的集合,每個(gè)集合稱(chēng)為slab
Memcached的內(nèi)存分配以Page為單位,Page默認(rèn)值為1M,可以在啟動(dòng)時(shí)通過(guò)參數(shù)-l來(lái)指定
Slab由多個(gè)Page組成
一個(gè)Chunk最大不能超過(guò)1M,即一個(gè)Page
一個(gè)Slab可能有多個(gè)Page
原理圖:
4. Growth factor
Memcached在啟動(dòng)時(shí)可以通過(guò)-f參數(shù)可以指定Growth Factor因子(即Chunk之間的的增長(zhǎng)比例),默認(rèn)為1.25,通過(guò)memcached-tool 可以查看指定的memcached實(shí)際的不同slab狀態(tài)
命令:memcached-tool 127.0.0.1:11211 display
5. Memcached數(shù)據(jù)過(guò)期方式
Lazy Expiration:memcached內(nèi)部不會(huì)監(jiān)視是否過(guò)期,而是get時(shí)查看記錄的時(shí)間戳,檢查記錄是否過(guò)期。這種技術(shù)稱(chēng)為lazy expiration。優(yōu)點(diǎn):memcached不會(huì)在過(guò)期監(jiān)視上耗費(fèi)CPU時(shí)間
LRU:memcached優(yōu)先使用已超時(shí)的記錄空間,會(huì)發(fā)生追加新記錄空間不足的情況。從最近未被使用的記錄中搜索,并將其空間分配給新的記錄(即刪除最近使用最少的記錄的機(jī)制)。從緩存的使用角度看,該模型很理想
三、Redis介紹
屬于key-value存儲(chǔ)系統(tǒng),和memcached相似,但是支持?jǐn)?shù)據(jù)持久化(重啟服務(wù)器,數(shù)據(jù)還是存在)
A. value類(lèi)型:
string、hash、lists(鏈表)、sets(集合)、sorted sets(有序集合)
B. 文件格式:
RDB(全量數(shù)據(jù))把內(nèi)存中的數(shù)據(jù)寫(xiě)入磁盤(pán),下次讀取文件時(shí),進(jìn)行加載
aof(增量請(qǐng)求)內(nèi)存中的數(shù)據(jù)有序化為操作請(qǐng)求,用于讀取文件進(jìn)行replay得到數(shù)據(jù),相當(dāng)于mysql的二進(jìn)制日志
C. 存儲(chǔ)方式:
內(nèi)存存儲(chǔ)、磁盤(pán)存儲(chǔ)、log文件
四、MongoDB介紹
由C++語(yǔ)言編寫(xiě),是一套基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng),屬于NoSQL
高負(fù)載的情況下,可以添加更多的節(jié)點(diǎn),保證服務(wù)器性能
旨在為Web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案
數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值對(duì)(key=>value)組成,文檔類(lèi)型于JSON對(duì)象。字段值可以包含其它文檔,數(shù)組及文檔數(shù)組
和關(guān)系型數(shù)據(jù)庫(kù)對(duì)比:
SQL | 說(shuō)明 | MongoDB | 說(shuō)明 |
database | 數(shù)據(jù)庫(kù) | database | 數(shù)據(jù)庫(kù) |
table | 表 | collection | 集合 |
row | 記錄行 | document | 文檔 |
column | 字段 | field | 域 |
index | 索引 | index | 索引 |
table joins | 表連接 | ||
primary key | 主鍵 | primary | 自動(dòng)將_id字段設(shè)置為主鍵 |