mongodb 数组添加_NoSQL之MongoDB——简介
MongoDB是一種開源文檔型數(shù)據(jù)庫,它具有高性能,高可用性,自動擴(kuò)展性
1.文檔數(shù)據(jù)庫
MongoDB用一個(gè)文檔來表示一條記錄,文檔的數(shù)據(jù)結(jié)構(gòu)由鍵值對組成。MongoDB文檔類似于JSON對象,字段值可能是文檔,數(shù)組,或文檔數(shù)組。
使用文檔的優(yōu)點(diǎn):
- 文檔中字段值的數(shù)據(jù)類型同大多數(shù)編程語言中的原生數(shù)據(jù)類型一致。
- 嵌入式文檔和數(shù)組減少了連接查詢的需求。
- 動態(tài)的文檔結(jié)構(gòu)支持多態(tài)性。
2.主要特性
高性能
MongoDB支持高性能數(shù)據(jù)存儲。特別地:
- 支持嵌入式數(shù)據(jù)模型以減少對數(shù)據(jù)庫系統(tǒng)的I/O
- 利用索引實(shí)現(xiàn)快速查詢,并且嵌入式文檔和集合也支持索引
豐富的查詢語言
MongoDB提供了豐富的查詢語言以支持讀寫操作和聚集操作、文本檢索、地理信息查詢
高可用性
MongoDB的復(fù)制能力被稱作復(fù)制集(replica set),它提供了自動的故障遷移和數(shù)據(jù)冗余。一個(gè)復(fù)制集是一組包含了相同數(shù)據(jù)的多臺MongoDB服務(wù)器,它提供了冗余性和加強(qiáng)了數(shù)據(jù)的可用性。
橫向擴(kuò)展
MongoDB的橫向擴(kuò)展能力是其核心功能的一部分:
- 分片的數(shù)據(jù)分布在服務(wù)器集群上。
- 帶標(biāo)簽的分片能夠引導(dǎo)數(shù)據(jù)到指定的分片上。
支持多存儲引擎
包括:WiredTiger Storage Engine,MMAPv1 Storage Engine。此外,MongoDB 提供可插拔存儲引擎API,允許第三方開發(fā)者為MongoDB開發(fā)存儲引擎。
3.數(shù)據(jù)庫和集合
MongoDB 存儲BSON文檔,例如數(shù)據(jù)記錄在集合中,集合在數(shù)據(jù)庫中。
3.1數(shù)據(jù)庫
在MongoDB 中數(shù)據(jù)庫持有集合。
在Mongo shell中,選中一個(gè)數(shù)據(jù)庫使用如下命令:use ,例如:
use myDB
創(chuàng)建數(shù)據(jù)庫
如果待操作的數(shù)據(jù)庫不存在,那么在第一次向MongoDB 存儲數(shù)據(jù)時(shí),MongoDB會創(chuàng)建這個(gè)數(shù)據(jù)庫。例如,使用如下命令操作一個(gè)不存在的數(shù)據(jù)庫。
use myNewDB
db.myNewCollection1.insert( { x: 1 } )
insert()操作創(chuàng)建了數(shù)據(jù)庫myNewDB,若集合myNewCollection1也不存在,同樣地集合myNewCollection1也被創(chuàng)建。
3.2集合
MongoDB 在集合中存儲文檔,集合類似于關(guān)系數(shù)據(jù)庫中的表。
創(chuàng)建一個(gè)集合
如果一個(gè)集合不存在,使用下面命令時(shí)集合會被創(chuàng)建:
db.myNewCollection2.insert( { x: 1 } )
db.myNewCollection3.createIndex( { y: 1 } )
insert() 和 createIndex()在集合不存在的情況下會創(chuàng)建集合。
顯式創(chuàng)建集合
MongoDB 提供了db.createCollection()方法來顯示地創(chuàng)建一個(gè)集合。可以為創(chuàng)建的集合指定參數(shù),例如設(shè)置集合的大小或者文檔的驗(yàn)證規(guī)則,如果不需要指定這些參數(shù),那么沒必要顯示地創(chuàng)建一個(gè)集合。
文檔驗(yàn)證(3.2版新特性)
默認(rèn)情況下,一個(gè)集合中的文檔不必具有相同的結(jié)構(gòu) ,
一個(gè)集中的文檔不需要具有一系列相同的字段,并且不同文檔中字段的數(shù)據(jù)類型可以不同。
修改文檔結(jié)構(gòu)
可以更改集合中的文檔結(jié)構(gòu),如添加新字段,刪除現(xiàn)有字段,或?qū)⒆侄沃蹈臑橐环N新的類型,更新文檔結(jié)構(gòu)
3.3固定集合
3.3.1概述
固定集合,即具有固定大小的集合,它支持基于插入順序的插入和查詢這兩種高通量操作。固定大小的集合的工作方式類似于循環(huán)緩存:一旦一個(gè)集合被填滿,待插入的文檔會覆蓋掉最先插入的文檔。
3.3.2行為
插入順序
固定集合保證了插入順序,因此對于查詢操作而言,不需要索引的支持就可以返回多個(gè)按順序排列的文檔。沒有索引的開銷,固定集合支持更高的插入吞吐量。
自動刪除最先插入的文檔
為了給新文檔讓出存儲空間,固定集合自動刪除最先插入的文檔而不需要顯示的刪除操作。
例如,集合oplog.rs中存儲了副本集操作日志,這里副本集使用了固定集合。考慮下面對固定集合可能的操作:
- 存儲由大容量系統(tǒng)生成的日志信息。在無索引的情況下,文檔插入固定集合的速度與將日志信息寫入文件系統(tǒng)的速度相似。此外,先進(jìn)先出的特性保證了事件的順序,同時(shí)管理了存儲的使用。
- 在固定集合中緩存少量數(shù)據(jù)。由于緩存重讀而非寫,你應(yīng)確保這個(gè)集合總在工作集中(例如,內(nèi)存中)或接受一點(diǎn)點(diǎn)寫操作,因?yàn)樗饕枰獙懖僮鳌?/li>
_id 字段索引
固定集合含有_id字段,此字段索引是默認(rèn)的。
3.3.3限制和建議
更新
如果你要更新固定集合中的文檔,創(chuàng)建索引以防止全表掃描。
文檔大小(3.2版本變更)
如果更新或替換操作改變了文檔大小,則操作失敗。
刪除文檔
不能刪除固定集合中的文檔,可使用drop() 命令刪除整個(gè)固定集合并新建之。
分片
固定集合不允許分片。
查詢效率
使用自然排序可高效地檢索最新插入的元素。這是(有點(diǎn))像追蹤一個(gè)日志文件。
聚集操作符$out
不能使用聚集管道操作符$out將結(jié)果寫入固定集合
3.3.4過程
創(chuàng)建固定集合
在mongo shel中,使用db.createCollection()方法創(chuàng)建固定集合,創(chuàng)建固定集合的時(shí)候要指定集合的字節(jié)大小,MongoDB將會提前為所創(chuàng)建的固定集合分配存儲空間。固定集合的字節(jié)大小包含了內(nèi)部使用的空間大小。
db.createCollection( "log
總結(jié)
以上是生活随笔為你收集整理的mongodb 数组添加_NoSQL之MongoDB——简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [pytorch、学习] - 5.4 池
- 下一篇: 计算机精品在线开放课程申报书,精品在线开