MongoDB
1. MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫娶靡。由 C++ 語言編寫楷拳。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案该酗。
?2. MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品栅螟,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富庄撮,最像關(guān)系數(shù)據(jù)庫的。
什么是MongoDB ?
1.? MongoDB 是由C++語言編寫的戳粒,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫系統(tǒng)路狮。
2.? 在高負(fù)載的情況下,添加更多的節(jié)點(diǎn)蔚约,可以保證服務(wù)器性能奄妨。
3.? MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
4.? MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔苹祟,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成砸抛。MongoDB 文檔類似于
MongoDB下載安裝
你可以在mongodb官網(wǎng)下載該安裝包评雌,地址為:https://www.mongodb.com/download-center#community。MonggoDB支持以下平臺(tái):
OS X 32-bit
OS X 64-bit
Linux 32-bit
Linux 64-bit
Windows 32-bit
Windows 64-bit
Solaris i86pc
Solaris 64
windows平臺(tái)安裝
下載地址:https://www.mongodb.com/download-center#community
根據(jù)你的系統(tǒng)下載 32 位或 64 位的 .msi 文件直焙,下載后雙擊該文件景东,按操作提示安裝即可。
安裝過程中奔誓,你可以通過點(diǎn)擊 "Custom(自定義)" 按鈕來設(shè)置你的安裝目錄
創(chuàng)建數(shù)據(jù)目錄
MongoDB將數(shù)據(jù)目錄存儲(chǔ)在 db 目錄下耐薯。但是這個(gè)數(shù)據(jù)目錄不會(huì)主動(dòng)創(chuàng)建,我們?cè)诎惭b完成后需要?jiǎng)?chuàng)建它丝里。請(qǐng)注意,數(shù)據(jù)目錄應(yīng)該放在根目錄下((如: C:\ 或者 D:\ 等 )体谒。
在本教程中杯聚,我們已經(jīng)在 C 盤安裝了 mongodb,現(xiàn)在讓我們創(chuàng)建一個(gè) data 的目錄然后在 data 目錄里創(chuàng)建 db 目錄抒痒。
命令行下運(yùn)行 MongoDB 服務(wù)器
為了從命令提示符下運(yùn)行 MongoDB 服務(wù)器幌绍,你必須從 MongoDB 目錄的 bin 目錄中執(zhí)行 mongod.exe 文件。
C:\mongodb\bin\mongod --dbpath c:\data\db
配置系統(tǒng)環(huán)境變量
找到 mongodb的安裝目錄故响,把bin目錄配置到環(huán)境變量里
啟動(dòng)mongodb 服務(wù)
在命令行 執(zhí)行 mongod
連接mongodb
再開啟一個(gè)窗口傀广,執(zhí)行 monggo
連接MongoDB
我們可以在命令窗口中運(yùn)行 mongo.exe 命令即可連接上 MongoDB,執(zhí)行如下命令:
C:\mongodb\bin\mongo.exe
配置系統(tǒng)環(huán)境變量
找到 mongodb的安裝目錄彩届,把bin目錄配置到環(huán)境變量里
啟動(dòng)mongodb 服務(wù)
在命令行 執(zhí)行 mongod
連接mongodb
再開啟一個(gè)窗口伪冰,執(zhí)行 monggo
MongoDB?概念解析
數(shù)據(jù)庫
"show dbs"?命令可以顯示所有數(shù)據(jù)的列表
執(zhí)行?"db"?命令可以顯示當(dāng)前數(shù)據(jù)庫對(duì)象或集合
運(yùn)行”use”命令,可以連接到一個(gè)指定的數(shù)據(jù)庫樟蠕。
數(shù)據(jù)庫也通過名字來標(biāo)識(shí)贮聂。數(shù)據(jù)庫名可以是滿足以下條件的任意UTF-8字符串。
不能是空字符串("")寨辩。
不得含有' '(空格)吓懈、.、$靡狞、/耻警、\和\0 (空字符)。
應(yīng)全部小寫甸怕。
最多64字節(jié)甘穿。
有一些數(shù)據(jù)庫名是保留的,可以直接訪問這些有特殊作用的數(shù)據(jù)庫梢杭。
admin: 從權(quán)限的角度來看扒磁,這是"root"數(shù)據(jù)庫。要是將一個(gè)用戶添加到這個(gè)數(shù)據(jù)庫式曲,這個(gè)用戶自動(dòng)繼承所有數(shù)據(jù)庫的權(quán)限妨托。一些特定的服務(wù)器端命令也只能從這個(gè)數(shù)據(jù)庫運(yùn)行缸榛,比如列出所有的數(shù)據(jù)庫或者關(guān)閉服務(wù)器。
local:?這個(gè)數(shù)據(jù)永遠(yuǎn)不會(huì)被復(fù)制兰伤,可以用來存儲(chǔ)限于本地單臺(tái)服務(wù)器的任意集合
config: 當(dāng)Mongo用于分片設(shè)置時(shí)内颗,config數(shù)據(jù)庫在內(nèi)部使用,用于保存分片的相關(guān)信息敦腔。
集合
1均澳、集合就是 MongoDB 文檔組,類似于 RDBMS (關(guān)系數(shù)據(jù)庫管理系統(tǒng):Relational Database Management System)中的表格符衔。
2找前、集合存在于數(shù)據(jù)庫中,集合沒有固定的結(jié)構(gòu)判族,這意味著你在對(duì)集合可以插入不同格式和類型的數(shù)據(jù)躺盛,但通常情況下我們插入集合的數(shù)據(jù)都會(huì)有一定的關(guān)聯(lián)性。
合法的集合名
1形帮、集合名不能是空字符串""槽惫。
2、集合名不能含有\(zhòng)0字符(空字符)辩撑,這個(gè)字符表示集合名的結(jié)尾界斜。
3、集合名不能以"system."開頭合冀,這是為系統(tǒng)集合保留的前綴各薇。
4、用戶創(chuàng)建的集合名字不能含有保留字符君躺。有些驅(qū)動(dòng)程序的確支持在集合名里面包含得糜,這是因?yàn)槟承┫到y(tǒng)生成的集合中包含該字符。除非你 要訪問這種系統(tǒng)創(chuàng)建的集合晰洒,否則千萬不要在名字里出現(xiàn)$朝抖。
文檔
文檔是一組鍵值(key-value)對(duì)(即BSON)。MongoDB 的文檔不需要設(shè)置相同的字段谍珊,并且相同的字段不需要相同的數(shù)據(jù)類型治宣,這與關(guān)系型數(shù)據(jù)庫有很大的區(qū)別,也是 MongoDB 非常突出的特點(diǎn)
需要注意的是:
1砌滞、 文檔中的鍵/值對(duì)是有序的侮邀。
2、文檔中的值不僅可以是在雙引號(hào)里面的字符串贝润,還可以是其他幾種數(shù)據(jù)類型(甚至可以是整個(gè)嵌入的文檔)绊茧。
3、 MongoDB區(qū)分類型和大小寫打掘。
.4华畏、MongoDB的文檔不能有重復(fù)的鍵鹏秋。
.5、文檔的鍵是字符串亡笑。除了少數(shù)例外情況侣夷,鍵可以使用任意UTF-8字符。
文檔鍵命名規(guī)范:
1仑乌、鍵不能含有\(zhòng)0 (空字符)百拓。這個(gè)字符用來表示鍵的結(jié)尾。
2晰甚、和$有特別的意義衙传,只有在特定環(huán)境下才能使用。
3厕九、以下劃線"_"開頭的鍵是保留的(不是嚴(yán)格要求的)蓖捶。
MongoDB 數(shù)據(jù)類型
MongoDB - 連接
mongodb://?這是固定的格式,必須要指定止剖。
username:password@?可選項(xiàng),如果設(shè)置落君,在連接數(shù)據(jù)庫服務(wù)器之后穿香,驅(qū)動(dòng)都會(huì)嘗試登陸這個(gè)數(shù)據(jù)庫
host1?必須的指定至少一個(gè)host, host1 是這個(gè)URI唯一要填寫的。它指定了要連接服務(wù)器的地址绎速。如果要連接復(fù)制集皮获,請(qǐng)指定多個(gè)主機(jī)地址。
portX?可選的指定端口纹冤,如果不填洒宝,默認(rèn)為27017
/database?如果指定username:password@,連接并驗(yàn)證登陸指定數(shù)據(jù)庫萌京。若不指定雁歌,默認(rèn)打開 test 數(shù)據(jù)庫。
?options?是連接選項(xiàng)知残。如果不使用/database靠瞎,則前面需要加上/。所有連接選項(xiàng)都是鍵值對(duì)name=value求妹,鍵值對(duì)之間通過&或;(分號(hào))隔開
例如:
使用默認(rèn)端口來連接 MongoDB 的服務(wù)乏盐。
mongodb://localhost? ?
使用用戶 admin 使用密碼 123456 連接到本地的 MongoDB 服務(wù)上
mongodb://admin:123456@localhost/
使用用戶名和密碼連接登陸到指定數(shù)據(jù)庫,格式如下:
mongodb://admin:123456@localhost/test
MongoDB 創(chuàng)建數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫 use DATABASE_NAME 如果數(shù)據(jù)庫不存在制恍,則創(chuàng)建數(shù)據(jù)庫父能,否則切換到指定數(shù)據(jù)庫
例如: use user
查看數(shù)據(jù)庫 ?show dbs
剛創(chuàng)建的數(shù)據(jù)庫看不到,是因?yàn)閿?shù)據(jù)庫中沒有數(shù)據(jù)净神,插入一條數(shù)據(jù)
db.user.insert({“name”:”zhangsan”})
MongoDB 刪除數(shù)據(jù)庫
刪除數(shù)據(jù)庫
db.dropDatabase()
刪除當(dāng)前數(shù)據(jù)庫
刪除集合
db.collection.drop()
MongoDB 插入文檔
MongoDB 使用 insert() 或 save() 方法向集合中插入文檔何吝,語法如下:
db.COLLECTION_NAME.insert(document)
例如:
db.user.insert({name:”hanmeimei”})
查看插入的文檔:
db.user.find()
還可以
document=({name:’ddddd'})
db.col.insert(document)
MongoDB 更新文檔
update() 方法用于更新已存在的文檔溉委。語法格式如下:db.collection.update(,, { upsert:, multi:, writeConcern: }
)
參數(shù)說明:
1、query?: update的查詢條件岔霸,類似sql update查詢內(nèi)where后面的薛躬。
2、update?: update的對(duì)象和一些更新的操作符(如$,$inc...)等呆细,也可以理解為sql update查詢內(nèi)set后面的
3型宝、upsert?: 可選,這個(gè)參數(shù)的意思是絮爷,如果不存在update的記錄趴酣,是否插入objNew,true為插入,默認(rèn)是false坑夯,不插入岖寞。
4、multi?: 可選柜蜈,mongodb 默認(rèn)是false,只更新找到的第一條記錄仗谆,如果這個(gè)參數(shù)為true,就把按條件查出來多條記錄全部更新。
5淑履、writeConcern?:可選隶垮,拋出異常的級(jí)別。
MongoDB 查詢文檔
語法
MongoDB 查詢數(shù)據(jù)的語法格式如下:
db.collection.find(query, projection)
query?:可選秘噪,使用查詢操作符指定查詢條件
projection?:可選狸吞,使用投影操作符指定返回的鍵。查詢時(shí)返回文檔中所有鍵值指煎, 只需省略該參數(shù)即可(默認(rèn)省略)蹋偏。
如果你需要以易讀的方式來讀取數(shù)據(jù),可以使用 pretty() 方法至壤,語法格式如下:
db.user.find().pretty()
db.user.findOne() 只返回一個(gè)文檔
MongoDB 與 RDBMS Where 語句比較
MongoDB?$type?操作符
$type操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型威始,并返回結(jié)果。
????????????????????????????????????????Nodejs + MongoDb
Mongoose是NodeJS的驅(qū)動(dòng)像街,不能作為其他語言的驅(qū)動(dòng)字逗。Mongoose有兩個(gè)特點(diǎn)
1、通過關(guān)系型數(shù)據(jù)庫的思想來設(shè)計(jì)非關(guān)系型數(shù)據(jù)庫
2宅广、基于mongodb驅(qū)動(dòng)葫掉,簡(jiǎn)化操作
Mongooose中,有三個(gè)比較重要的概念跟狱,分別是Schema俭厚、Model、Document驶臊。它們的關(guān)系是:Schema生成Model挪挤,Model創(chuàng)造Document叼丑,Model和Document都可對(duì)數(shù)據(jù)庫操作造成影響,但Model比Document更具操作性
Schema用于定義數(shù)據(jù)庫的結(jié)構(gòu)扛门。類似創(chuàng)建表時(shí)的數(shù)據(jù)定義(不僅僅可以定義文檔的結(jié)構(gòu)和屬性鸠信,還可以定義文檔的實(shí)例方法、靜態(tài)模型方法论寨、復(fù)合索引等)星立,每個(gè)Schema會(huì)映射到mongodb中的一個(gè)collection,Schema不具備操作數(shù)據(jù)庫的能力
Model是由Schema編譯而成的構(gòu)造器葬凳,具有抽象屬性和行為绰垂,可以對(duì)數(shù)據(jù)庫進(jìn)行增刪查改。Model的每一個(gè)實(shí)例(instance)就是一個(gè)文檔document
Document是由Model創(chuàng)建的實(shí)體火焰,它的操作也會(huì)影響數(shù)據(jù)庫
Mongoose安裝:
安裝nodejs和mongodb之后 劲装,使用npm來安裝mongoose
npm install mongoose
安裝成功后,就可以通過?require('mongoose') 來使用
連接數(shù)據(jù)庫
使用require()方法在項(xiàng)目中包含mongoose后昌简,接下來使用connect()方法連接到MongoDB數(shù)據(jù)庫
【connect()】
mongoose.connect(url);
connect()最簡(jiǎn)單的使用方式占业,就是只要傳入url參數(shù)即可,如下所示纯赎。連接到本地localhost的db1服務(wù)器
mongoose.connect('mongodb://localhost/db1');
如果還需要傳遞用戶名谦疾、密碼,則可以使用如下方式
mongoose.connect('mongodb://username:password@host:port/database?options...');
Robomongo
Robomongo 最新版本叫做Robo 3T址否,是一個(gè)可視化的MongoDb
的管理工具餐蔬,類似我們之前用過的Navicat碎紊,不過那個(gè)是用來操作Mysql這種關(guān)系型數(shù)據(jù)庫的佑附。
下載地址:https://robomongo.org/download
關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則
事務(wù)在英文中是transaction,和現(xiàn)實(shí)世界中的交易很類似仗考,它有如下四個(gè)特性:
1音同、A (Atomicity) 原子性
原子性很容易理解,也就是說事務(wù)里的所有操作要么全部做完秃嗜,要么都不做权均,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失敗锅锨,整個(gè)事務(wù)就失敗叽赊,需要回滾。
比如銀行轉(zhuǎn)賬必搞,從A賬戶轉(zhuǎn)100元至B賬戶必指,分為兩個(gè)步驟:1)從A賬戶取100元;2)存入100元至B賬戶恕洲。這兩步要么一起完成塔橡,要么一起不完成梅割,如果只完成第一步,第二步失敗葛家,錢會(huì)莫名其妙少了100元户辞。
2、C (Consistency) 一致性
一致性也比較容易理解癞谒,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài)底燎,事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫原本的一致性約束。
例如現(xiàn)有完整性約束a+b=10扯俱,如果一個(gè)事務(wù)改變了a书蚪,那么必須得改變b,使得事務(wù)結(jié)束后依然滿足a+b=10迅栅,否則事務(wù)失敗殊校。
3、I (Isolation) 獨(dú)立性
所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響读存,如果一個(gè)事務(wù)要訪問的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改为流,只要另外一個(gè)事務(wù)未提交,它所訪問的數(shù)據(jù)就不受未提交事務(wù)的影響让簿。
比如現(xiàn)在有個(gè)交易是從A賬戶轉(zhuǎn)100元至B賬戶敬察,在這個(gè)交易還未完成的情況下,如果此時(shí)B查詢自己的賬戶尔当,是看不到新增加的100元的莲祸。
4、D (Durability) 持久性
持久性是指一旦事務(wù)提交后椭迎,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫上锐帜,即使出現(xiàn)宕機(jī)也不會(huì)丟失。
分布式系統(tǒng)
1. 分布式系統(tǒng)(distributed system)由多臺(tái)計(jì)算機(jī)和通信的軟件組件通過計(jì)算機(jī)網(wǎng)絡(luò)連接(本地網(wǎng)絡(luò)或廣域網(wǎng))組成畜号。
2. 分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)缴阎。正是因?yàn)檐浖奶匦裕苑植际较到y(tǒng)具有高度的內(nèi)聚性和透明性简软。
3. 因此蛮拔,網(wǎng)絡(luò)和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操作系統(tǒng)),而不是硬件痹升。
4. 分布式系統(tǒng)可以應(yīng)用在不同的平臺(tái)上如:Pc建炫、工作站、局域網(wǎng)和廣域網(wǎng)上等疼蛾。
分布式計(jì)算的優(yōu)點(diǎn)
可靠性(容錯(cuò)) :
分布式計(jì)算系統(tǒng)中的一個(gè)重要的優(yōu)點(diǎn)是可靠性肛跌。一臺(tái)服務(wù)器的系統(tǒng)崩潰并不影響到其余的服務(wù)器。
可擴(kuò)展性:
在分布式計(jì)算系統(tǒng)可以根據(jù)需要增加更多的機(jī)器。
資源共享:
共享數(shù)據(jù)是必不可少的應(yīng)用惋砂,如銀行妒挎,預(yù)訂系統(tǒng)。
靈活性:
由于該系統(tǒng)是非常靈活的西饵,它很容易安裝酝掩,實(shí)施和調(diào)試新的服務(wù)。
更快的速度:
分布式計(jì)算系統(tǒng)可以有多臺(tái)計(jì)算機(jī)的計(jì)算能力眷柔,使得它比其他系統(tǒng)有更快的處理速度期虾。
開放系統(tǒng):
由于它是開放的系統(tǒng),本地或者遠(yuǎn)程都可以訪問到該服務(wù)驯嘱。
更高的性能:
相較于集中式計(jì)算機(jī)網(wǎng)絡(luò)集群可以提供更高的性能(及更好的性價(jià)比)镶苞。
分布式計(jì)算的缺點(diǎn)
故障排除:
故障排除和診斷問題。
軟件:
更少的軟件支持是分布式計(jì)算系統(tǒng)的主要缺點(diǎn)鞠评。
網(wǎng)絡(luò):
網(wǎng)絡(luò)基礎(chǔ)設(shè)施的問題茂蚓,包括:傳輸問題,高負(fù)載剃幌,信息丟失等聋涨。
安全性:
開放系統(tǒng)的特性讓分布式計(jì)算系統(tǒng)存在著數(shù)據(jù)的安全性和共享的風(fēng)險(xiǎn)等問題。
?NoSQL
1. NoSQL(NoSQL = Not Only SQL )负乡,意即"不僅僅是SQL"牍白。
2. 在現(xiàn)代的計(jì)算系統(tǒng)上每天網(wǎng)絡(luò)上都會(huì)產(chǎn)生龐大的數(shù)據(jù)量。
3. 這些數(shù)據(jù)有很大一部分是由關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)來處理抖棘。 1970年 E.F.Codd's提出的關(guān)系模型的論文 "A relational model of? ? ? ? ? ? data? ?for large shared data banks"茂腥,這使得數(shù)據(jù)建模和應(yīng)用程序編程更加簡(jiǎn)單。
4. 通過應(yīng)用實(shí)踐證明切省,關(guān)系模型是非常適合于客戶服務(wù)器編程最岗,遠(yuǎn)遠(yuǎn)超出預(yù)期的利益,今天它是結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)和商務(wù)應(yīng)用的主導(dǎo)技? ? ? ? 術(shù)数尿。
5. NoSQL 是一項(xiàng)全新的數(shù)據(jù)庫革命性運(yùn)動(dòng)仑性,早期就有人提出惶楼,發(fā)展至2009年趨勢(shì)越發(fā)高漲右蹦。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存? ? ? ? ?儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用歼捐,這一概念無疑是一種全新的思維的注入何陆。
什么是NoSQL?
1. NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫豹储。NoSQL有時(shí)也稱作Not Only SQL的縮寫贷盲,是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。
2. NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))巩剖。
為什么使用NoSQL ?
今天我們可以通過第三方平臺(tái)(如:Google,Facebook等)可以很容易的訪問和抓取數(shù)據(jù)铝穷。用戶的個(gè)人信息,社交網(wǎng)絡(luò)佳魔,地理位置曙聂,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)成倍的增加。我們?nèi)绻獙?duì)這些用戶數(shù)據(jù)進(jìn)行挖掘鞠鲜,那SQL數(shù)據(jù)庫已經(jīng)不適合這些應(yīng)用了, NoSQL數(shù)據(jù)庫的發(fā)展也卻能很好的處理這些大的數(shù)據(jù)宁脊。
NoSQL 簡(jiǎn)史
1. NoSQL一詞最早出現(xiàn)于1998年,是Carlo Strozzi開發(fā)的一個(gè)輕量贤姆、開源榆苞、不提供SQL功能的關(guān)系數(shù)據(jù)庫。
2. 2009年霞捡,Last.fm的Johan Oskarsson發(fā)起了一次關(guān)于分布式開源數(shù)據(jù)庫的討論[2]坐漏,來自Rackspace的Eric Evans再次提出了NoSQL的概? ? ? ? ? 念,這時(shí)的NoSQL主要指非關(guān)系型碧信、分布式仙畦、不提供ACID的數(shù)據(jù)庫設(shè)計(jì)模式。
3. 2009年在亞特蘭大舉行的"no:sql(east)"討論會(huì)是一個(gè)里程碑音婶,其口號(hào)是"select fun, profit from real_world where relational=false;"慨畸。因此,? ? ? ? 對(duì)NoSQL最普遍的解釋是"非關(guān)聯(lián)型的"衣式,強(qiáng)調(diào)Key-Value Stores和文檔數(shù)據(jù)庫的優(yōu)點(diǎn)寸士,而不是單純的反對(duì)RDBMS。
RDBMS vs NoSQL
RDBMS?
- 高度組織化結(jié)構(gòu)化數(shù)據(jù)?
- 結(jié)構(gòu)化查詢語言(SQL) (SQL)
?- 數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中碴卧。?
- 數(shù)據(jù)操縱語言弱卡,數(shù)據(jù)定義語言?
- 嚴(yán)格的一致性
- 基礎(chǔ)事務(wù)
NoSQL?
- 代表著不僅僅是SQL
- 沒有聲明性查詢語言
- 沒有預(yù)定義的模式
-鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ)住册,文檔存儲(chǔ)婶博,圖形數(shù)據(jù)庫
- 最終一致性,而非ACID屬性
- 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
- CAP定理
?- 高性能荧飞,高可用性和可伸縮性
NoSQL的優(yōu)點(diǎn)/缺點(diǎn)
優(yōu)點(diǎn):
- 高可擴(kuò)展性
- 分布式計(jì)算
- 低成本
- 架構(gòu)的靈活性凡人,半結(jié)構(gòu)化數(shù)據(jù)
- 沒有復(fù)雜的關(guān)系
缺點(diǎn):
- 沒有標(biāo)準(zhǔn)化
- 有限的查詢功能(到目前為止)
- 最終一致是不直觀的程序
CAP定理(CAP theorem)
在計(jì)算機(jī)科學(xué)中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對(duì)于一個(gè)分布式計(jì)算系統(tǒng)來說,不可能同時(shí)滿足以下三點(diǎn):
1.? 一致性(Consistency)?(所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù))
2.? 可用性(Availability)?(保證每個(gè)請(qǐng)求不管成功或者失敗都有響應(yīng))
3.? 分隔容忍(Partition tolerance)?(系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作)
4.? CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性叹阔,可用性和分區(qū)容錯(cuò)性這三個(gè)需求挠轴,最多只能同時(shí)較好的滿足兩個(gè)。
? ? ?因此耳幢,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則岸晦、滿足 CP 原則和滿足 AP 原則三 大類:
5.? CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng)启上,通常在可擴(kuò)展性上不太強(qiáng)大邢隧。
6.? CP - 滿足一致性,分區(qū)容忍性的系統(tǒng)冈在,通常性能不是特別高府框。
7.? AP - 滿足可用性,分區(qū)容忍性的系統(tǒng)讥邻,通称染福可能對(duì)一致性要求低一些。