APP項目在制作時,MongoDB是目前IT行業(yè)非常流行的種非關系型數(shù)據(jù)庫(NoSQL),其靈活的數(shù)據(jù)存儲方式得到了IT從業(yè)人員的青睞。但其設計理念和使用方法是有別于傳統(tǒng)的SQL數(shù)據(jù)庫的,學習這些特陸將幫助開發(fā)人員更好地使用MongoDB。深圳APP開發(fā)公司就MongoDB的架設操作方法整理如下:
·核心機制。
·入門知識。
·高可用集群。
·LBS地理位置查詢。
·MongoDB 3.0的新特性
APP開發(fā)對于MongoDB數(shù)據(jù)庫簡介
MongoDB是一個介于關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫之間的產品,是非關系型數(shù)據(jù)庫當中功能最豐富、品像關系型數(shù)據(jù)庫的數(shù)據(jù)庫。其是掃1Ogen公司基c++語言編寫,旨在提供可擴展的高性能數(shù)據(jù)存儲解決方案。知名的IT公司中使MougoDB來構建自己的核心應用有,Foursquare、eBav、Lisco、MetLife、Adobe等,國內也有眾多的團隊將MougoDB作為首選數(shù)據(jù)庫。
MongoDB支持的數(shù)據(jù)結構非常松散,數(shù)據(jù)采用bsori格式,可以存儲比較復雜的數(shù)據(jù)類型。bsori是由1Ogen開發(fā)的一個數(shù)據(jù)格式,目前主要用于MongoDB中,是MongoDB的數(shù)據(jù)存儲格式。
MongoDB的主要特點如下:
·讀寫性能高。
·靈活的文檔模型給開發(fā)帶來的方便。
·水平擴展機制能輕松應對從百萬到十億級別的數(shù)據(jù)量處理,這也是MongoDB名字來源于單詞humougous(極大的)的原因
深圳APP開發(fā)公司程序員在下面的文章中會為讀者詳細介紹MongoDB的這些特點。
制作APP關于MongoDB數(shù)據(jù)庫的核心機制解析:
博納網(wǎng)絡本文介紹MongoDB高性能背后的兩個機制:hnvIAP(內存文件映射)和journal日志
APP開發(fā)使用數(shù)據(jù)庫經驗之MMAP(內存文件映射)
MongoDB使用了操作系統(tǒng)提供的hmIAP(內存文件映射)機制進行數(shù)據(jù)文件的讀寫,MMAP把文件直接映射到進程的內存空間,這樣文件就會在內存中有對應的地址,這時對文件的讀寫是能通過操作內存進行的,而不需要使用傳統(tǒng)的如fread、fwrite文件操作方式。
傳統(tǒng)的文件操作流程:某個進程要讀取硬盤上的數(shù)據(jù),需要先把硬盤上的數(shù)據(jù)復制到內核緩沖區(qū),再復制到進程的內存空間,如圖8-1
APP開發(fā)者需要注意:miAP只是把文件映射到進程空間,并不是全部映射到內存,只有訪問到的數(shù)據(jù)才會被操作系統(tǒng)轉移到內存。但是因為內存是有限的,MongoDB雖然可以存儲比內存更大的數(shù)據(jù),但是對于熱數(shù)據(jù)(也就是需要存放在內存中的數(shù)據(jù))不建議超過內存的大小。當熱數(shù)據(jù)超過內存的大小,操作系統(tǒng)內存管理機制會把使用頻率最低的數(shù)據(jù)換到交換分區(qū)( Swap),這種來回的數(shù)據(jù)切換嚴重影響了MongoDB的性能。
當MongoDB需要插入新記錄時,通過MMAP把數(shù)據(jù)庫文件映射到內存后進行操作。MongoDB默認是每分鐘把內存中映射的數(shù)據(jù)刷到磁盤,也可以通過啟動參數(shù)“svncdelav”控制這個頻率。另外,即使MongoDB;F把內存映射的數(shù)據(jù)刷到磁盤,操作系統(tǒng)也會定期把修改過的數(shù)據(jù)刷到磁盤,Linux的dirtv writeback centisecs,參數(shù)用于定義臟數(shù)據(jù)在內存停留的時間(默認為500,即5秒),過了這個時間臟數(shù)據(jù)就會被系統(tǒng)刷到磁盤上。
MongoDB使用了MMAP的機制把大量的文件操作部交給操作系統(tǒng)完成,大大減輕了MongoDB開發(fā)著的負擔。
APP開發(fā)經驗之Journal日志
我們通過前面的介紹可以了解到MongoDB通過MMAP機制.數(shù)據(jù)會在內存中停留一段時間,如果在這段時間內系統(tǒng)宕機數(shù)據(jù)還沒來得及刷到硬盤,那么這些修改的數(shù)據(jù)不就丟失了嗎?
MongoDB內部通過journal日志解決了這個問題。MongoDB的所有數(shù)據(jù)更新操作會記錄并保存到journal日志,journal日志保存在dbpath路徑中的journal文件夾中。當系統(tǒng)宕機后MongoDB重啟時,通過journal日志上的操作記錄,就能把數(shù)據(jù)恢復。
MongoDB數(shù)據(jù)庫入門
MongoDB的設汁思想和MySQL是有很大區(qū)別的,其基于MongoDB的文檔型系統(tǒng),衍生出系列不同的特性,由此出產生了有別于MySQL的應用場景。
MongoDB是面向文檔的數(shù)據(jù),放棄關系模型的原因是為了更靈活的擴展性,當然還有別的好處,例如,MySQL中為了方便增加某個產品的額外屬性,需要把產品的額外屬性拆分到另外一張表中,以便進行連接查詢。因此,對于額外屬性的增加、刪除、修改都很麻煩,需要更多額外的操作。
移動互聯(lián)網(wǎng)項目需求經常變動和發(fā)展,關系模型的僵硬性有時不太適合這種項目。更何況移動互聯(lián)網(wǎng)項目經常需要在線修改數(shù)據(jù)表的結構,對于上千萬甚至上億規(guī)模的數(shù)據(jù)表來說,里面的風險和對在線服務的影響很大。
用MongoDB就能很簡單地解決上面的問題。
MongoDB把關系模型轉變?yōu)槲臋n模型,基本思路是把原來的行變?yōu)楦`活的文檔模型,文檔的鍵不是固定的,也不會事先定義。文檔是MongoDB的核心,多個鍵值組合在起就是文檔。文檔以bjosn格式存儲,bson基于JSON格式,MongoDB選擇JSON進行改造的主要原因是JSON的通用性及JSON的無模式的特性。
MongoDB中集合就是組文檔如果說MongoDB中的又檔類似于關系數(shù)據(jù)的行,那么集合就類似于表。
MongoDB中多個文檔組成集合,同樣多個集合也會組成數(shù)據(jù)庫。一個MongoDB實例中可以有多個數(shù)據(jù)庫,它們是相互獨立的,每個數(shù)據(jù)庫有獨立的權限設置。每個數(shù)據(jù)庫名最終會變成硬盤上的文件名。MongoDB中下面的3個數(shù)據(jù)庫名是保留的
最后總結下MongoDB的數(shù)據(jù)結構與MvSQL的數(shù)據(jù)結構的映射對應關系。
好了,深圳APP開發(fā)公司關于MongoDB的數(shù)據(jù)庫的介紹以及使用入門,本文就介紹到這里,博納網(wǎng)絡會在下期的文章中重點介紹詳細使用方法。