mongodb相关
一.?簡介。
??? Mongo是一個高性能,開源,無模式的文檔型數據庫。其名字來自humongous這個單詞的中間部分,從名字可見其野心所在就是海量數據的處理。
和mysql一樣,一個mongod服務可以建立多個數據庫。每個數據庫可以有多張表,這里的表成為collection,每個collection可以存放多個文檔(document),每個文檔都以bson(binary json)的形式存放于硬盤中。跟關系型數據庫不一樣的地方時,他是以單文檔為單位存儲的,你可以任意的給一個或一批文檔新增或刪除字段,而不對其他文檔造成影響,這就是所謂的schema-free,也是文檔型書苦苦最主要的優點。跟一般的key-value數據庫不一樣的是,它的value中存儲了結構信息,所以你也可以像關系型數據庫那樣對某些域進行讀寫、統計等操作。可以說是兼備了key-value數據庫的方便高效與關系型數據庫的強大功能。
和關系型數據庫類似,mongodb可以對某個字段建立索引,可以建立組合索引、唯一索引,當然建立索引就以為著增加空間開銷。所以個人建議就是將一個文檔作為一個對象來考慮,在線上應用中通常只對對象id建立一個索引就可以了、根據id取出對象數據放在memcache中。默認情況下每個collection隊會有一個唯一索引:_id,如果插入數據時沒有指定_id,服務會自動生成一個_id,為了充分利用已有索引,減少空間開銷,最好是自己指定一個unique的key為_id,通常用對象的id比較合適。
Mongodb允許在建表之初就指定一定的空間大小,接下來的插入操作會不斷的按照順序append數據再這個預分配好的空間中,如果超出這個大小,則回到文件頭覆蓋原來的數據繼續插入。這種結構保證了插入和查詢的高效性,它不允許刪除單個記錄,更新的也有限制:不能超過原有記錄的大小。
Monogodb的復制架構和mysql很類似,除了包括master-slave構型和master-master構型之外,還有一個replica pairs構型,這種構型在平常可以像master-slave那樣工作,一旦master出現問題,應用會自動連接slave。
千萬級的數據mongodb的性能插入效率是mysql的20倍,查詢效率也是好幾倍。缺點是磁盤空間占用率。
GridFS是mongodb一個很有趣的類似文件系統的東西,它可以用一大塊文件空間來存放大量的小文件,不過性能以及其他方面還沒有作深入的嘗試。
Monogodb不支持事務操作。支持分片不過還未研究。
總結:面向集合的存儲、動態查詢、完整的索引支持、查詢監視、復制及自動故障轉移、搞笑的傳統存儲方式、自動分片以及支持云級別的伸縮性。
二.?場景。
適合于
1.?網站數據,mongo非常適合實時的插入.
2.?緩存,由于性能很高,Monogo也適合作為信息基礎設施持久化的緩存層。
3.?大尺寸、低價值的數據。這類數據用傳統的關系型數據庫代價比較大。
4.?高伸縮的場景,Monogo非常適合由數十臺或數百臺服務器組成的數據庫。
5.?用于對象及json數據的存儲。
不適于
高度事務性的系統。
?
三.?性能分析
1.?先從單線程的角度來測試
?????????模式:單master。非嵌入式。目標地址192.168.140.2,端口27017
?????????空間初始大小:
?????????
?????????插入速度:
?????????初始狀態
?????????
?
?????????插入動作執行10秒后:
????????
?????????平均每秒插入1w6條數據,每條數據的大小在4k以內。
??????
?
??????插入后占用空間:
??????????
?
?????????讀取速度:
??????????
??????大概在3500-4000間浮動
????????
??????數據的場合
??????
?
模式:主從master-slave。非嵌入式。目標地址192.168.140.2,端口主27017,從27018
空間初始大小:
主:
??????????
?????從:
?????????
?
?????插入速度:
?????????初始狀態
???????????
?
?????????插入動作執行10秒后:(只插入主庫)
?????????
?????????影響不大
?????????
30w數據占用的空間????????????????????????
?
?????????
??????讀取速度:
?????????
?????????模式對性能上的影響不大。
?
?
??????下面再看看mm模式,雙向同步
模式:主從master-master。非嵌入式。目標地址192.168.140.2,端口主27017,主27018
?
初始空間:
?
插入速度:
?????????初始狀態
?????????
?
?????????插入動作執行10秒后:
?
性能大概降低了一半
?
32w數據占用的空間?????????????????????????????
?
?
讀取速度:
大體不變。
?
?
?
下面拿ms模式來試下多線程的情況
開了3個線程10秒插入數據量
?
開了2個進程10秒插入數據量
?
?
讀取數據不變。
?
??????????
在服務器端直接安裝程序讀寫本地庫
?
讀取速度相當可觀相當贊。
10秒寫入速度不變
?
?
?
測試中發現的不穩定問題點:
開啟2個進程測試讀取速度時程序堵塞過一次。
?
刪除操作時,ms模式同步不及時
?
?
主:
?
?從
?
?
?
?
?
本文轉自 熬夜的蟲子 ?51CTO博客,原文鏈接:http://blog.51cto.com/dubing/712438總結
- 上一篇: Mysql通信协议
- 下一篇: 参数cluster_interconne