在 上篇關於 TiFlash 的文章 發佈後,咱們收到了不少夥伴們的反饋,你們有各類各樣的疑問,包括 TiFlash 是否是 T + 1 列存數據庫?爲啥實時寫入也很快?讀壓力大怎麼辦?節點掛了怎麼辦?業務怎麼接入?……今天咱們就來詳細回覆一下你們的問題,但願能對你們理解和實踐 TiFlash 有所幫助。mysql
首先,它並非獨立的列存數據庫:TiFlash 是配合 TiDB 體系的列存引擎,它和 TiDB 無縫結合,在線 DDL、無縫擴容、自動容錯等等方便運維的特色也在 TiFlash 中獲得繼承。sql
其次,TiFlash 能夠實時與行存保持同步。數據庫
「爲什麼要列和 MySQL 的對比呢?這樣是否太無聊?」apache
因爲 TiFlash 具有實時高頻實時更新能力,所以咱們在 上一篇 介紹中單機對單機比較了交易型數據庫例如 MySQL,由於這些特色通常是行存引擎具有的優點。TiFlash 與大多數列存不一樣的是,它支持實時更新,而且與行存數據保持同步。服務器
「爲什麼說其餘列存數據庫沒法更新?我看到 XX 支持 Update 呀?」架構
多數列存引擎並非絕對不支持更新,而是不支持主鍵或惟一性約束,所以沒法像交易型數據庫那樣快速定位單條記錄並進行一致性更新,這也是你沒法向它們實時同步交易庫數據的緣由。針對這樣的設計,經常使用的更新方式是使用 ETL 去重和融合新老數據,而後批量導入列存,這就使得數據沒法實時分析而需等待數小時甚至一天。運維
TiFlash 是爲實時場景設計,所以咱們必須支持實時更新。在這個前提下,經過良好的設計和工程實現,也藉助 ClickHouse 極速的向量化引擎,TiFlash 仍然擁有不亞於甚至超出其餘列存引擎的優異性能。你們能夠參考 上一篇文章中的 Benchmark 。oop
「TiFlash 是列存,你們都說列存的實時寫入很慢,TiFlash 呢?」性能
通過業界驗證的實時更新列存方案是 Delta Main 設計。簡單說,就是將須要更新數據與整理好的不可變列存塊分開存放,讀時歸併,按期 Compact,而 TiFlash 也採起了相似設計思路。TiFlash 並不是是拍腦殼發明了一種可更新列存結構,而是參考了其餘成熟系統設計,如 Apache Kudu,CWI 的 Positional Delta Tree 等的設計思路,TiFlash 的設計也兼具了 B+ 樹和 LSM 的優點,在讀寫兩端都有優異的性能(但犧牲了對 TiFlash 場景無用的點查性能)。因爲無需考慮點查,所以 TiFlash 能夠以進行惰性數據整理加速寫入;因爲引入了讀時排序索引回寫,所以哪怕 Compact 不那麼頻繁仍能夠保持掃描高效,進一步減少寫放大加速寫入。測試
「TiFlash 進行 OLAP 讀取的時候會影響 OLTP 性能嗎?」
上篇文章 中已經展現過 TiFlash 的讀取性能:
注:爲了避免影響比例,上圖忽略了 MySQL 和 Oracle 數據。
下面帶你們看看更新寫入速度,這裏作了個簡單的寫入測試:
測試結果是:
實際上,在都只寫 1 副本的狀況下,TiFlash 的寫入性能大體能夠追上 2-3 個同規格 TiKV 節點,這確保了 TiFlash 在更少的資源配比下,也能夠匹配 TiKV 的寫入壓力。
因爲 TiFlash 引擎針對 AP 場景無需點查的不一樣設計,它相對 LSM 引擎減少了寫放大比率:TiFlash 的寫放大大約在 3-7 倍之間。且在寫入約繁忙狀況下,因爲攢批效果反而越接近更小的三倍放大比率。而 LSM 結構下,RocksDB 的寫放大在 10 倍左右。這個對比優點大大提升了 TiFlash 磁盤實際能承載的業務吞吐量。
「若是讀壓力也很大,你光寫得夠快有啥用啊?」
雖然咱們展現了 TiFlash 的寫入性能,其實哪怕它的寫入速度不如 TiKV,咱們仍然能夠單獨對 TiFlash 進行擴容。無論 TiFlash 的寫入性能多優秀,仍然有可能由於用戶的查詢讀取壓力過大而形成寫入速度降低,這時候是否就會產生嚴重的複製延遲呢?
會。可是 TiFlash 卻能夠依靠 TiDB 的體系單獨擴容,若是業務壓力過大,多上線幾臺 TiFlash 節點就能夠天然分擔數據和壓力,用戶徹底無需操心擴容過程,這些都是透明且自動的。相對於同節點的行列混合設計,這樣的架構無疑更靈活,且仍然保持了一致性。
「節點掛了怎麼辦?」
當 TiFlash 節點損壞下線,TiDB 體系能夠保證 TiFlash 的數據自動從行存恢復副本,而補副本的過程也會考慮不對 TiKV 產生衝擊。在 TiFlash 多副本的狀況下,這個過程對用戶也是徹底透明無感知的:你只須要將補充的服務器啓動上線就行。
「TiFlash 支持 DDL 嗎?」
TiFlash 繼承了 TiDB 體系的在線 DDL,尤爲是它支持了更改列類型。與傳統列存系統須要徹底重寫列格式不一樣,TiFlash 支持混合表結構,每一個列數據塊能夠有獨立的表結構,這使得 TiFlash 更改列類型是徹底實時且無負擔的:沒有數據須要被馬上重寫。這種設計,使得 TiFlash 能夠很容易被用於數據集成場合,任何上游數據源的表結構變動能夠無阻塞地被同步。
上述全部這些特性,使得 TiFlash 體系能夠很是便捷地承載實時分析業務。考慮一下若是你有一個新業務上線,你須要將在線業務接入分析平臺例如 Hadoop,你也許須要作以下事情:
這個過程可能須要耗費數天,甚至更久,而你還須要維護整個傳輸鏈路。
在 TiDB + TiFlash 體系下,你只須要一條命令:
ALTER TABLE your_table SET TIFLASH REPLICA 1;
你就能夠自動得到一份實時保持一致的列存數據鏡像,進行實時分析。
5秒(取決於你的手速) vs 數天
即使你已經有完整的 Hadoop 數倉建設,TiFlash 配合 TiSpark,也能夠輕鬆銜接兩個平臺的同時,爲離線數倉提供實時分析能力。
TiFlash 已經在進行第一輪用戶測試,並在近期開啓第二批用戶測試,請關注後續信息,也歡迎聯繫詢問提早體驗 maxiaoyu@pingcap.com。來信請註明以下信息:姓名,公司,業務場景,是否已是 TiDB 用戶。