您好,登錄后才能下訂單哦!
本篇內容主要講解“MONGODB磁盤與內存的數據格式一致嗎”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MONGODB磁盤與內存的數據格式一致嗎”吧!
最近MONGODB 系統中的數據量逐漸變大,聯系了開發準備開始進行數據的archive 和 cleanup 事宜。其中運維的同學問我,你存儲的數據size 和實際的數據 size 是不一樣的,我回答那是mongodb 自帶的數據壓縮功能。
但后續的問題我模糊了,例如磁盤和內存的數據是否完全一致,壓縮的比率是多少,等等。人無完人,我也不是DB 百科全書。不過好在還不是中年油膩大叔,模糊了那就learning 去。
那就直奔主題wiredTiger , wiredTiger 作為MONGODB 的主力存儲引擎(3.0以后,當然還有PERCONA 但目前不主流)。
首先我們看看wiredTiger 到底是怎么存儲數據的,本身wiredTiger 存儲數據的方式有兩種, 行模式 和 列模式。而這兩種方式都是使用 B+ TREE的方式來進行數據的存儲的。
在行模式中,KEY 與 Values 都是 strings 可變的,而如果采用列的方式,key是通過 64BIT的方式記錄 Values 和行模式一樣。所以行與列的模式中不同的是 key 的存儲方式。
這兩種存儲方式各有優點和缺點
行的方式提取整行數據快,但需要的存儲空間大,并且如果某些方面設計不好,消耗的I/O 無論從性能還是尺寸上都比較大。
列式存儲則適合提取所需的字段(意思就是最好別一次提取較多的字段,否則沒優勢),并且存儲的值被限制在 8-BITS 這限制值的大小。相關的mongodb的并發控制主要在 transactions , snapshots 和 cache幾個位置
MONGODB中 基本行采用了行模式的方式進行數據的存儲,而數據存儲中就會牽扯到 mongodb 中的數據壓縮
目前行的存儲方面支持四種壓縮方式
1 鍵值前綴壓縮
2 字段壓縮
3 霍夫曼數據編碼壓縮
4 塊壓縮
具體四種壓縮方式,默認采用的是鍵值前綴壓縮的方式。這主要是根據CPU 磁盤的消耗,壓縮,以及算法的復雜度等因素考慮。
首先要確認的是,磁盤存儲的數據與在內存中的數據一定是不一樣的,要不怎么還有壓縮一說。
1
文件系統緩存中的數據與磁盤上的格式相同,包括對數據文件進行任何壓縮,MONGODB使用文件系統緩存來減少磁盤I/O。
2
WiredTiger內部緩存中加載的索引具有與磁盤格式不同的數據表示形式,但是仍然可以利用索引前綴壓縮來減少RAM的使用。索引前綴壓縮從索引字段中去除常見前綴。
3
WiredTiger內部緩存中的收集數據是未壓縮的,并且使用與磁盤格式不同的表示形式。
關于壓縮比率的問題,其實沒有一個具體的固定的比率這和存儲的數據是有關的,下面有一個圖,這是 percona 的一個 PPT 中曾經提到的壓縮的比率還是比較高的
到此,相信大家對“MONGODB磁盤與內存的數據格式一致嗎”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。