選擇MariaDB的壓縮數據引擎TokuDB

來自我的博客地址 選擇MariaDB的壓縮數據引擎TokuDB

業務運用場景

  1. 數據基本不用update, 不頻繁的範圍查詢
  2. 數據存儲量較大(爲之後準備)
  3. 選擇佔用磁盤較小的db
  4. 業務對數據庫插入操做頻繁,爲避免影響其它業務,須要將直播業務的DB 獨立出來,選擇另外的db

db類型分析(只作簡單表達,有興趣能夠自行了解)

sqlite

優勢mysql

  1. 整個數據庫都包含在磁盤上的一個文件中,所以它有很好的遷移性
  2. 功能簡約,小型化,追求最大磁盤效率
  3. 支持數據庫大小至2TB

缺點算法

  1. SQLite 的數據庫權限只依賴於文件系統,沒有用戶賬戶的概念,
  2. SQLite 的缺陷之一是它的寫入操做。這個數據庫同一時間只容許一個寫操做,所以吞吐量有限, mysql 鏈接插入5000條的時間是2.56秒,sqlite 是46.5秒 (本機操做)
  3. 不支持分佈式

MongoDB

  1. 佔用的空間很大,由於它屬於典型空間換時間原則的類型(直接不選擇)
  2. 數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象

HBase (基本不符合應用場景)

  1. 海量數據存儲能力,超高的數據讀寫性能
  2. HBase 不能支持 where 條件、Order by 查詢,只支持按照主鍵 Rowkey 和主鍵的 range 來查詢,可是能夠經過 HBase 提供的 API 進行條件過濾

MariaDB(TokuDB 存儲引擎TOKUDB_ZLIB 壓縮算法)

優勢sql

  1. TokuDB 除了支持現有的索引類型外, 還增長了(第二)集合索引, 以知足多樣性的覆蓋索引的查詢, 在快速建立索引方面提升了查詢的效率
  2. 數據壓縮。 官方的建議: 6核數如下的機器建議標準壓縮, 反之可使用高級別的壓縮。
  3. 高壓縮比,默認使用zlib進行壓縮,尤爲是對字符串(varchar,text等)類型有很是高的壓縮比,比較適合存儲日誌、原始數據等。官方宣稱能夠達到1:12
  4. 在線添加索引,不影響讀寫操做
  5. 很是快的寫入性能, Fractal-tree在事務實現上有優點,無undo log,官方稱至少比innodb高9倍
  6. 數據量能夠擴展到幾個TB;
  7. 不會產生索引碎片

缺點:數據庫

  1. 不支持外鍵(foreign key)功能,若是您的表有外鍵,切換到 TokuDB引擎後,此約束將被忽略
  2. TokuDB 不適大量讀取的場景,由於壓縮解壓縮的緣由。CPU佔用會高2-3倍,但因爲壓縮後空間小,IO開銷低,平均響應時間大概是2倍左右。
  3. online ddl 對text,blob等類型的字段不適用
  4. 沒有完善的熱備工具,只能經過mysqldump進行邏輯備份

適用場景數據結構

  1. 訪問頻率不高的數據或歷史數據歸檔
  2. 範圍查詢多

空間佔用對比(一個索引)

類型 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

綜合分析

  1. MariaDB(TokuDB 存儲引擎) 場景基本全符合, 目前阿里,騰訊都有在線上使用(採用)
  2. sqlite 空間不佔優點、總體速度不佔優點(不採用)
  3. HBase 不能支持 where 條件、Order by 查詢,只支持按照主鍵 Rowkey 和主鍵的 range 來查詢,可是能夠經過 HBase 提供的 API 進行條件過濾(不採用)
  4. MongoDB 佔用空間大 (不採用)
  5. mysql5.7(myisam) 佔用空間適中,但不是最優 (不採用)
相關文章
相關標籤/搜索