NoSQL資料庫學習筆記之 初識MongoDB

2021-06-18 16:55:45 字數 2485 閱讀 8902

mongodb是應用最為廣泛的文件資料庫,也是目前最熱門的nosql資料庫之一。 mongodb由c++語言編寫,旨在提供可擴充套件的高效能資料儲存解決方案。mongodb的定位是介於關係型資料庫和key value資料庫之間的資料庫產品。也就是說,mongodb的目標是既能夠像關係型資料庫那樣提供較複雜的查詢操作,又能夠像key value資料庫那樣保持高效能和可擴充套件性的特點。

mongodb以bson格式儲存資料(文件),bson是binary json的縮寫,是一種類json的二進位制儲存格式。和json一樣,bson也支援內嵌文件物件和陣列物件。mongodb的操作都使用json風格語法,客戶端提交和接收的資料都使用json形式來展現,較sql更加直觀,容易理解和掌握。

物件導向開發方式是當今企業級應用開發環境中的主流開發方法,開發者通常以物件的方式對業務實體進行建模,而關係型資料庫中的資料以關係模型進行儲存,所以開發者需要在物件——關係——物件之間來回變換。每個物件導向程式設計語言中都會有orm工具,然而,即使使用工具,orm仍然非常耗時。借助於bson,mongodb可以以物件導向的方式儲存和管理資料,這使得應用**層和資料庫層在資料模型上保持一致,從而消除了複雜的

作為乙個文件資料庫,mongdb的最小資料儲存單位是文件,乙個文件相當於關係型資料庫中的一行記錄。多個文件組成乙個集合(collection),乙個collection相當於關係型資料庫中的一張表。但是,collection和表有很大的不同,mongodb中的collection沒有固定的結構,也就是說,同一collection的文件包含的字段個數、欄位名、欄位的資料型別都可以不同。而且,每個文件包含的字段可以動態地新增和刪除,不會影響同一collection的其他文件。實際應用中,通常會把同類文件存放在乙個collection中,同一collection中的文件一般具有類似的結構,但這不是必需的。flexible schema特性使得資料模式的改變和擴充套件變得非常容易,不需要像關係型資料庫中那樣用「alter table」語言改變整張表的結構。

在傳統關係型資料庫中,乙個count型別的操作會鎖定資料集,這樣可以保證得到「當前」情況下的準確值。在某些應用場景,如atm查賬和火車票預訂,這種「高精確性」是必須保證的。然而,在很多web應用中,比如我要檢視對某件電子產品的評價,這種「高精確性」是沒有意義的,反而會產生很大的延遲。相對於精確性,這些web應用更看重訪問效能。mongodb保證資料的最終一致性,資料最終一致,但無需時時一致,容許資料一定時間上的不一致,從而提高系統效能。

mongodb是nosql資料庫當做查詢功能最豐富的, mongodb不支援sql,其自身的查詢語言非常強大,語法有點類似物件導向的語言,幾乎可以實現類似關係型資料庫單錶查詢的絕大部分功能,並支援索引。對有索引的字段進行查詢並不比關係型資料庫(如mysql)慢,而對非索引欄位的查詢則勝於關係型資料庫。

mongodb不支援join操作,如果想在多個collection中檢索資料,那就必須做多次查詢,然後在客戶端完成連線。mongodb支援複雜的資料結構(文件),設計資料模型時可以輕易地對資料進行de-normalize,這樣可以避免對多個collection的查詢,同時讓資料庫中的資料模型和應用程式中的物件更加一致。當然,這必然會增加資料冗餘,可以看做是資料冗餘和開發簡易性之間的tradeoff.

mongodb的持久化是通過記憶體對映(

mmap)方式實現的,mongodb的所有資料檔案都是通過記憶體對映方式進行操作的。其實,這裡mongdb是偷懶了,它將快取工作交給作業系統處理。所以,mongdb的持久化是通過對記憶體對映的資料檔案執行fsync來保證的。fsync操作將記憶體中有變更的資料寫到對應的磁碟檔案上。mongdb可以指定某一時間間隔(預設60秒)呼叫fsync,也可以手動強制進行fsync操作。每次寫操作可以單獨設定資料持久化級別。

僅使用mmap進行持久化存在乙個問題:在兩次fsync之間,如果系統停機,那麼這段時間內的修改就丟失了。而且如果停機發生在fsync進行時,可能會出現一部分資料更新了,而另一部分沒有更新的情況。為了解決這個問題,mongodb從2.0版本開始提供journaling日誌功能(預設開啟)。jornaling通過預寫式的redo日誌為mongodb增加額外的可靠性。資料庫的資料變更操作會首先寫入journaling日誌,定期集中提交(目前是每100ms)。如果資料庫意外停機,系統重啟時會通過重演journaling日誌恢復mongodb的一致狀態。一次成功fsync之後,現有的journaling日誌就沒有用了,所以mongodb每次正常停機都會清空journaling日誌,因為正常停機會進行一次完整的fsync操作,將資料檔案同步到磁碟上。 journaling增強了mongodb的安全性,當然,它會輕微影響效能。

適用:1. 日誌。企業環境下,每個應用程式都有不同的日誌資訊,mongodb適合用於儲存不同結構的日誌資訊。

2. 複雜分析。mongodb的flexible schema特性使其可以儲存實體的不同特徵,且可以新增新的特徵,而不需要修改模式。

不適用:

mongodb不支援事務特性,所以對事務要求嚴格的系統都不適合適用mongodb,如銀行系統、購票系統等;

部署mongodb的企業/產品有:**、大眾點評、盛大、sap(ecm of paas)、github、sourceforge.

資料庫之初識(一)

什麼是資料庫 資料庫 database db 概念 簡而言之可視為電子化的檔案櫃 儲存電子檔案的處所,使用者可以對檔案中的資料執行新增 擷取 更新 刪除等操作。作用 儲存資料,管理資料。資料庫的分類 關係型資料庫 sql mysql oracle sql server db2 sqllite 通過表...

Python學習筆記之初識webpy

1.python 2.7版本 建議先學2.7的版本 配置環境變數在path中新增d python d python scripts 對應你安裝python的路徑 3.查詢安裝的服務 pip list 4.安裝服務命令 pip install web.py 5.進入官網 hello world例子測試...

大資料系列 Spark學習筆記之初識Spark

不完全對 因為我們只能使用spark core代替mr做離線計算,資料的儲存還是要依賴hdfs spark hadoop的組合,才是未來大資料領域最熱門的組合,也是最有前景的組合!容易使用 一站式解決方案 可以執行在任意的平台 只提供兩個操作,map和reduce,表達力欠缺 乙個job只有map和...