1. 程式人生 > >mongodb之淺析效能&應用場景-1

mongodb之淺析效能&應用場景-1

筆者經驗尚淺,對於NOSql也是2014年初才正式接觸,並且很遺憾的是,接觸也只是自我學習為主,還未真正涉及到專案運用中。所以這裡標題也用到了淺析二字。如有大牛接觸過,且有幸被搜尋引擎抓到,還請大牛不吝賜教或指點一二。

1.在NoSql領域中其實存在很多解決方案。除去Mongodb 還有 HBase、memcacheDB、neo4J等,但是這幾種的設計模式各有千秋,也就是實現方式有所不同。如:Key-value、列儲存、文件儲存、圖儲存、物件儲存、xml儲存等,說白了就是儲存的資料模型不同,但是其實都是NoSql的實現。

2.接觸較多以及較為廣泛的、或者是說較為人知的一個NoSql:mongodb,曾記得是一個南京的朋友向我提起過。我這人有個毛病就是如果別人說的技術我不會,我總會記錄下來,然後不停的利用搜索引擎去需求講解以及demo。當然這些也只能暫時停留在基礎認知方面,對於真實在實際生產中是如何應用的,或者是在整體專案架構中其到底扮演什麼角色還是難以明白,以及NoSql對於目前的關係資料庫有哪些優點和不足還是不清楚。

3.其實筆者事先在網上也查了很多關於此方面的資料(mongodb 與 Mysql 的比較),並且通過實驗也大概明白了或者說基本懂了mongodb的優勢以及應用場景,所以筆者為了記錄自己學習mongodb的過程要求自己寫下部落格作為記錄。

4.網上有篇博文明確的給出了mongodb和mysql 在插入查詢以及更新效能上做了比較:

http://blog.csdn.net/e421083458/article/details/8849247

大家可以去看看,上面說mongodb在速度上是mysql的2倍,其實正如大多數人來說2倍好像有點少了,的確其實我也感覺才2倍,雖然隨著資料量的越來越大 速度的倍數肯定會增加,但是、、、、。因此自己還是需要自己親身做一下實驗。

程式設計工具:eclipse

語言:java 6.0

資料庫:Mysql  5.1

NoSql:mongoDb    win32-i386-2.6.1

驅動 Jar包:mongo-2.10.1.jar mysql-connector-java-5.1.6-bin.jar

測試1【單條插入】


測試2【100條插入-一個連線】

測試3【1000條插入-一個連線】

測試4【1000條插入-一個連線 mysql採取JDBC批量操作】

測試5【100萬條插入-一個連線 mysql採取JDBC批量操作】


以上資料我就不分析了。可想而知如果100萬條資料 如果我不用批量操作 那麼那將有多慢啊!!!!!!

其實在web的應用場景下,併發問題就是同時多個數據庫連線來對資料庫進行操作,但是這些資料並不可以使用批量操作這樣的場景來處理。

所以高併發其實類似於jdbc的 for迴圈單個插入提交一樣,而且速度會更慢。如果是這樣的話,那麼這種情況 mongodb的效率就是很高的,而且面臨高併發基本上沒有什麼壓力。

資料庫模式:使用者建立連線-資料庫引擎接受-資料庫引擎解析sql語法-對映資料模型以及關係-建模並IO插入資料庫儲存檔案

NoSql模式:使用者建立連線-NoSql引擎接受-建模IO插入檔案

其實我們可以認為 NoSql速度上比關係資料庫快 在於 資料庫引擎解析sql語法-對映資料模型以及關係-   時間都花在這些上面,當然這只是概念的說明一下,其實關係資料庫插入一條資料要比這個複雜的多,也包括事務、索性、檢查等一系列操作。

其實我們可以發現在 jdbc批量插入的原理是  將sql語句初始化好-然後將多條插入語句一併提交到資料庫-資料庫統一解析,最終入庫 然後返回使用者結果。所以批量操作節約的時間在於 傳送sql 資料庫引擎接受 以及返回結果這樣的時間。所以資料在傳送到資料庫的過程中相當耗時以及在資料中資料插入的一個整體流程中。(跑題了)

那麼我們知道了這些 ,我們可以分析一下Nosql的應用場景了。

