mongodb,redis,mysql 簡要對比

2021-08-01 10:59:32 字數 1504 閱讀 4272

準備學習下資料庫,想對目前的主流資料庫做乙個簡單的了解分析,就蒐集了資料整理到了一塊。

當下主流的要數nosql資料庫了,擁有強大的高併發能力。

mongodb:

它是乙個記憶體資料庫,資料都是放在記憶體裡面的。

對資料的操作大部分都在記憶體中,但mongodb並不是單純的記憶體資料庫。

持久化方式:

mongodb的所有資料實際上是存放在硬碟的,所有要操作的資料通過mmap的方式對映到記憶體某個區域內。

然後,mongodb就在這塊區域裡面進行資料修改,避免了零碎的硬碟操作。

至於mmap上的內容flush到硬碟就是作業系統的事情了,所以,如果,mongodb在記憶體中修改了資料後,mmap資料flush到硬碟之前,系統宕機了,資料就會丟失。

redis:

它就是乙個不折不扣的記憶體資料庫了。

持久化方式:

redis所有資料都是放在記憶體中的,持久化是使用rdb方式或者aof方式。

解密redis持久化:

mysql:

無論資料還是索引都存放在硬碟中。到要使用的時候才交換到記憶體中。能夠處理遠超過記憶體總量的資料。

資料量和效能:

當物理記憶體夠用的時候,redis>mongodb>mysql

當物理記憶體不夠用的時候,redis和mongodb都會使用虛擬記憶體。

實際上如果redis要開始虛擬記憶體,那很明顯要麼加記憶體條,要麼你換個資料庫了。

但是,mongodb不一樣,只要,業務上能保證,冷熱資料的讀寫比,使得熱資料在物理記憶體中,mmap的交換較少。

mongodb還是能夠保證效能。有人使用mongodb儲存了上t的資料。

mysql,mysql根本就不需要擔心資料量跟記憶體下的關係。不過,記憶體的量跟熱資料的關係會極大地影響效能表現。

當物理記憶體和虛擬記憶體都不夠用的時候,估計除了mysql你沒什麼好選擇了。

其實,從資料儲存原理來看,我更傾向於將mongodb歸類為硬碟資料庫,但是使用了mmap作為加速的手段而已。

簡說mmap:

mmap系統呼叫並不是完全為了用於共享記憶體而設計的。它本身提供了不同於一般對普通檔案的訪問方式,程序可以像讀寫記憶體一樣對普通檔案進行操作。

mmap 系統呼叫使得程序之間通過對映同乙個普通檔案實現共享記憶體。普通檔案被對映到程序位址空間後,程序可以像訪問普通記憶體一樣對檔案進行訪問,不必再呼叫。 read(),write()等操作。mmap並不分配空間, 只是將檔案對映到呼叫程序的位址空間裡, 然後你就可以用memcpy等操作寫檔案, 而不用write()了.寫完後用msync()同步一下, 你所寫的內容就儲存到檔案裡了. 不過這種方式沒辦法增加檔案的長度, 因為要對映的長度在呼叫mmap()的時候就決定了。

下面是redis和mongodb的對比圖:

原文:

規模化敏捷 簡要對比SAFe LeSS和DAD模式

目前有三種將scrum擴充套件到大型企業的方法。這三種方法分別是dean leffingwell的scaled agile framework safe scott ambler的紀律敏捷開發 dad 和craig larman和bas vodde的大規模scrum less 在還沒有搞清楚乙個團隊...

Snap svg 主要物件

物件 概述element svg規定的元素,提供修改屬性 繫結事件 運算元據 操作層級關係 動畫等方面的方法,類似jquery選取的元素 fragment 虛擬節點,其用處是可以用js建立多個元素,新增到fragment,不會影響到實際的dom,新增完成後一次合併到dom。這麼做可以減少瀏覽器重繪次...

android application簡要類(一)

1.至android應用級事件,如廣播的實現中低聲回應。2.傳遞應用程式元件之間的物體 全域性變數 3.管理和維護多個應用程式元件使用的資源。返回應用程式例項 return singleton override public void oncreate android allowbackup tru...