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”}} |
更多關於mongodb的知識請閱讀官方文檔