本節書摘來異步社區《大數據存儲:實戰指南》一書中的第1章,第1.6節,作者: 郭遠威 , 彭文波 責編: 陳冀康,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
1.6 特點
大數據存儲:實戰指南
它的存儲模型與關系數據庫的比較如表1-1所示。
關系數據庫中最基本的單元是行,而中最基本存儲單元是,典型結構如下所示。
{

"_id" : ObjectId("51e0c391820fdb628ad4635a"),
"author" : { "name" : "Jordan","email" : "Jordan@123.com" },
"postcontent" : "jordan is the god of basketball",
"comments" : [
{"user" : "xiaoming", "text" : "great player"},

{ "user" : "xiaoliang", "text" : "nice action" }
]
}
它用與JSON格式類似的鍵值對來存儲(在中叫BSON對象),其中值的數據類型有常見的字符串、數字、日期,還可以是BSON對象、數組以及數組的元素,也可以是BSON對象,通過這種嵌套的方式,使的數據類型變得相當豐富。
與傳統關系數據庫還有一個重大區別就是:可擴展的表結構。也就是說(表)中的(一行記錄)所擁有的字段(列)是可以變化的,下面文檔對象(一行記錄)比上面列出的文檔對象(一行記錄)多一個time字段,但它們可以共存在同一個(表)中。
{
"_id" : ObjectId("51e0c391820fdb628ad4635a"),
"author" : { "name" : "Jordan","email" : "Jordan@123.com" },
"postcontent" : "jordan is the god of basketball",

"comments" : [
{"user" : "xiaoming", "text" : "great player"},
{ "user" : "xiaoliang", "text" : "nice action" }
],
"time": "2013-07-13"

}
查詢語句不是按照SQL的標準來開發的,它圍繞JSON這種特殊格式的文檔型存儲模型開發了一套自己的查詢體系,這就是現在非常流行的NoSQL體系。關系數據庫中常用的SQL語句在中都有對應的解決方案。當然也有例外,不支持JOIN語句。我們知道傳統關系數據庫中JOIN操作可能會產生笛卡爾積的虛擬表,消耗較多系統資源,而的文檔對象集合可以是任何結構,我們可以通過設計較好的數據模型盡量避開這樣的操作需求。如果真的需要從多個(表)中檢索數據,那我們可以通過多次查詢得到。
在關系數據庫中經常用到的group by等分組聚集函數,在中也有,而且提供了更加強大的方案(提出的并行編程),為海量數據的統計、分析提供了便利。
支持日志功能,對數據庫的增、刪、改操作會記錄在日志文件中。每100ms將內存中的數據刷到磁盤上,如果意外停機,在數據庫重新啟動時,能通過日志功能恢復。
支持復制集(),一個復制集在生產環境中最少需要3臺獨立的機器(測試的時候為了方便可能都部署在一臺機器上),一臺作主節點()stm32庫開發實戰指南 百度云,一臺作次節點(),一臺作仲裁節點(只負責選出主節點),備份、自動故障轉移stm32庫開發實戰指南 百度云,這些特性都是復制集支持的。
支持自動分片,分片的功能實現海量數據的分布式存儲,分片通常與復制集配合起來使用,實現讀寫分離、負載均衡,當然如何選擇片鍵是實現分片功能的關鍵。如何實現讀寫分離我們后面會詳細分析。
總之,最吸引人的地方應該就是自由的表結構、、分片、復制集,通過這些功能實現海量數據的存儲、高效地讀寫以及數據的分析。