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