mongo使用場合

    mongodb的主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集兩者的優勢於一身。mongo適用於以下場景:

  1.網站資料:mongo非常適合實時的插入,更新與查詢,並具備網站實時資料儲存所需的複製及高度伸縮性。

  2.快取:由於效能很高,mongo也適合作為資訊基礎設施的快取層。在系統重啟之後,由mongo搭建的持久化快取可以避免下層的資料來源過載。

  3.大尺寸、低價值的資料:使用傳統的關係資料庫儲存一些資料時可能會比較貴,在此之前,很多程式設計師往往會選擇傳統的檔案進行儲存

  4.高伸縮性的場景:mongo非常適合由數十或者數百臺伺服器組成的資料庫。

  5.用於物件及JSON資料的儲存:mongo的BSON資料格式非常適合文件格式化的儲存及查詢。

  6.重要資料:mysql,一般資料:mongodb,臨時資料:memcache

  7.對於關係資料表而言,mongodb是提供了一個更快速的檢視view;而對於PHP程式而言,mongodb可以作為一個持久化的陣列來使用,並且這個持久化的陣列還可以支援排序、條件、限制等功能。

 8.將mongodb代替mysql的部分功能,主要一個思考點就是:把mongodb當作mysql的一個view(檢視),view是將表資料整合成業務資料的關鍵。比如說對原始資料進行報表,那麼就要先把原始資料統計後生成view,在對view進行查詢和報表。從這個意義上,mongodb提供了一個更快速,更使用的view

不適合的場景:

  a.高度事物性的系統:例如銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用程式。

  b.傳統的商業智慧應用:針對特定問題的BI資料庫會對產生高度優化的查詢方式。對於此類應用,資料倉庫可能是更合適的選擇。

  c.需要SQL的問題

  D.重要資料,關係資料

這裡需要注意的是:在實際專案中為了減小開銷傳統關係資料庫在web開發中  會採取連線池的方式 提高效率,而在mongodb中mongo例項化其實就是一個連線,預設貌似是10個,高併發會採取佇列的方式等待 執行緒安全,當然去生產環境肯定是需要配置的,否則會發生問題,且下載的mongo 32位的 預設儲存只是2個G左右(官方有詳細說明),後續增加就會報錯。(http://blog.csdn.net/aegoose/article/details/22396243)

~~~~僅供參考 後續將對mongodb分散式進行研究,也就是多個mongodb分散式方案,目的進一步提高效率

以及會對各大型網站架構中mongodb所扮演的角色進行分析,從而定位大型專案中的角色。

(個人微訊號)  (技術公眾號)

相關推薦

mongodb淺析效能&應用場景-1

筆者經驗尚淺,對於NOSql也是2014年初才正式接觸,並且很遺憾的是,接觸也只是自我學習為主,還未真正涉及到專案運用中。所以這裡標題也用到了淺析二字。如有大牛接觸過,且有幸被搜尋引擎抓到,還請大牛不吝賜教或指點一二。1.在NoSql領域中其實存在很多解決方案。除去Mongo

Atitit 文件資料的摘要與壓縮技術總結abstract tech v4 目錄 1. 概念包含了原文字中的重要資訊,其長度不超過或遠少於原文字的一半” 1 2. 1. 摘要的作用 應用場景 1 2

Atitit 文件資料的摘要與壓縮技術總結abstract tech v4   目錄 1. 概念包含了原文字中的重要資訊,其長度不超過或遠少於原文字的一半” 1 2. 1. 摘要的作用 應用場景 1 2.1. 如自動報告生成、新聞標題生成、搜尋結果預覽等。此外

OCR原理淺析應用場景

  OCR原理淺析 從整體上來說,OCR一般分為兩個大步驟:影象處理以及文字識別。 參考:OCR 技術淺析         OCR應用場景 OCR是技術,基於OCR的應用場景就非常多了。比如:ocr綜合文

Mysql和Mongodb的區別與應用場景對比

寫入 通過 原子 love 區別 擴展 屬於 這樣的 管理 MySQL是關系型數據庫 優勢: 在不同的引擎上有不同 的存儲方式。 查詢語句是使用傳統的sql語句,擁有較為成熟的體系,成熟度很高。 開源數據庫的份額在不斷增加,mysql的份額頁在持續增長。 缺點: 在海量數據

Storm:流式處理框架特性與應用場景

      資料時代的今夕,如秋風席捲落葉漫天紛飛,storm願做繫鈴人解之庖丁。       一、是什麼       Storm是一個分散式的資料流處理系統。它會把工作任務委託給不同型別的元件,每個

java反射機制的業務應用場景-1

       好久不寫東西,最近整理之前的東西時發現以前有一些寫好的東西,其實都是一些學習筆記或是對某個技術理解的一些感想,覺得很有意思,拿出來和大家分享一下。        這篇文章我們先來說一下java的反射機制,java的反射機制其實在1.2的時候就已經有了,那時我們

MapReduce程式設計Join多種應用場景與使用

這裡主要分析一下reduce join的一些不足。之所以會存在reduce join這種方式,是因為整體資料被分割了,每個map task只處理一部分資料而不能夠獲取到所有需要的join欄位,因此我們可以充分利用mapreduce框架的特性,讓他按照join key進行分割槽,將所有join key相同的記錄

淺析軟體成本估算NESMA方法的3種應用場景(轉載)

NESMA為荷蘭軟體度量協會的簡稱(Netherland Software Measurement Association),NESMA功能點方法是五種ISO國際功能點標準之一,不但易學易用、快速、經濟,而且容易開發和建立使用者自己特有的估算模型。 在五種國際標準中,只有NESMA方法定

淺析軟體成本估算NESMA方法的3種應用場景

NESMA為荷蘭軟體度量協會的簡稱(Netherland Software Measurement Association),NESMA功能點方法是五種ISO國際功能點標準之一,不但易學易用、快速、經濟,而且容易開發和建立使用者自己特有的估算模型。 在五種國際標準中,只有NESMA方法定

Mysql和MongoDB效能對比及應用場景分析

一、前言 為什麼調研MongoDB?   下圖是DB-Engines2017年8月資料庫的排名統計,可以看到MongoDB總排名在第5,在Nosql資料庫中排名第1。 優點: 1)社群活躍,使用者較多,應用廣泛。 2)MongoDB在記憶體充足

