對比項 mongoDB mysql oraclemysql
表 集合list 二維表sql
表的一行數據 文檔document 一條記錄mongodb
表字段 鍵key 字段fieldshell
字段值 值value 值value數據庫
主外鍵 無 PK,FK服務器
靈活度擴展性 極高 差數據結構
(1)關係型數據表的record必須保證擁有每個fieldoracle
(2)mongoDB的每個document的key能夠不同app
(3)關係型數據查詢使用sql函數
(4)mongoDB查詢使用內置的find函數--->基於BSON的特出查詢工具
1)建立一個數據庫
(1)若是你須要進入MongoDB後臺管理,你須要先打開mongodb裝目錄的下的bin目錄,而後執行mongo命令文件。
MongoDB Shell是MongoDB自帶的交互式Javascript shell,用來對MongoDB進行操做和管理的交互式環境。當你進入mongoDB後臺後,它默認會連接到 test 文檔(數據庫)
$ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to the MongoDB shell.
(2)因爲它是一個JavaScript shell,您能夠運行一些簡單的算術運算:
> 2+2 4 > 3+6 9
(3)如今讓咱們插入一些簡單的數據,並對插入的數據進行檢索:
> db.runoob.insert({x:10}) #將數字10插入到runoob的x字段中 WriteResult({ "nInserted" : 1 }) > db.runoob.fin() 2018-10-28T01:00:43.790-0700 E QUERY [js] TypeError: db.runoob.fin is not a function : @(shell):1:1 > db.runoob.find() #查找runoob中的數據 { "_id" : ObjectId("5bd56c8ff277bf4c61e99120"), "x" : 10 } >
SQL術語/概念 MongoDB術語/概念 解釋/說明
database database 數據庫
table collection 數據庫表/集合
row document 數據記錄行/文檔
column fileld 數據字段/域
index index 索引
table joins 錶鏈接。mon不支持
primary key primary key 主鍵,MongoDB自動將_id 字段設置爲主鍵
圖解:
(1) 一個MongoDB能夠建立多個數據庫。
(2)MongoDB的默認數據庫爲"db",該數據庫存在於data目錄中
(3)MongoDB的單個實例能夠容納多個獨立的數據庫,每一個都有本身的集合和權限,不一樣的數據庫放在不一樣的文件中
(4)"show dbs"能夠顯示全部的數據庫列表
(5)執行db命令能夠顯示當前數據庫對象或者集合
(6)使用use命令能夠鏈接到一個指定的數據庫
(7)
數據庫也經過名字來標識。數據庫名能夠是知足如下條件的任意UTF-8字符串。
不能是空字符串("")。
不得含有' '(空格)、.、$、/、\和\0 (空字符)。
應所有小寫。
最多64字節。
有一些數據庫名是保留的,能夠直接訪問這些有特殊做用的數據庫。
admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承全部數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,好比列出全部的數據庫或者關閉服務器。
local: 這個數據永遠不會被複制,能夠用來存儲限於本地單臺服務器的任意集合
config: 當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息
(1)文檔是一組鍵值對(key-value)。MongoDB的文檔不須要設置成相同的字段,而且相同的字段不須要有相同的數據類型,這與關係型數據庫有很大的區別,也是MongoDB很是突出的特色。
{"site":"www.stone.com","name":"石則祺"}
(2)RDBMS與mongoDB對應的術語
RDBMS MongoDB
數據庫 數據庫
表格 集合
行 文檔
列 字段
表聯合 嵌入文檔
主鍵 主鍵
(3)文檔中的鍵值對是有序的
(4)文檔中的值不只能夠在雙引號裏面,並且還能夠是其餘幾種數據類型
(5)mongoDB區分類型和大小寫
(6)文檔的鍵是字符串。除了極少數狀況外,鍵值可使用UTF-8字符
(1)集合就是MongoDB中的文檔組,相似於RDBMS(關係數據庫管理系統)中的表格
(2)集合存在於數據庫中,集合沒有固定的結構,意味着可在集合彙總插入不一樣的數據格式和數據類型,可是一般狀況下插入的數據都會有必定的關聯性,好比能夠將不一樣的數據結構插入到集合中。當第一個文檔被插入的時候,集合就會被建立
{"site":"www.baidu.com"} {"site":"www.google.com","name":"google"} {"site":"www.shizeqi.com","name":"stone","num":5}
集合名不能是空字符串""。
集合名不能含有\0字符(空字符),這個字符表示集合名的結尾。
集合名不能以"system."開頭,這是爲系統集合保留的前綴。
用戶建立的集合名字不能含有保留字符。有些驅動程序的確支持在集合名裏面包含,這是由於某些系統生成的集合中包含該字符。除非你要訪問這種系統建立的集合,不然千萬不要在名字裏出現$。
Capped collections 就是固定大小的collection。
它有很高的性能以及隊列過時的特性(過時按照插入的順序). 有點和 "RRD" 概念相似。
Capped collections 是高性能自動的維護對象的插入順序。它很是適合相似記錄日誌的功能和標準的 collection 不一樣,你必需要顯式的建立一個capped collection,指定一個 collection 的大小,單位是字節。collection 的數據存儲空間值提早分配的。
Capped collections 能夠按照文檔的插入順序保存到集合中,並且這些文檔在磁盤上存放位置也是按照插入順序來保存的,因此當咱們更新Capped collections 中文檔的時候,更新後的文檔不能夠超過以前文檔的大小,這樣話就能夠確保全部文檔在磁盤上的位置一直保持不變。
因爲 Capped collection 是按照文檔的插入順序而不是使用索引肯定插入位置,這樣的話能夠提升增添數據的效率。MongoDB 的操做日誌文件 oplog.rs 就是利用 Capped Collection 來實現的。
要注意的是指定的存儲大小包含了數據庫的頭信息。
db.createCollection("mycoll", {capped:true, size:100000})