說到MongoDB,必須先從NoSQL說起。NoSQL(NoSQL = Not Only SQL) ,意即反SQL運動,是一項全新的數(shù)據(jù)庫革命性運動,早期就有人提出,發(fā)展至2009 年趨勢越發(fā)高漲。NoSQL的擁護者們提倡運用非關系型的數(shù)據(jù)存儲,相對于目前鋪天蓋地的關系型數(shù)據(jù)庫運用,這一概念無疑是一種全新的思維的注入。
NoSQL 數(shù)據(jù)庫特點
優(yōu)點:高并發(fā)讀寫、海量數(shù)據(jù)存儲、高可擴展性及高可用性。
缺點:缺乏事務一致性、缺乏讀寫實時性及不支持復雜查詢。
NoSQL數(shù)據(jù)庫類型
1、key-value
Key指向Value的鍵值對,通常用hash table來實現(xiàn)。
產(chǎn)品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Oracle BDB等。
2、列式數(shù)據(jù)庫
以列簇式存儲,將同一列數(shù)據(jù)存在一起。
產(chǎn)品:Cassandra、HBase、Riak等。
3、文檔型數(shù)據(jù)庫
Key-Value對應的鍵值對,Value為結(jié)構(gòu)化數(shù)據(jù)。
產(chǎn)品:CouchDB、MongoDB等。
4、圖結(jié)構(gòu)數(shù)據(jù)庫
以“圖”為基本存儲模型。
產(chǎn)品:Neo4J、InfoGrid、Infinite Graph等。
MongoDB簡介
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
MongoDB是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲比較 復雜的數(shù)據(jù)類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。
MongoDB數(shù)據(jù)架構(gòu)
MongoDB
數(shù)據(jù)庫命名規(guī)范
1.任意UTF-8字符串;
2.不能是空字符串;
3.不得包含以下字符:(空格)、.、$、/、/、/0;
4.長度不得超過64字節(jié);
5.保留字:admin、local、config等;
集合命名規(guī)范
1.任意UTF-8字符串;
2.不能是空字符串;
3.不能包含/0、$;
4.不能以system.開頭;
文檔命名規(guī)范
1.任意UTF-8字符串;
2.不能是空字符串;
3.不能包含/0、$;
4.不能以_開頭;
MongoDB的數(shù)據(jù)類型
MongoDB底層使用Bson來維護數(shù)據(jù),Bson是一種二進制下的類似于Json的數(shù)據(jù)格式。MongoDB中值得一說的有以下幾個數(shù)據(jù)類型:基本數(shù)據(jù)類型、數(shù)組、文檔嵌套及ObjectId。
MongoDB的基本數(shù)據(jù)類型
null | 空 |
bool | true、false |
數(shù)字 | 僅支持64位浮點數(shù),其他類型的數(shù)字會自動轉(zhuǎn)化為此格式 |
字符串 | 支持UTF-8字符集 |
日期 | 存儲標準紀元開始的毫秒數(shù),不含時區(qū) |
regex | 符合JavaScript語法的正則表達式 |
code | 任何JavaScript代碼 |
binary | 可存儲任意字節(jié)數(shù)的字節(jié)數(shù)組,但在Shell中無法使用 |
數(shù)組 | 對象集合或列表在MongoDB可以被存儲為數(shù)組 |
嵌套文檔 | 一個文檔可以包含另外一個文檔 |
MongoDB的
MongoDB 中的數(shù)組既可以作為有序?qū)ο?如列表)來操作,也可以作為無序?qū)ο?如集合)來操作。 MongoDB可以以原子操作的形式來修改或刪除數(shù)組中的元素。
例如:
{
// 這個不是數(shù)組
"Status" : 0,
// 這個是空數(shù)組
"Messages" : [],
// 包含3個元素的數(shù)組
"ResponseBody" : [
"h010t00101025",
"h010t00101039",
"h010t00101040“
]
}
MongoDB的文檔嵌套
文檔式存儲的特色就是允許文檔對象的嵌套,這能夠使我們的實體數(shù)據(jù)在 MongoDB 的存在形式更加自然。
例如:
// 根文檔
{
"Status" : 0,
// 嵌套文檔
"ResponseBody" : {
"CityName" : "北京",
"Keyword" : "釣魚臺",
// 再套一個數(shù)組,數(shù)組的每個元素又是文檔,NB吧!
"Landmarks" : [
{ “Name” : “北京釣魚臺國際旅行社” },
{ "Name" : "釣魚臺“ }
]
}
}
MongoDB的objectid
ObjectId是_id (_id 是 MongoDB 在每個文檔中的默認唯一標識的名稱) 的默認類型。
新聞熱點
疑難解答