mongodb(一)——MongoDB簡介和基本概念
阿新 • • 發佈:2019-02-15
NoSQL簡介
NoSQL(Not Only SQL ),意即“不僅僅是SQL” ,指的是非關係型的資料庫 。是一項全新的資料庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關係型的資料儲存,相對於鋪天蓋地的關係型資料庫運用,這一概念無疑是一種全新的思維的注入。
關係型資料庫中的表都是儲存一些結構化的資料,每條記錄的欄位的組成都一樣,即使不是每條記錄都需要所有的欄位,但資料庫會為每條資料分配所有的欄位。而非關係型資料庫以鍵值對(key-value)儲存,它的結構不固定,每一條記錄可以有不一樣的鍵,每條記錄可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷。
常見的NoSql(非關係型資料庫)資料庫
CouchDB
Redis
MongoDB
Neo4j
HBase
BigTable
NoSql資料庫優缺點
在優勢方面主要體現在下面幾點:- 簡單的擴充套件
快速的讀寫
低廉的成本
靈活的資料模型
在不足方面主要有下面幾點:
不提供對SQL的支援
支援的特性不夠豐富
現有的產品不夠成熟
MongoDB簡介
MongoDB是用C++語言編寫的非關係型資料庫。特點是高效能、易部署、易使用,儲存資料十分方便,主要特性有:
面向集合儲存,易於儲存物件型別的資料
模式自由
支援動態查詢
支援完全索引,包含內部物件
支援複製和故障恢復
使用高效的二進位制資料儲存,包括大型物件
檔案儲存格式為BSON(一種JSON的擴充套件)
MongoDB和關係資料庫的對比
對比項 | mongoDB | mysql oracle |
---|---|---|
表 | 集合 | 二維表table |
表的一行資料 | 文件document | 一條記錄recoder |
表字段 | 鍵key | 欄位filed |
欄位值 | 值value | 值value |
主外來鍵 | 無 | PK FK |
靈活度擴充套件性 | 極高 | 差 |
MongoDB基本概念
- 文件(document)是MongoDB中資料的基本單元,非常類似於關係型資料庫系統中的行(但是比行要複雜的多)。
- 集合(collection)就是一組文件,如果說MongoDB中的文件類似於關係型資料庫中的行,那麼集合就如同表。
- MongoDB的單個計算機可以容納多個獨立的資料庫,每一個數據庫都有自己的集合和許可權。
- MongoDB自帶簡潔但功能強大的JavaScript shell,這個工具對於管理MongoDB例項和操作資料作用非常大。
- 每一個文件都有一個特殊的鍵”_id”,它在文件所處的集合中是唯一的,相當於關係資料庫中的表的主鍵。
MongoDB資料型別
資料型別 | 描述 | 舉例 |
---|---|---|
null | 表示空值或者未定義的物件 | {“x”:null} |
布林值 | 真或者假:true或者false | {“x”:true} |
32位整數 | 32位整數。shell是不支援該型別的,shell中預設會轉換成64位浮點數 | |
64位整數 | 64位整數。shell是不支援該型別的,shell中預設會轉換成64位浮點數 | |
64位浮點數 | 64位浮點數。shell中的數字就是這一種型別 | {“x”:3.14,”y”:3} |
字串 | UTF-8字串 | {“foo”:”bar”} |
符號 | shell不支援,shell會將資料庫中的符號型別的資料自動轉換成字串 | |
物件id | 文件的12位元組的唯一id | {“id”: ObjectId()} |
日期 | 從標準紀元開始的毫秒數 | {“date”:new Date()} |
正則表示式 | 文件中可以包含正則表示式,遵循JavaScript的語法 | {“foo”:/foobar/i} |
程式碼 | 文件中可以包含JavaScript程式碼 | {“x”:function() {}} |
未定義 | undefined | {“x”:undefined} |
陣列 | 值的集合或者列表 | {“arr”: [“a”,”b”]} |
內嵌文件 | 文件可以作為文件中某個key的value | {“x”:{“foo”:”bar”}} |