數(shù)據(jù)庫的分類
關(guān)系型數(shù)據(jù)庫遵循的ACID
A (Atomicity)原子性
C (Consisitency)一致性
I (Isolation)獨(dú)立性
D (Durability)持久性
為什么使用NoSql
not?only?sql1
現(xiàn)在個(gè)人信息爆炸
對爆炸的數(shù)據(jù)挖掘 傳統(tǒng)的SQL數(shù)據(jù)庫已經(jīng)不在適合
NoSql解決了大數(shù)據(jù)的處理和存儲問題
RDBMS NoSQL
RDBMS
高度組織化結(jié)構(gòu)化數(shù)據(jù)
結(jié)構(gòu)化查詢語言SQL
數(shù)據(jù)和關(guān)系都存儲在單獨(dú)的表中
數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
嚴(yán)格的一致性
基礎(chǔ)事務(wù)
NoSQl
not only sql
沒有聲名性查詢語句
沒有預(yù)定義的模型
鍵值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫1
最終一致性,而非ACID屬性
非結(jié)構(gòu)化和不可預(yù)支的數(shù)據(jù)
CAP定理
高性能,高可用性和可伸縮性
CAP定理
對于一個(gè)分布式計(jì)算系統(tǒng)來說,不可能同時(shí)滿足一下三點(diǎn) 最多滿足兩個(gè)
一致性(所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù))
可用性(保證每個(gè)請求成功與否都有相應(yīng))
分隔容忍(系統(tǒng)中任意信息的丟失或者失敗不會影響系統(tǒng)的繼續(xù)運(yùn)作)
因此根據(jù)CAP原理將NoSQL數(shù)據(jù)庫分成了滿足CA原則,滿足CP原則和滿足AP原則
CA-單點(diǎn)集群,滿足一致性,滿足性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大
CP-滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高
AP-滿足可用性,分區(qū)容忍性的系統(tǒng),通扯∈牛可以對一致性要求低一些
NoSQL的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
高拓展性
分布式計(jì)算
低成本
架構(gòu)的靈活
半結(jié)構(gòu)化數(shù)據(jù)
沒有復(fù)雜的關(guān)系
缺點(diǎn)
沒有標(biāo)準(zhǔn)化
有限的查詢功能(目前為止)
最終一致是不直觀的程序
NoSQl分類
# MongoDB簡介
C++編寫
分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)
可以橫向擴(kuò)展
將數(shù)據(jù)存儲為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)為(KV)
文檔類似于JSON對象,字段值可以包含其他文檔
主要特點(diǎn)
面向文檔存儲的數(shù)據(jù)庫,操作起來比較簡單
可以設(shè)置任何屬性的索引(FirstName = “Sameer”,Address=“8”)實(shí)現(xiàn)更快的排序
通過本地或者網(wǎng)絡(luò)床架數(shù)據(jù)鏡像,使Mongo有更強(qiáng)的擴(kuò)展性
分片:分布在計(jì)算機(jī)網(wǎng)絡(luò)的其他節(jié)點(diǎn)
Mongo支持豐富的查詢表達(dá)式.查詢指令JSON形式
update實(shí)現(xiàn)替換完成的文檔
MR對數(shù)據(jù)進(jìn)行批量處理和聚合操作
Map函數(shù)調(diào)用emit(key,value)遍歷集合中所有的記錄,kv傳給Reduce函數(shù)
Reduce函數(shù)是JavaScript編的,通過db.runCommand或mapreduce命令來執(zhí)行
GridFS是MongoDB中的一個(gè)內(nèi)置功能,可以用來存放大量小文件
允許在服務(wù)端執(zhí)行腳本,可用javaScript編寫某個(gè)函數(shù),直接在服務(wù)端執(zhí)行,函數(shù)定義也可以存儲在服務(wù)端,下次直接調(diào)用即可
支持各種編程語言:ruby Python java C php等
MongoDB解析
數(shù)據(jù)庫
一個(gè)MongoDB可以創(chuàng)建多個(gè)數(shù)據(jù)庫
默認(rèn)數(shù)據(jù)庫為db 該數(shù)據(jù)庫存儲在data目錄
單個(gè)實(shí)例可以容納多個(gè)獨(dú)立的數(shù)據(jù)庫,每一個(gè)都有自己的集合和權(quán)限,不同的數(shù)據(jù)庫放置在不同文件中
數(shù)據(jù)庫通過名字來標(biāo)識.數(shù)據(jù)庫名字可以是滿足以下任意utf-8字符串
不不能是空字符串串("")关带。 不不得含有'?'(空格)絮识、.、$宇攻、/叹哭、\和\0?(空字符)晰绎。 應(yīng)全部小小寫彼硫。 最多64字節(jié)。1234
有一些數(shù)據(jù)庫名是保留的,可以直接訪問這些有特殊作用的數(shù)據(jù)庫
admin root數(shù)據(jù)庫,將一個(gè)用戶添加到這個(gè)數(shù)據(jù)庫,這個(gè)用戶自動繼承所有數(shù)據(jù)庫的權(quán)限.特定的命令只能夠這個(gè)數(shù)據(jù)庫運(yùn)行(列出所有的數(shù)據(jù)庫或關(guān)閉服務(wù)器)
local 這個(gè)數(shù)據(jù)永遠(yuǎn)不會被復(fù)制,可以用來存儲限于本地單臺服務(wù)器的任意集合
config:當(dāng)Mongo用于分片設(shè)置時(shí),config在內(nèi)部使用,用于保存分片的相關(guān)信息
文檔
文檔是一組kv(BSON).Mongo的文檔不需要設(shè)置相同的字段,并且相同的字段不需要相同的數(shù)據(jù)類型,與關(guān)系型數(shù)據(jù)庫有很大差別,也是MongoDB的特點(diǎn)
{"site":"www.skedu.com",?"name":"山山科大大mongodb"}1
RDBMS與MongoDB對應(yīng)的術(shù)語:
注意
kv是有順序的
文檔中的值不僅可以是在雙引號里的字符串,還可以是其他幾種數(shù)據(jù)類型(甚至是整個(gè)嵌入式文檔)
區(qū)分類型和大小寫
文檔不能有重復(fù)的鍵
鍵是字符串.除了少數(shù)例外,可以使用UTF-8
文檔命名規(guī)范鍵不能含有\(zhòng)0(空字符).這個(gè)字符用來表示鍵的結(jié)尾
.和$有特殊意義
_開頭是有保留的(不是嚴(yán)格要求)
集合
集合就是 MongoDB 文文檔組,類似于 RDBMS (關(guān)系數(shù)據(jù)庫管理理系統(tǒng):Relational Database
Management System)中的表格
沒有固定的結(jié)構(gòu),意味著在對集合可以插入不同格式和類型的數(shù)據(jù)
但通常情況下插入集合的數(shù)據(jù)有一定的關(guān)聯(lián)性
{"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com","name":"菜?鳥教程","num":5}123
MongoDB數(shù)據(jù)類型
轉(zhuǎn)載:https://blog.csdn.net/weixin_39381833/article/details/89191494