選擇MariaDB的壓縮數據引擎TokuDB
來自我的博客地址
選擇MariaDB的壓縮數據引擎TokuDB
業務運用場景
- 數據基本不用update, 不頻繁的範圍查詢
- 數據存儲量較大(爲之後準備)
- 選擇佔用磁盤較小的db
- 業務對數據庫插入操做頻繁,爲避免影響其它業務,須要將直播業務的DB 獨立出來,選擇另外的db
db類型分析(只作簡單表達,有興趣能夠自行了解)
sqlite
優勢mysql
- 整個數據庫都包含在磁盤上的一個文件中,所以它有很好的遷移性
- 功能簡約,小型化,追求最大磁盤效率
- 支持數據庫大小至2TB
缺點算法
- SQLite 的數據庫權限只依賴於文件系統,沒有用戶賬戶的概念,
- SQLite 的缺陷之一是它的寫入操做。這個數據庫同一時間只容許一個寫操做,所以吞吐量有限, mysql 鏈接插入5000條的時間是2.56秒,sqlite 是46.5秒 (本機操做)
- 不支持分佈式
MongoDB
- 佔用的空間很大,由於它屬於典型空間換時間原則的類型(直接不選擇)
- 數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象
HBase (基本不符合應用場景)
- 海量數據存儲能力,超高的數據讀寫性能
- HBase 不能支持 where 條件、Order by 查詢,只支持按照主鍵 Rowkey 和主鍵的 range 來查詢,可是能夠經過 HBase 提供的 API 進行條件過濾
MariaDB(TokuDB 存儲引擎TOKUDB_ZLIB 壓縮算法)
優勢sql
- TokuDB 除了支持現有的索引類型外, 還增長了(第二)集合索引, 以知足多樣性的覆蓋索引的查詢, 在快速建立索引方面提升了查詢的效率
- 數據壓縮。 官方的建議: 6核數如下的機器建議標準壓縮, 反之可使用高級別的壓縮。
- 高壓縮比,默認使用zlib進行壓縮,尤爲是對字符串(varchar,text等)類型有很是高的壓縮比,比較適合存儲日誌、原始數據等。官方宣稱能夠達到1:12
- 在線添加索引,不影響讀寫操做
- 很是快的寫入性能, Fractal-tree在事務實現上有優點,無undo log,官方稱至少比innodb高9倍
- 數據量能夠擴展到幾個TB;
- 不會產生索引碎片
缺點:數據庫
- 不支持外鍵(foreign key)功能,若是您的表有外鍵,切換到 TokuDB引擎後,此約束將被忽略
- TokuDB 不適大量讀取的場景,由於壓縮解壓縮的緣由。CPU佔用會高2-3倍,但因爲壓縮後空間小,IO開銷低,平均響應時間大概是2倍左右。
- online ddl 對text,blob等類型的字段不適用
- 沒有完善的熱備工具,只能經過mysqldump進行邏輯備份
適用場景數據結構
- 訪問頻率不高的數據或歷史數據歸檔
- 範圍查詢多
空間佔用對比(一個索引)
類型 |
10W |
20W |
30W |
100W |
mysql5.7(innodb) |
17M |
27M |
36M |
100M |
mysql5.7(myisam) |
5.8M |
11.8M |
17.9M |
59.7M |
sqlite3 |
7.2M |
- |
- |
- |
mariadb(totudb) |
1.1M |
3.1M |
4.6M |
14.29M |
查詢對比
類型 |
10W |
5W |
mysql5.7 |
0.21 |
0.10 |
sqlite3 |
0.30 |
0.14 |
mariadb |
0.19 |
0.07 |
寫入對比
類型 |
5000次 |
50000次 |
mysql5.7 |
2.56 |
- |
sqlite3 |
46.5 |
- |
mariadb |
1.69 |
21.86 |
綜合分析
- MariaDB(TokuDB 存儲引擎) 場景基本全符合, 目前阿里,騰訊都有在線上使用(採用)
- sqlite 空間不佔優點、總體速度不佔優點(不採用)
- HBase 不能支持 where 條件、Order by 查詢,只支持按照主鍵 Rowkey 和主鍵的 range 來查詢,可是能夠經過 HBase 提供的 API 進行條件過濾(不採用)
- MongoDB 佔用空間大 (不採用)
- mysql5.7(myisam) 佔用空間適中,但不是最優 (不採用)
歡迎關注本站公眾號,獲取更多信息