正文共: 8098字 6圖
預(yù)計(jì)閱讀時(shí)間: 21分鐘
每日分享
The world is moving so fast that the person who says it can't be done is generally interrupted by someone doing it.
世界變化的如此之快,以至于那些光說不做的人,通常被動(dòng)手去做的人所淘汰。
小閆語(yǔ)錄:
少些抱怨,少些碎碎念,將這些時(shí)間用在去解決問題上,你會(huì)發(fā)現(xiàn)問題也許已經(jīng)解決了。打嘴炮很爽,但是舒服的事情往往都是無(wú)意義的消遣。直接動(dòng)手去干,也許很難,但是你敢于開始就已經(jīng)成功了一半。不要眼高手低,還是去做,來點(diǎn)實(shí)際的比較好。
Mongodb(一)
1.數(shù)據(jù)庫(kù)相關(guān)知識(shí)點(diǎn)回顧
1.數(shù)據(jù)庫(kù)分為關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)。
2.SQL數(shù)據(jù)庫(kù)中包含Oracle(閉源、收費(fèi))、MySQL(開源、免費(fèi))和SQL Server。
3.三范式:表字段的原子性(不可拆分);滿足第一范式的基礎(chǔ)上,有主鍵依賴;滿足第一二范式的基礎(chǔ)上,非主屬性之間沒有依賴關(guān)系。
比如考試三科成績(jī)的總分,這個(gè)字段就是可拆分的,其實(shí)是冗余字段。
4.淘寶使用的也是MySQL,但不是直接使用,而是將其改寫才使用。因?yàn)殡娚叹W(wǎng)站的高并發(fā)量,涉及到大量讀寫,沒有數(shù)據(jù)庫(kù)適用。
5.NoSQL數(shù)據(jù)庫(kù)(非關(guān)系型數(shù)據(jù)庫(kù)):MongoDB、redis。
6.redis是使用c語(yǔ)言編寫的、內(nèi)存型的、支持網(wǎng)絡(luò)、持久化、key-value形式的非關(guān)系型數(shù)據(jù)庫(kù)。redis是單線程的。持久化是指自動(dòng)的將數(shù)據(jù)保存到磁盤中。
7.mysql是c++寫的。
進(jìn)入一個(gè)新的公司盡快熟悉說明文檔、數(shù)據(jù)庫(kù)表之類的東西。
8.NoSQL有兩種解釋,一種是Not Only SQL,代表的是不僅僅是數(shù)據(jù)庫(kù);另一種是非關(guān)系型數(shù)據(jù)庫(kù)。
9.NoSQL指的是非關(guān)系型的數(shù)據(jù)庫(kù),是相對(duì)于關(guān)系型數(shù)據(jù)庫(kù)的統(tǒng)稱,主要是解決大規(guī)模數(shù)據(jù)存儲(chǔ)的挑戰(zhàn)。
10.reids存儲(chǔ)是鍵值型的數(shù)據(jù),MongoDB則是文檔型的數(shù)據(jù)。
11.SQL注重于關(guān)系,NoSQL則是注重存儲(chǔ)。NoSQL處理不了特別復(fù)雜的關(guān)系表。
12.MongoDB是可擴(kuò)展的高性能、開源、面向文檔(分布式文件存儲(chǔ))的NoSQL型的數(shù)據(jù)庫(kù)。
13.MongoDB的讀寫性能在介于redis和mysql之間。redis的性能最高。
redis是內(nèi)存型,而MongoDB平時(shí)存在磁盤,使用時(shí)會(huì)加載到內(nèi)存中,MySQL則是磁盤。
14.MySQL的擴(kuò)展性差,大數(shù)據(jù)下IO壓力大,表結(jié)構(gòu)更改困難。MongoDB易擴(kuò)展,大數(shù)據(jù)量高性能,靈活的數(shù)據(jù)模型,高可用。
15.關(guān)系型數(shù)據(jù)庫(kù)在當(dāng)前時(shí)代的缺點(diǎn):數(shù)據(jù)格式單一;高并發(fā)讀寫性能低;可擴(kuò)展性低。
2.MongoDB
1.MongoDB中的三要素:數(shù)據(jù)庫(kù)、集合(可以簡(jiǎn)單的理解為表)、文檔(可以簡(jiǎn)單的理解為行)
2.MongoDB中的數(shù)據(jù)存儲(chǔ)是Bson的形式存儲(chǔ)的,Bson是二進(jìn)制的json,所以看上去記錄的形式類似于json數(shù)據(jù)。
3.MongoDB擴(kuò)展性非常好。因?yàn)樵贛ongoDB中文檔結(jié)構(gòu)可以不同,隨意對(duì)文檔結(jié)構(gòu)進(jìn)行擴(kuò)展,不像MySQL中每個(gè)字段都是固定好的,你需要往里填數(shù)據(jù)。
4.為什么要使用NoSQL?
答:易擴(kuò)展;讀寫速度快;高性能和高可擴(kuò)展;非結(jié)構(gòu)化與不可預(yù)知數(shù)據(jù)(數(shù)據(jù)模型靈活)。
5.為什么使用MongoDB?
答:高可擴(kuò)展性;高性能存儲(chǔ);使用簡(jiǎn)單;部署簡(jiǎn)單。
2.1MongoDB主要應(yīng)用場(chǎng)景
1.網(wǎng)站數(shù)據(jù):網(wǎng)站實(shí)時(shí)操作比如插入,更新和查詢。
2.緩存:性能高。
3.大量、低價(jià)值數(shù)據(jù)的存儲(chǔ):日志監(jiān)控?cái)?shù)據(jù)、爬蟲數(shù)據(jù)。
4.集群
5.json格式的數(shù)據(jù):MongoDB采用的Bson(binary json)數(shù)據(jù)格式。
面試題
一個(gè)并發(fā)量高的網(wǎng)站,其數(shù)據(jù)需要實(shí)時(shí)更新,假如緩存數(shù)據(jù)和磁盤數(shù)據(jù)不一致,我們?cè)趺唇鉀Q這個(gè)問題?
答:我們對(duì)于訪問量高的頁(yè)面,可以將MySQL數(shù)據(jù)中的數(shù)據(jù)讀取出來放到redis或者M(jìn)ongoDB中,使得下次訪問,直接從緩存中讀取即可,提高效率。為了解決緩存數(shù)據(jù)和磁盤數(shù)據(jù)不一致,我們可以使用定時(shí)任務(wù)或者異步,但是都存在一定的缺點(diǎn)。最好的解決方法是:我們?cè)谛薷南嚓P(guān)數(shù)據(jù)的接口中添加業(yè)務(wù)邏輯,就是將數(shù)據(jù)修改后馬上刪除緩存中的相關(guān)數(shù)據(jù),使其在訪問的時(shí)候就直接讀取磁盤的內(nèi)容。
2.2MongoDB安裝注意點(diǎn)
1.版本選擇時(shí),盡量選取偶數(shù)版,偶數(shù)版為穩(wěn)定版(release),基本沒有bug。
偶數(shù)指版本號(hào)為偶數(shù)。
2.位數(shù)選擇64位,32位存在存儲(chǔ)上限。
3.安裝完只有要記得配置環(huán)境變量,使其可以在任意目錄下開啟使用MongoDB數(shù)據(jù)庫(kù)。
4.阻塞進(jìn)程就是如果關(guān)閉當(dāng)前終端,那么進(jìn)程就會(huì)關(guān)閉。守護(hù)進(jìn)程就是可以在后臺(tái)運(yùn)行。
5. 27017是MongoDB的默認(rèn)端口。redis默認(rèn)端口是 6379。MySQL默認(rèn)端口是 3306。
2.3基本命令
開啟MongoDB服務(wù)器:
sudo mongod
數(shù)據(jù)默認(rèn)存儲(chǔ)在 /data/db
以守護(hù)式在后臺(tái)開啟一個(gè)子進(jìn)程:
sudo mongod --logpath=path --dbpath=path --logappend --fork
--dbpath: 指定數(shù)據(jù)庫(kù)的存放路徑。
--logpath: 指定日志的存放路徑。
--append: 或--logappend 設(shè)置日志的寫入形式為追加模式。不會(huì)覆蓋。
--fork: 或 -fork后臺(tái)開啟新的進(jìn)程運(yùn)行mongodb服務(wù)。
使用指定的目錄存放數(shù)據(jù):
sudo mongod --dbpath=/User/data/db
指定加載配置文件:
sudo mongod -f logfile
查看是否開啟成功:
ps aux | grep mongod
進(jìn)入MongoDB的客戶端:
mongo
退出客戶端:
exit
ctrl + c也可以退出
終端中遠(yuǎn)程關(guān)閉服務(wù)器
use admin
db.shutdownServer() # 在客戶端關(guān)閉MongoDB服務(wù)器
2.4權(quán)限管理
剛安裝完畢的MongoDB默認(rèn)不適用權(quán)限認(rèn)證方式啟動(dòng),然而公網(wǎng)運(yùn)行系統(tǒng)要設(shè)置權(quán)限以保證數(shù)據(jù)安全。
2.4.1開啟權(quán)限認(rèn)證的方式
權(quán)限認(rèn)證默認(rèn)是關(guān)閉的。
1.在啟動(dòng)數(shù)據(jù)庫(kù)的時(shí)候添加 --auth參數(shù)。以權(quán)限認(rèn)證的方式啟動(dòng)。
sudo mongod --auth
2.在配置文件中添加 auth=true,然后加載配置文件啟動(dòng)。
2.4.2權(quán)限認(rèn)證創(chuàng)建用戶登錄的基本步驟
1.首先在普通模式下啟動(dòng),創(chuàng)建用戶,指定權(quán)限。
sudo mongod
use admin
所有的用戶都必須使用管理員賬戶創(chuàng)建
2.選擇數(shù)據(jù)庫(kù)后使用相應(yīng)方法創(chuàng)建用戶及權(quán)限:
db.createUser(
user:'用戶名',
pwd:'密碼',
roles:[{role:'權(quán)限',db:'數(shù)據(jù)庫(kù)'}]
)
roles為權(quán)限設(shè)置的文檔,文檔中db為指定的數(shù)據(jù)庫(kù),role為權(quán)限(常用的權(quán)限為root、read、readWrite),其中readWrite為小駝峰的寫法。
注意:MongoDB中可以往一個(gè)不存在的數(shù)據(jù)庫(kù)和集合中進(jìn)行操作,如果插入數(shù)據(jù)成功,之后就會(huì)自動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。
3.關(guān)閉MongoDB服務(wù)器,以認(rèn)證模式啟動(dòng)。
sudo mongod --auth
4.mongo進(jìn)入終端,切換到admin數(shù)據(jù)庫(kù)下,認(rèn)證:
db.auth('用戶名','密碼')
返回值為1,表示認(rèn)證成功。
只能對(duì)指定權(quán)限的數(shù)據(jù)庫(kù)進(jìn)行相關(guān)操作。
2.4.3其他命令
查看已經(jīng)創(chuàng)建的用戶權(quán)限:
show users
use admin
db.system.users.find()
數(shù)據(jù)庫(kù)權(quán)限認(rèn)證:(認(rèn)證的時(shí)候必須是該用戶在哪個(gè)數(shù)據(jù)庫(kù)下創(chuàng)建的,在哪個(gè)數(shù)據(jù)庫(kù)進(jìn)行認(rèn)證。)
use dbname
db.auth(user,pwd)
刪除某一用戶及權(quán)限:
db.dropUser(用戶名)
在該用戶所在的數(shù)據(jù)庫(kù)下執(zhí)行刪除命令。
2.5數(shù)據(jù)庫(kù)的基本操作
2.5.1數(shù)據(jù)庫(kù)相關(guān)操作
查看當(dāng)前使用數(shù)據(jù)庫(kù):
db
查看磁盤上存在的數(shù)據(jù)庫(kù):
show dbs
切換到指定的數(shù)據(jù)庫(kù):
use dbname
1.數(shù)據(jù)庫(kù)不存在也可以進(jìn)行切換。
2.使用use之后并沒有創(chuàng)建數(shù)據(jù)庫(kù)。
3.數(shù)據(jù)庫(kù)是在手動(dòng)創(chuàng)建集合或者使用集合的時(shí)候創(chuàng)建的。
刪除當(dāng)前的數(shù)據(jù)庫(kù):
db.dropDatabase()
使用該命令時(shí)必須已經(jīng)選擇了當(dāng)前要?jiǎng)h除的數(shù)據(jù)庫(kù)。
2.5.2集合相關(guān)操作
查看當(dāng)前數(shù)據(jù)庫(kù)中的集合列表(選擇數(shù)據(jù)庫(kù)之后使用):
show collections
創(chuàng)建集合:
db.createCollection(name)
刪除集合:
db.collection.drop()
2.6固定集合
固定集合類似于循環(huán)隊(duì)列,當(dāng)沒有存儲(chǔ)空間的時(shí)候,最老的數(shù)據(jù)將會(huì)被新數(shù)據(jù)覆蓋。
MongoDB中集合的存儲(chǔ)空間默認(rèn)最大為16M,也可以使用固定集合指定大小。
創(chuàng)建固定集合:
db.createCollection('集合名稱',{capped:true,size:大小})
size的單位是字節(jié)。最小有限制為255字節(jié),如果設(shè)置的大小小于255,那么會(huì)設(shè)置為255,但是這一數(shù)值根據(jù)版本有可能不同。
適用場(chǎng)景:日志。
后面的會(huì)將最前面的覆蓋掉。
特點(diǎn):插入速度快,按照順序查詢速度快,新數(shù)據(jù)會(huì)替換舊數(shù)據(jù),不能使用remove刪除數(shù)據(jù)。
2.6.1固定集合相關(guān)操作
判斷一個(gè)集合是否為固定大小集合:
db.colname.isCapped()
將一個(gè)普通集合轉(zhuǎn)換為固定大小集合,無(wú)法將固定集合轉(zhuǎn)換為普通集合:
db.runCommand({'convertToCapped':'colname',size:n})
2.7MongoDB的數(shù)據(jù)類型
ObjectID: 文檔ID/數(shù)據(jù)的ID,數(shù)據(jù)的主鍵。
4字節(jié)時(shí)間戳;3字節(jié)機(jī)器id;2字節(jié)進(jìn)程id;3字節(jié)增量值。
此字段如果不指定,系統(tǒng)會(huì)自動(dòng)進(jìn)行填寫,我們也可以進(jìn)行自定義。
String: 字符串,最常用,必須是有效的UTF-8
Boolean: 存儲(chǔ)一個(gè)布爾值,true或false
Integer: 整數(shù)可以是32位或64位,這取決于服務(wù)器
Double: 浮點(diǎn)數(shù)
Arrays: 數(shù)組/列表。
python中的列表,js中的數(shù)組。
Object: mongodb中的一條數(shù)據(jù)/文檔,即文檔嵌套文檔。
Null: 存儲(chǔ)null值
Timestamp: 時(shí)間戳,表示從1970-1-1到現(xiàn)在的總秒數(shù)
Date: 存儲(chǔ)當(dāng)前日期或時(shí)間的UNIX時(shí)間格式
3.MongoDB的增刪改查
查詢操作:
db.colname.find(query)
根據(jù)查詢條件進(jìn)行查詢,并返回查詢結(jié)果。
如果不指定query,那么就是所有集合的文檔結(jié)構(gòu)。
單條數(shù)據(jù)插入:
db.colname.insert(data)
data為要插入的數(shù)據(jù),格式類似json,或者Python字典,可以直接輸入一個(gè)字典格式的數(shù)據(jù),也可以存一個(gè)變量再插入這個(gè)變量。
多條數(shù)據(jù)插入:
db.colname.insert([data_list])
# 多條數(shù)據(jù)插入
db.t2.insert([{name:'wang'},{name:'zhang'}])
data_list為列表,列表中的每一項(xiàng)都是文檔格式(python 字典)
3.1更新操作
語(yǔ)法:
db.colname.update({query},{update})
query為查詢條件,update為更新數(shù)據(jù)
1.全文檔覆蓋更新
db.colname.update({query},{key,vlaue})
將通過query條件查詢出來的文檔替換為第二個(gè)參數(shù)指定的數(shù)據(jù)
2.指定鍵值更新
db.colname.update({query},{$set:{key:value}})
將通過query條件查詢出來的文檔的指定屬性設(shè)置為指定的值,而不會(huì)覆蓋原有的其他數(shù)據(jù),如果更新值存在則更新,不存在則添加
3.批量鍵值更新
db.colname.update(query,{$set:{key:value}},{multi:true})
multi決定是否是批量更新還是只更新一條數(shù)據(jù),并且只有在對(duì)數(shù)據(jù)字段值操作(使用$)的時(shí)候才能使用
multi如果不指定默認(rèn)為false
4.不指定查詢條件進(jìn)行修改
db.colname.update({ },{update},{multi:true})
3.2刪除操作
1.指定刪除:
db.colname.remove(query,{justOne:boolean})
justOne對(duì)應(yīng)的值決定刪除單條數(shù)據(jù)還是多條數(shù)據(jù)。
2.刪除全部數(shù)據(jù):
db.colname.remove({}) # 刪除集合的所有數(shù)據(jù)
db.colname.drop() # 刪除集合
3.3保存操作
db.colname.save(data)
save = insert + update
以_id為判斷依據(jù),存在該id對(duì)應(yīng)的數(shù)據(jù)則更新數(shù)據(jù),不存在則插入數(shù)據(jù)
3.4查詢操作
多數(shù)據(jù)查詢:
db.colname.find(query)
1.帶query則是條件查詢
2.不帶query是顯示集合中的所有數(shù)據(jù)
單條數(shù)據(jù)查詢:
db.colname.findOne(query)
查詢單條數(shù)據(jù)的時(shí)候,返回結(jié)果自動(dòng)美化
查詢數(shù)據(jù)美化:
db.colname.find().pretty()
比較運(yùn)算符:
符號(hào)說明英文
$lt小于less than
$lte小于等于less than equal
$gt大于great than
$gte大于等于great than equal
$ne不等于not equal
比較運(yùn)算符在查詢中格式:
db.colname.find({key:{$lt:n}})
多條件查詢, 與操作:
db.colname.find({key:value,key1:value1})
db.colname.find({$and:[{key:value},{key1:value1}]})
多條件查詢, 或操作:
db.colname.find{$or:[{key:value},{key1:value1}]}
在指定范圍中:
db.colname.find({key:{$in:[n1,n2,n3]}})
不再指定范圍中:
db.colname.find({key:{$nin:[n1,n2,n3]}})
使用正則表達(dá)式:
{key:/正則表達(dá)式/}
{key:{$regex:’正則表達(dá)式’}}
注意:正則表達(dá)式只能應(yīng)用到字符串類型的數(shù)據(jù)中。
字符串中“123”是將1,2,3分別存儲(chǔ)在內(nèi)存空間的,而整型123是整體指向一塊存儲(chǔ)空間。
3.5自定義查詢
1.為什么有自定義查詢?
答:有時(shí)候查詢條件很復(fù)雜,前面的查詢方法實(shí)現(xiàn)起來都不方便,于是我們可以使用自定義查詢搞定復(fù)雜操作。
2.什么是自定義查詢?
答:自定義查詢是使用js語(yǔ)句實(shí)現(xiàn)的查詢
db.colname.find({
$where:function(){
return this.key > 3
}
})
1.以這種方式查詢,實(shí)際上是對(duì)find()的結(jié)果應(yīng)用一遍自定義的js的匿名函數(shù)。this的作用同Python的self,this指的是每一條文檔。
2.自定義查詢可以定義復(fù)雜的判斷條件。
3.6查詢結(jié)果的進(jìn)一步操作
跳過2條數(shù)據(jù)之后的查詢結(jié)果:
db.colname.find().skip(2)
限制查詢2條數(shù)據(jù):
db.colname.find().limit(2)
限制和跳過兩個(gè)條件混合使用的時(shí)候會(huì)同步使用,沒有先后順序。
db.colname.find().limit(2).skip(2)
同:
db.colname.find().skip(2).limit(2)
投影操作:投影就是顯示還是不顯示。
db.colname.find({},{_id:0}) # 不顯示id
db.colname.find({},{_id:1}) # 顯示id
id默認(rèn)是不顯示。
排序操作:
db.colname.find().sort({key:1})
sort內(nèi)不指定條件會(huì)報(bào)錯(cuò)。
設(shè)定數(shù)據(jù)格式為字典格式,鍵為排序依據(jù)的字段,值決定升序還是降序。1表示升序,-1表示降序
統(tǒng)計(jì)操作:
db.colname.find(query).count()
db.colname.count(query)
消除重復(fù)操作:
db.colname.distinct('字段名',{條件})
字段名中使用字符串。
4.MongoDB的索引
4.1面試題
索引的原理?
答: 二叉樹/B+樹/紅黑樹。
4.2 索引
索引可以提升查詢速度,提升數(shù)據(jù)庫(kù)查詢的性能,但是犧牲了數(shù)據(jù)庫(kù)的插入和更新速度。頻繁插入修改的數(shù)據(jù)不適合建立索引。
最大的缺點(diǎn)就是在插入數(shù)據(jù)的時(shí)候,之前的索引就會(huì)變化。
查看語(yǔ)句的執(zhí)行情況:
db.colname.find(query).explain(‘executionStats’)
創(chuàng)建索引的方法:
db.集合名.ensureIndex({屬性:1})
創(chuàng)建索引使用的文檔中鍵為設(shè)置索引的字段,值為1表示索引按照升序存儲(chǔ),值為-1則表示索引按照降序存儲(chǔ)。
當(dāng)有大量數(shù)據(jù)時(shí),創(chuàng)建索引會(huì)非常緩慢,因此可以后臺(tái)創(chuàng)建索引,在創(chuàng)建索引的時(shí)候添加{background:true}
db.colname.ensureIndex({key:1},{background:true})
聯(lián)合索引:
db.colname.ensureIndex({key1:1,key2:1}
# 創(chuàng)建聯(lián)合索引之后,可以使用key1或者key1,key2的查詢進(jìn)行查找
查看已經(jīng)存在的索引:
db.colname.getIndexes()
創(chuàng)建唯一索引:
db.colname.ensureIndex({‘key’:1},{“unique”:true})
注意:當(dāng)創(chuàng)建一個(gè)key為唯一索引時(shí),新插入的數(shù)據(jù)如果key的值與已存在的數(shù)據(jù)相同,則會(huì)報(bào)錯(cuò)。當(dāng)對(duì)已存在數(shù)據(jù)的集合創(chuàng)建唯一索引時(shí),可能會(huì)因?yàn)橹貜?fù),導(dǎo)致創(chuàng)建不成功,使用dropDups可以刪除重復(fù)文檔,但是我們一般不建議使用:
db.colname.ensureIndex({‘key’:1},{“unique”:true,”dropDups”:true})
刪除索引:
db.colname.dropIndex({‘key’:1})
5.備份和恢復(fù)
1.為什么進(jìn)行數(shù)據(jù)備份?
答:數(shù)據(jù)備份指的是將數(shù)據(jù)備份到指定的目錄,并在需要的時(shí)候進(jìn)行恢復(fù),一般用于災(zāi)難處理。
2.進(jìn)行備份(在終端中使用命令):
mongodump -h host -d dbname -o directionary
3.如何進(jìn)行數(shù)據(jù)恢復(fù):
mongorestore -h host -d dbname --dir directionary
5.1數(shù)據(jù)的導(dǎo)出和導(dǎo)入
導(dǎo)出成json文件:
mongoexport -d dbname -c colname -o stu.json
導(dǎo)出成csv文件:
mongoexport -d dbname -c colname --type csv -f filed1,filed2,… -o filename.csv
為什么進(jìn)行數(shù)據(jù)的導(dǎo)出遇導(dǎo)入?
答:數(shù)據(jù)庫(kù)中的數(shù)據(jù)在與其他平臺(tái)和應(yīng)用進(jìn)行交互時(shí)需要按照指定格式導(dǎo)出交給后續(xù)步驟進(jìn)行處理。
6.python與MongoDB的交互
導(dǎo)入
from pymongo import MongoClient
創(chuàng)建連接的數(shù)據(jù)庫(kù)對(duì)象
client= MongoClient(host,port)
連接池默認(rèn)是100個(gè)。
指定連接的數(shù)據(jù)庫(kù)/集合/文檔
stu = client['Ethanyan']['stu']
python中find查詢返回的是cursor對(duì)象,需要對(duì)游標(biāo)對(duì)象進(jìn)行遍歷,得到查詢結(jié)果
# 遍歷游標(biāo)對(duì)象
for i in stu.find():
print(i)
7.面試題
關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù)?
答:關(guān)系型指二維表格的形式存儲(chǔ)數(shù)據(jù),列叫做字段、行叫做記錄,表和表之間有關(guān)系,主鍵、外鍵、引用。非關(guān)系型數(shù)據(jù)庫(kù)是文檔形式存儲(chǔ)數(shù)據(jù),沒有表的概念,有集合(表)和文檔(記錄),存儲(chǔ)基于硬盤存儲(chǔ)數(shù)據(jù),吧硬盤中的數(shù)據(jù)放入內(nèi)存中進(jìn)行讀寫操作。