做者:劉廣信,火星文化技術經理
卡思數據是國內領先的視頻全網數據開放平臺,依託領先的數據挖掘與分析能力,爲視頻內容創做者在節目創做和用戶運營方面提供數據支持,爲廣告主的廣告投放提供數據參考和效果監測,爲內容投資提供全面客觀的價值評估。數據庫
<center>圖 1 卡思數據產品展現圖</center>服務器
卡思數據首先經過分佈式爬蟲系統進行數據抓取,天天新增數據量在 50G - 80G 之間,而且入庫時間要求比較短,所以對數據庫寫入性能要求很高,因爲數據增加比較快,對數據庫的擴展性也有很高的要求。數據抓取完成後,對數據進行清洗和計算,由於數據量比較大,單表 5 億 + 條數據,因此對數據庫的查詢性能要求很高。網絡
起初卡思數據採用的是多個 MySQL 實例和一個 MongoDB 集羣,如圖 2。架構
<center>圖 2 起初卡思數據架構圖</center>併發
可是隨着業務發展,暴露出一些問題。運維
針對咱們遇到的問題,咱們急需這樣一款數據庫:分佈式
未選擇 TiDB 以前咱們調研了幾個數據庫,Greenplum、HybirdDB for MySQL(PetaData)以及 PolarDB。Greenplum 因爲插入性能比較差,而且跟 MySQL 協議有一些不兼容,首先被排除。ide
HybirdDB for MySQL 是阿里雲推出的 HTAP 關係型數據庫,咱們在試用一段時間發現一些問題:工具
select v.id,v.url,v.extra_id,v.title fromcd_video v join cd_program_video pv on v.id = pv.video_id where program_id =xxx;性能
當相同查詢併發超過必定數量時,就會頻繁報數據庫計算資源不可用的錯誤。
PolarDB 是阿里雲新推出新一代關係型數據庫,主要思想是計算和存儲分離架構,使用共享存儲技術。因爲寫入仍是單點寫入,插入性能有上限,將來咱們的數據採集規模還會進一步提高,這有可能成爲一個瓶頸。另外因爲只有一個只讀實例,在對大表進行併發查詢時性能表現通常。
在經歷了痛苦的傳統解決方案的折磨以及大量調研及對比後,卡思數據最終選擇了 TiDB 做爲數據倉庫及業務數據庫。
TiDB 結合了傳統的 RDBMS 和 NoSQL 的最佳特性,高度兼容 MySQL,具有強一致性和高可用性,100% 支持標準的 ACID 事務。因爲是 Cloud Native 數據庫,可經過並行計算發揮機器性能,在大數量的查詢下性能表現良好,而且支持無限的水平擴展,能夠很方便的經過加機器解決性能和容量問題。另外提供了很是完善的運維工具,大大減輕數據庫的運維工做。
卡思數據目前配置了兩個 32C64G 的 TiDB、三個 4C16G 的 PD、四個 32C128G 的 TiKV。數據量大約 60 億條、4TB 左右,天天新增數據量大約 5000 萬,單節點 QPS 峯值爲 3000 左右。
因爲數據遷移不能影響線上業務,卡思數據在保持繼續使用原數據架構的前提下,使用 Mydumper、Loader 進行數據遷移,並在首輪數據遷移完成後使用 Syncer 進行增量同步。
卡思數據部署了數據庫監控系統(Prometheus/Grafana)來實時監控服務狀態,能夠很是清晰的查看服務器問題。
因爲 TiDB 對 MySQL 的高度兼容性,在數據遷移完成後,幾乎沒有對代碼作任何修改,平滑實現了無侵入升級。
目前卡思數據的架構如圖 3:
<center>圖 3 目前卡思數據架構圖</center>
查詢性能,單表最小 1000 萬,最大 8 億,有比較複雜的連表查詢,總體響應延時很是穩定,監控展現如圖 四、圖 5。
<center>圖 4 Duration 監控展現圖</center>
<center>圖 5 QPS 監控展現圖</center>
目前的卡思數據已所有遷移至 TiDB,但對 TiDB 的使用還侷限在數據存儲上,能夠說只實現了 OLTP。卡思數據準備深刻了解 OLAP,將目前一些須要實時返回的複雜查詢、數據分析下推至 TiDB。既減小計算服務的複雜性,又可增長數據的準確性。
很是感謝 PingCAP 小夥伴們在數據庫上線過程當中的大力支持,每次遇到困難都能及時、細心的給予指導,很是的專業和熱心。相信 PingCAP 會愈來愈好,相信 TiDB 會愈來愈完善,引領 NewSQL 的發展。