NoSQL簡(jiǎn)介
NoSQL(Not Only SQL ),意即“不僅僅是SQL” ,指的是非關(guān)系型的數(shù)據(jù)庫(kù) 。是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。
關(guān)系型數(shù)據(jù)庫(kù)中的表都是存儲(chǔ)一些結(jié)構(gòu)化的數(shù)據(jù),每條記錄的字段的組成都一樣,即使不是每條記錄都需要所有的字段,但數(shù)據(jù)庫(kù)會(huì)為每條數(shù)據(jù)分配所有的字段。而非關(guān)系型數(shù)據(jù)庫(kù)以鍵值對(duì)(key-value)存儲(chǔ),它的結(jié)構(gòu)不固定,每一條記錄可以有不一樣的鍵,每條記錄可以根據(jù)需要增加一些自己的鍵值對(duì),這樣就不會(huì)局限于固定的結(jié)構(gòu),可以減少一些時(shí)間和空間的開(kāi)銷(xiāo)。
常見(jiàn)的NoSql(非關(guān)系型數(shù)據(jù)庫(kù))數(shù)據(jù)庫(kù)
CouchDB
Redis
MongoDB
Neo4j
HBase
BigTable
NoSql數(shù)據(jù)庫(kù)優(yōu)缺點(diǎn)
在優(yōu)勢(shì)方面主要體現(xiàn)在下面幾點(diǎn):- 簡(jiǎn)單的擴(kuò)展
快速的讀寫(xiě)
低廉的成本
靈活的數(shù)據(jù)模型
在不足方面主要有下面幾點(diǎn):
不提供對(duì)SQL的支持
支持的特性不夠豐富
現(xiàn)有的產(chǎn)品不夠成熟
MongoDB簡(jiǎn)介
MongoDB是用C++語(yǔ)言編寫(xiě)的非關(guān)系型數(shù)據(jù)庫(kù)。特點(diǎn)是高性能、易部署、易使用,存儲(chǔ)數(shù)據(jù)十分方便,主要特性有:
面向集合存儲(chǔ),易于存儲(chǔ)對(duì)象類(lèi)型的數(shù)據(jù)
模式自由
支持動(dòng)態(tài)查詢
支持完全索引,包含內(nèi)部對(duì)象
支持復(fù)制和故障恢復(fù)
使用高效的二進(jìn)制數(shù)據(jù)存儲(chǔ),包括大型對(duì)象
文件存儲(chǔ)格式為BSON(一種JSON的擴(kuò)展)
MongoDB和關(guān)系數(shù)據(jù)庫(kù)的對(duì)比
| 對(duì)比項(xiàng) |
mongoDB |
mysql oracle |
| 表 |
集合 |
二維表table |
| 表的一行數(shù)據(jù) |
文檔document |
一條記錄recoder |
| 表字段 |
鍵key |
字段filed |
| 字段值 |
值value |
值value |
| 主外鍵 |
無(wú) |
PK FK |
| 靈活度擴(kuò)展性 |
極高 |
差 |
MongoDB基本概念
- 文檔(document)是MongoDB中數(shù)據(jù)的基本單元,非常類(lèi)似于關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)中的行(但是比行要復(fù)雜的多)。
- 集合(collection)就是一組文檔,如果說(shuō)MongoDB中的文檔類(lèi)似于關(guān)系型數(shù)據(jù)庫(kù)中的行,那么集合就如同表。
- MongoDB的單個(gè)計(jì)算機(jī)可以容納多個(gè)獨(dú)立的數(shù)據(jù)庫(kù),每一個(gè)數(shù)據(jù)庫(kù)都有自己的集合和權(quán)限。
- MongoDB自帶簡(jiǎn)潔但功能強(qiáng)大的JavaScript shell,這個(gè)工具對(duì)于管理MongoDB實(shí)例和操作數(shù)據(jù)作用非常大。
- 每一個(gè)文檔都有一個(gè)特殊的鍵”_id”,它在文檔所處的集合中是唯一的,相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的表的主鍵。
MongoDB數(shù)據(jù)類(lèi)型
| 數(shù)據(jù)類(lèi)型 |
描述 |
舉例 |
| null |
表示空值或者未定義的對(duì)象 |
{“x”:null} |
| 布爾值 |
真或者假:true或者false |
{“x”:true} |
| 32位整數(shù) |
32位整數(shù)。shell是不支持該類(lèi)型的,shell中默認(rèn)會(huì)轉(zhuǎn)換成64位浮點(diǎn)數(shù) |
|
| 64位整數(shù) |
64位整數(shù)。shell是不支持該類(lèi)型的,shell中默認(rèn)會(huì)轉(zhuǎn)換成64位浮點(diǎn)數(shù) |
|
| 64位浮點(diǎn)數(shù) |
64位浮點(diǎn)數(shù)。shell中的數(shù)字就是這一種類(lèi)型 |
{“x”:3.14,”y”:3} |
| 字符串 |
UTF-8字符串 |
{“foo”:”bar”} |
| 符號(hào) |
shell不支持,shell會(huì)將數(shù)據(jù)庫(kù)中的符號(hào)類(lèi)型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換成字符串 |
|
| 對(duì)象id |
文檔的12字節(jié)的唯一id |
{“id”: ObjectId()} |
| 日期 |
從標(biāo)準(zhǔn)紀(jì)元開(kāi)始的毫秒數(shù) |
{“date”:new Date()} |
| 正則表達(dá)式 |
文檔中可以包含正則表達(dá)式,遵循JavaScript的語(yǔ)法 |
{“foo”:/foobar/i} |
| 代碼 |
文檔中可以包含JavaScript代碼 |
{“x”:function() {}} |
| 未定義 |
undefined |
{“x”:undefined} |
| 數(shù)組 |
值的集合或者列表 |
{“arr”: [“a”,”b”]} |
| 內(nèi)嵌文檔 |
文檔可以作為文檔中某個(gè)key的value |
{“x”:{“foo”:”bar”}} |
更多關(guān)于mongodb的知識(shí)請(qǐng)閱讀官方文檔
|