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