如何選擇版本控制系統二---Git的研發應用場景

版本控制系統 git 華為軟件開發雲 之前寫了一篇《如何選擇版本控制系統 ---為什麽選擇Git版本控制系統》,地址是:http://laoyudage.blog.51cto.com/12854334/1927409,有興趣的可以去看看,本篇文章算是這個系列的第二篇文章。Git誕生於2002年,由

第8章 傳輸層(1)_TCP/UDP協議的應用場景

一個數 選擇 str 根據 connect .cn eight 安全 器) 1. 傳輸層的兩個協議 1.1 TCP和UDP協議的應用場景 (1)TCP協議:如果要傳輸的內容比較多,需要將發送的內容分成多個數據包發送。這就要求在傳輸層用TCP協議,在發送方和接收方建立連接

MapReduce編程Semi Join多種應用場景與使用

得出 mon comm exception strong 相關 path 區別 rep Map Join 實現方式一 ● 使用場景:一個大表(整張表內存放不下,但表中的key內存放得下),一個超大表 ● 實現方式:分布式緩存 ● 用法: SemiJoin就是所謂的半

Ngnix技術研究系列1-通過應用場景看Nginx的反向代理

emca pid 開頭 plain 性能 xxx md5 重新 行數 隨著我們業務規模的不斷增長,整個系統規模由兩年前的幾十臺服務器,井噴到現在2個數據中心,接近400臺服務器,上百個WebApi站點,上百個域名。 這麽多的WebApi站點這麽多的域名,管理和維護成本很高

Andoid硬件訪問服務1(讓Andoid應用程序訪問c庫)

es2017 項目 ktr 按鈕 jint 開發板 height eight sign andoid 項目文件結構圖 新建Hardcontrol.java package com.thisway.hardlibrary; public class Har

Zookeeper應用場景分布式屏障Barrier

pri worker use int 休眠 沒有 分布 eat demo Barrier就是柵欄或者屏障,適用於這樣的業務場景:當有些操作需要並行執行,但後續操作又需要串行執行,此時必須等待所有並行執行的線程全部結束,才開始串行,於是就需要一個屏障,來控制所有線程同時開始,

Java設計模式《單例模式》及應用場景

urn vol 運行 www 同步問題 href 外部 占用 模式 轉載參考:http://www.cnblogs.com/V1haoge/p/6510196.html 所謂單例,指的就是單實例,有且僅有一個類實例,這個單例不應該由人來控制,而應該由代碼來限制,強制單例。

Java設計模式《外觀模式》及應用場景

nbsp str 之間 系統設計 static 系統 被調用 sub div 轉載參考:http://www.cnblogs.com/V1haoge/p/6484128.html 1、外觀模式簡介   外觀模式,一般用在子系統與訪問之間,用於對訪問屏蔽復雜的子系統調用,采用

Linux運維NFS網絡文件系統功能介紹及應用場景

Linux運維 Linux入門 Linux基礎 Linux雲計算   NFS網絡文件系統主要功能是通過網絡使不同的主機系統間可以共享文件或目錄。客戶端可以將NFS服務器端共享的數據目錄掛載到客戶端本地系統中。從客戶端本地看,NFS服務器端共享的目錄就好像是客戶端自己的磁盤分區或目錄一樣,而實際

js閉包應用場景

泄露 應用場景 bject 作用 nbsp 方法 函數表達式 激活 參數 閉包的解釋 一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。閉包是指有權訪問另一個函數作用域的變量的函數 在javascript中,只有函數內部的子