Mongodb學習(一)
阿新 • • 發佈:2019-02-06
NoSQL
為什麼使用NoSql?
1.現實
1. 大量的資料。
2. 資料呈現出半結構化或者結構化狀態。
3. 儲存資料的磁碟提取速度增長遠比不上資料量的增長,儲存和分析資料問題越來越大(90年磁碟速度是4.4M/s,現在已經可以達到幾百M/s)。
面對第三個問題,我們可以使用多個磁碟儲存資料,使用時可以並行得提取。
這樣也帶來了一些新的問題:
1. 多個磁碟如果一個損壞,那麼就將導致資料不完整。如果一個磁碟在一年裡損壞的機率為0.01(假設),那麼當只有一個磁碟時,損壞機率只有0.01,完整機率為0.99,如果有10個磁碟,那麼一年內完整的機率為(0.99)**10 = 0.904。所以就需要使用多個磁碟作為備份。
RAID(這也是磁碟列陣的解決方式)
2. 資料分析需要從多個磁碟讀取資料,那麼就需要進行資料的整合。MapReduce
2.RDBMS的解決方式
面對大量的資料,RDBMS可以進行分表
1. 水平分表,將大表按照列分表
分表的方式有:Range, Hash, Key, List and Composite
CREATE TABLE TBL_STUDENT
( ID int default NULL,
NAME varchar(30) default NULL,
BIRTHDAY date default NULL
) engine=myisam
PARTITION BY RANGE (year(BIRTHDAY)) (PARTITION p0 VALUES LESS THAN (1995),
PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999 ) ,
PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
PARTITION p11 VALUES LESS THAN MAXVALUE );
2.豎直分表
相比較水平分表而言,更加複雜,但是效果也更加明顯。
但是,如果在多個大表之間join,將會導致極大的資料處理量,非常不適合處理。
因此開始大量使用NoSQL。
更多關於NoSQL
Mongodb的基本概念
MongoDB (“hu mongo us”)是使用C++ 寫的文件型別的開源資料庫。
Mongodb特性:
它的特點是高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:
*面向集合儲存,易儲存物件型別的資料。
*模式自由。
*支援動態查詢。
*支援完全索引,包含內部物件。
*支援查詢。
*支援複製和故障恢復。
*使用高效的二進位制資料儲存,包括大型物件(如視訊等)。
*自動處理碎片,以支援雲端計算層次的擴充套件性。
*支援RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
*檔案儲存格式為BSON(一種JSON的擴充套件)。
*可通過網路訪問
基本概念:
1. 文件(document)是MongoDB的最基本單元。
例如:
{
"name" : "John Doe",
"address" : {
"street" : "123 Park Street",
"city" : "Anytown",
"state" : "NY"
}
}
文件的約束條件:
1. “_” 開頭的鍵不能作為系統內部保留值。
2. 鍵不能包含 null(\0),”.”,不能以 ($)開頭 。
文件在資料庫中使用BSON格式儲存:
BSON是一個輕量級的二進位制資料格式。MongoDB能夠使用BSON,並將BSON作為資料的儲存存放在磁碟中。
當Client端要將寫入文件,使用查詢等等操作時,需要將文件編碼為BSON格式,然後再發送給Server端。同樣,Server端的返回結果也是編碼為BSON格式再放回給Client端的。
使用BSON格式出於以下3種目的:
效率
BSON是為效率而設計的,它只需要使用很少的空間。即使在最壞的情況下,BSON格式也比JSON格式再最好的情況下儲存效率高。
傳輸性
在某些情況下,BSON會犧牲額外的空間讓資料的傳輸更加方便。比如,字串的傳輸的字首會標識字串的長度,而不是在字串的末尾打上結束的標記。這樣的傳輸形式有利於MongoDB修改傳輸的資料。
效能
最後,BSON格式的編碼和解碼都是非常快速的。它使用了C風格的資料表現形式,這樣在各種語言中都可以高效地使用。