MongoDB與PostgresQL無責任初步測試


PostgresQL一秒能插入多少條記錄,MongoDB呢?讀取的情況又如何?我寫了一些簡單的程序,得出了一些簡單的數據,貼在這里分享,繼續往下閱讀前請注意下本文標題中的“無責任”,這表示此測試結果不代表真實的生產環境下的情況,只能說給大家一個比較直觀的概念,可用於設計架構時候的估算。(量級上來說應該基本上是正確的)

本次測試選擇的服務器環境為:

  • VMWare虛擬機(雙核,4G內存)
  • CentOS 7
  • MongoDB 3.2
  • PostgresQL 9.4
  • 客戶端均為Java版
  • 單線程客戶端

插入數據比較簡單,PostgresQL中創建這么一張表:

CREATE TABLE realtime(
    id BIGINT PRIMARY KEY,
    longtitude DOUBLE PRECISION,
    latitude DOUBLE PRECISION,
    velocity DOUBLE PRECISION,
    soc DOUBLE PRECISION
);

對應地,MongoDB中的Document大致如此:

{
    "_id" : NumberLong(1458587322),
    "longitude" : 0.5812149460333115,
    "latitude" : 0.23716701482457414,
    "velocity" : 0.9920389498763238,
    "soc" : 0.6602090307636349
}

數據隨機生成,只有id為索引。

插入100萬條數據

  • MongoDB(帶ACK)——約300秒(約3300條/秒
  • MongoDB(無ACK)——約35秒(月28000條/秒
  • PostgresQL——約670秒(約1500條/秒

不帶ACK的MongoDB的速度大約是PostgresQL的20倍,寫入條目數可輕松破萬。

隨機查詢(無索引,600萬條數據)

  • MongoDB——約2秒
  • PostgresQL——約0.5秒

這次PostgresQL占優,速度大約是MongoDB的4倍。

順序讀取一萬條數據

  • MongoDB——約0.1秒
  • PostgresQL——約0.5秒

這次MongoDB占優,速度大約是PostgresQL的5倍。

也許你說MongoDB和PostgresQL是兩種不同截然的數據庫系統啊,干嘛放一起比?我當然知道,所以才拿出來比,(呵呵)比較后才知道什么情況下用什么樣的數據庫,怎么樣才能將其能力發揮到最好嘛,對不對?於是有了下面這些“無責任”的結論(或者說小小建議了):

  • PostgresQL功能強大通用性好可靠性高適用面廣(嗯?我的測試並未反映出這點啊?請執行忽略掉這些細節)
  • MongoDB適合於邏輯簡單,存儲量大,性能要求高,而可靠性要求相對不高的場合
  • 存儲量巨大的情況下,MongoDB的查詢必須得依賴索引
  • MongoDB的索引越少性能越好,磁盤空間消耗越少(索引能不要就不要),和前一點做一些自我平衡吧

實際的情況會有哪些不同?實際中性能肯定是要比這個高的,我這次只是用了一台本地的虛擬機用單線程訪問嘗試了一下,真實環境下的話肯定是高配置的服務器主機加多線程。一般來說關系型數據庫(PostgresQL這種)在單台主機上的表現確實存在一個性能瓶頸,每秒寫入萬條對關系型數據庫來說就很吃力,如果遇到了這個瓶頸,就可以考慮調整系統架構,使用NoSQL(MongoDB這種)分攤一些數據存儲了,當然了,邏輯復雜,事務性要求高的數據還是得用PostgresQL,MongoDB則用於存那些“又大又傻”的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM