有人在知乎上提問:“作為國產開源的時序數據庫,TDengine 的哪些優點(dian)最吸引你?”。這(zhe)促使(shi)我將自己對一些問題,包括創業本身的思考整理出(chu)來,分享給大家,希望能給眾多研(yan)發(fa)同學和創業者帶來一些啟(qi)發(fa)。
當我在 2016 年底開始啟動 TDengine 這個項目,瞄準時序數據庫(Time-Series Database)這個方向時,市場上已經有很多時序數據庫,包括 InfluxDB、OpenTSDB、TimeScaleDB、KDB+、Prometheus、RRDTool 以及 Graphite 等。在傳統行業里,有實時數據庫,比(bi)如(ru) PI、iHistorian 等(deng)。那如(ru)果我再做一個,到底有(you)什么(me)優勢?怎(zen)么(me)做出差異化,怎(zen)么(me)推廣它?作為一個創業者,是必(bi)須認真思考的(de)。我下面從(cong)幾個點來分析。
1:分布式
從(cong) 2016 年底到現(xian)在,大部分時序(xu)數據(ju)(ju)庫都不(bu)是(shi)(shi)(shi)分布式的,換句(ju)話說(shuo),它(ta)們不(bu)支(zhi)持(chi)(chi)(chi)水平擴(kuo)(kuo)展(zhan)。即便是(shi)(shi)(shi) InfluxDB,也只(zhi)有(you)(you)企業版支(zhi)持(chi)(chi)(chi)集群,開源版是(shi)(shi)(shi)不(bu)支(zhi)持(chi)(chi)(chi)的。而(er)傳(chuan)統實時數據(ju)(ju)庫更(geng)是(shi)(shi)(shi)沒(mei)有(you)(you)一個支(zhi)持(chi)(chi)(chi)水平擴(kuo)(kuo)展(zhan),最(zui)多是(shi)(shi)(shi)雙機熱備(bei)。但(dan)是(shi)(shi)(shi)隨著物聯(lian)網、車聯(lian)網的高速發展(zhan),IT 基礎設施規模的增(zeng)大,數據(ju)(ju)的采集量(liang)越來(lai)越大,單機是(shi)(shi)(shi)沒(mei)有(you)(you)辦法解決問題的,底層數據(ju)(ju)庫必須具有(you)(you)水平擴(kuo)(kuo)展(zhan)能力。
很(hen)多企業使(shi)用(yong)的(de)(de)(de)(de)是(shi)開源(yuan)時序數(shu)(shu)(shu)據庫(ku)的(de)(de)(de)(de)單(dan)(dan)機版,后續(xu)為(wei)了(le)應對(dui)(dui)海量數(shu)(shu)(shu)據的(de)(de)(de)(de)處理,只好自己投入人(ren)力物力,在單(dan)(dan)機版的(de)(de)(de)(de)基礎上(shang),開發(fa)自己的(de)(de)(de)(de) Proxy,對(dui)(dui)數(shu)(shu)(shu)據進行(xing)分片處理。對(dui)(dui)于數(shu)(shu)(shu)據寫入,這種(zhong)方法簡單(dan)(dan)而且有效(xiao)。但(dan)是(shi)對(dui)(dui)于查詢(xun),往往牽涉(she)多個節(jie)點,那么 Proxy 就要做各種(zhong)查詢(xun)的(de)(de)(de)(de)聚(ju)合,因此(ci)開發(fa)的(de)(de)(de)(de)工作量很(hen)大。有些(xie)公司為(wei)了(le)避免(mian)麻煩,就選用(yong) OpenTSDB,因為(wei)它把分布式版本也開源(yuan)了(le)。
從使用的(de)角度(du)來看,OpenTSDB 底層(ceng)的(de)存(cun)儲(chu)引擎用的(de)是 HBase,安裝維護極為復雜,存(cun)儲(chu)壓縮性能不夠,查詢效率也很低,不是一個優(you)秀(xiu)的(de)產(chan)品。但(dan)它(ta)仍然有相當(dang)多的(de)用戶,這(zhe)唯一的(de)原因就是由于它(ta)支持分布(bu)式,可以水平線性擴(kuo)展。
因(yin)此,在 2016 年底,整個(ge) TDengine Database 的設計從第一天起,就是(shi)支持的。為了便于更多使用(yong)開源(yuan)版(ban)(ban)本的用(yong)戶用(yong)得更好,在 2020 年 8 月(yue),我們將(jiang) TDengine 的分(fen)布(bu)式版(ban)(ban)本開源(yuan)了。分(fen)布(bu)式版(ban)(ban)本開源(yuan)后,TDengine 的用(yong)戶量持續增長,全球安(an)裝實例數(shu)(shu)已經超(chao)過 10 萬,每天新增實例都在 200 以上(shang),這(zhe)是(shi)一個(ge)相當可觀(guan)的數(shu)(shu)字。這(zhe)證明(ming)了我們將(jiang) TDengine 分(fen)布(bu)式版(ban)(ban)本開源(yuan)是(shi)非常明(ming)智的決定。
2:高性能
時序(xu)(xu)數(shu)據及時序(xu)(xu)數(shu)據的應(ying)用(yong)有其(qi)(qi)典型特(te)點(詳細(xi)請看 ),如果充分(fen)(fen)利用(yong)時序(xu)(xu)數(shu)據的特(te)點,我們可以(yi)將數(shu)據寫入和查(cha)詢(xun)性能(neng)(neng)大(da)幅提高,數(shu)據壓縮率也能(neng)(neng)大(da)幅提高。 我之所以(yi)在(zai) 2016 年決(jue)定開發 TDengine,其(qi)(qi)中一個核心原因是我認(ren)為 InflxuDB 并沒有充分(fen)(fen)利用(yong)時序(xu)(xu)數(shu)據特(te)點。如果我充分(fen)(fen)利用(yong),就能(neng)(neng)在(zai)性能(neng)(neng)上碾壓它。
在仔細研究之后,我提出了“一個數據采集點一張表”的設計,讓一個采集點來的數據按照時間順序一塊一塊的存,并且使用列式存儲。這(zhe)樣就會(hui)使得(de)寫入變成(cheng)簡(jian)單的(de)(de)追(zhui)加(jia)操作,而且(qie)一次讀的(de)(de) IO 操作就能把一個數(shu)據(ju)采集點(dian)的(de)(de)數(shu)據(ju)點(dian)成(cheng)片讀出(chu)。而時序(xu)數(shu)據(ju)的(de)(de)查詢(xun)(xun)分(fen)析(xi)往往是一個時間(jian)段,數(shu)據(ju)命中率一下提(ti)高(gao)(gao)(gao)很多(duo)(duo),這(zhe)樣就會(hui)使查詢(xun)(xun)效率極其之(zhi)高(gao)(gao)(gao),而且(qie)壓縮(suo)率也會(hui)極其之(zhi)高(gao)(gao)(gao)。同(tong)時我提(ti)出(chu)“超級(ji)表”概念,來(lai)解決多(duo)(duo)個數(shu)據(ju)點(dian)數(shu)據(ju)高(gao)(gao)(gao)效聚合(he)的(de)(de)問題。通過(guo)標簽將需要(yao)(yao)聚合(he)的(de)(de)數(shu)據(ju)采集點(dian)先過(guo)濾(lv)出(chu)來(lai),大幅減小(xiao)需要(yao)(yao)掃描的(de)(de)數(shu)據(ju)集,從而大幅提(ti)升(sheng)聚合(he)速度。
那么性(xing)能(neng)重要嗎?毫無疑(yi)問(wen)非常重要,因(yin)為(wei)如果用戶不(bu)關心性(xing)能(neng),那選擇通用數(shu)據(ju)庫(ku)(ku)來處理時(shi)序(xu)數(shu)據(ju)就(jiu)可以了。如果都(dou)是時(shi)序(xu)數(shu)據(ju)庫(ku)(ku),用戶當(dang)然也會選擇性(xing)能(neng)或效率更(geng)高的產(chan)品。因(yin)此從研發的第一(yi)天起,我和整個團隊一(yi)直在追求(qiu)。
3:SQL 支持
任(ren)何一款新產(chan)品,都有入門門檻。降低門檻最好的方法就是(shi)不改變用(yong)戶習慣。SQL 是(shi)全球最流行的查詢語(yu)言(yan),學過計算機的人都會用(yong) SQL 寫查詢語(yu)句。
時序數(shu)據(ju)庫并不新鮮,已經(jing)有(you)相(xiang)當(dang)長(chang)的歷史(shi),但相(xiang)當(dang)多的時序數(shu)據(ju)庫或實時數(shu)據(ju)庫都(dou)有(you)自己(ji)的查(cha)詢(xun)語言(yan),比(bi)如 InfluxDB、OpenTSDB、Prometheus 等都(dou)有(you)自己(ji)的查(cha)詢(xun)語言(yan),這樣(yang)大(da)大(da)增(zeng)加了學習(xi)成本(ben),而且也增(zeng)加了應用的遷移成本(ben)。
采用 SQL 還(huan)(huan)有(you)一(yi)個好處,就(jiu)是(shi)能與眾多(duo)的 BI、可視化工具對接,生態豐富(fu)很(hen)(hen)多(duo)。如果采用自己研發的查(cha)詢語(yu)言,所(suo)有(you)工具都(dou)要定制化開發,難度(du)一(yi)下大(da)了很(hen)(hen)多(duo)。kdb 就(jiu)是(shi)最典(dian)型(xing)的例子(zi),完全是(shi)自有(you)語(yu)法(fa),因此雖然(ran)很(hen)(hen)多(duo)性能指(zhi)標(biao)相當不錯,但(dan)十幾年過去(qu),還(huan)(huan)是(shi)不溫不火。
從 TDengine 研發的第一天起,我就(jiu)決(jue)定采(cai)用 做查詢語(yu)言,并且(qie)采(cai)用關(guan)系數據(ju)庫模型,而不是(shi)(shi) InfluxDB、OpenTSDB 和 Prometheus 等數據(ju)庫的 tag-set 模型。其(qi)根本原因就(jiu)是(shi)(shi)想降低(di)學習成本。目(mu)前看來,這個策(ce)略是(shi)(shi)極其(qi)正確(que)的。
濤思數(shu)據(ju)團隊還將在查詢分(fen)(fen)析上投入相當(dang)大(da)的(de)研發力量(liang),希望(wang) TDengine 具有(you)強(qiang)大(da)的(de)時(shi)序數(shu)據(ju)分(fen)(fen)析功能。
4:開源
基礎軟件(jian)在(zai)開源(yuan)大勢所趨的情況下,如果不將代(dai)碼(ma)(ma),特別是(shi)核心代(dai)碼(ma)(ma)開源(yuan),想要贏得市場是(shi)完全不可(ke)能的。因此,我們才將 TDengine 完全開源(yuan)。開源(yuan)使濤(tao)思數據獲得了高速增長,這是(shi)一(yi)個完全正確的決定。
但從產(chan)品角度來看,開源是(shi)(shi) TDengine 的(de)(de)一大優勢嗎(ma)?看起來是(shi)(shi),但細想一下,其(qi)實不是(shi)(shi),它只是(shi)(shi)取(qu)得成功(gong)的(de)(de)一個(ge)必要條件(jian)。因為全球市場上開源的(de)(de)的(de)(de)時(shi)序(xu)數(shu)據庫產(chan)品很多,中國本土開源的(de)(de)時(shi)序(xu)數(shu)據庫也不止 TDengine 一家(jia)(jia),大家(jia)(jia)不會由(you)于 TDengine 是(shi)(shi)開源的(de)(de)就選(xuan)擇(ze)它,而是(shi)(shi)有其(qi)他特點(dian)才會選(xuan)用它。
如果(guo)市(shi)場上(shang)還沒有(you)開源(yuan)(yuan)(yuan)的(de)時序數據庫,那么(me)開源(yuan)(yuan)(yuan)就是(shi)(shi) TDengine 最(zui)大的(de)亮點。我決定將集群開源(yuan)(yuan)(yuan),根本的(de)原因是(shi)(shi)由于 InfluxDB 沒有(you)把集群開源(yuan)(yuan)(yuan),這給了我們(men)高速增(zeng)長的(de)機會。只有(you)別人(ren)做(zuo)不(bu)到或(huo)比不(bu)上(shang)你的(de)功(gong)能(neng)或(huo)性能(neng),那才是(shi)(shi)你需要宣傳的(de)特點。功(gong)能(neng)或(huo)性能(neng)指標(biao)的(de)跟隨者永遠(yuan)不(bu)值(zhi)得(de)做(zuo)任何推廣。
5:其他
TDengine 還有很(hen)多其(qi)他(ta)優(you)點(dian),比(bi)如 All in One 的特性,TDengine 自身(shen)帶有緩存、流計算(suan)、數(shu)(shu)據訂(ding)閱等(deng)功能,因此在(zai)很(hen)多場景下,用(yong)戶不再需要集成 Kafak, Redis, Spark, Zookeeper 等(deng)軟件,TDengine 就可(ke)以作為(wei)一(yi)個大數(shu)(shu)據平(ping)臺來(lai)使用(yong),能大幅降低整個系統的復雜度(du)和(he)運(yun)維成本。與大部分研(yan)發(fa)同學一(yi)樣(yang),我(wo)也喜歡羅(luo)列各種開發(fa)的功能和(he)亮點(dian),我(wo)還可(ke)以羅(luo)列 TDengine 的很(hen)多很(hen)多其(qi)他(ta)優(you)點(dian)。
但是作為一個連續創業者,很清楚無論是產品還是市場宣傳,必須做減法。研發出身的(de)(de)創業(ye)者最(zui)喜(xi)歡的(de)(de)就(jiu)是(shi)不(bu)斷(duan)加功能(neng)(neng),在(zai)宣傳(chuan)(chuan)上胡子眉毛一把(ba)(ba)抓(zhua),不(bu)突出重點,這是(shi)創業(ye)者的(de)(de)大忌。用戶(hu)能(neng)(neng)看上你的(de)(de)產品,往往不(bu)是(shi)你功能(neng)(neng)全,而是(shi)產品的(de)(de)某(mou)一個亮點打(da)動(dong)了他,特(te)別是(shi)早期的(de)(de)用戶(hu),完全是(shi)喜(xi)歡產品的(de)(de)某(mou)項功能(neng)(neng)才容忍了諸多其他方(fang)面的(de)(de)不(bu)足(zu)。宣傳(chuan)(chuan)上也是(shi),眾多的(de)(de)特(te)點無法讓(rang)人記住(zhu)(zhu),能(neng)(neng)記住(zhu)(zhu)一個就(jiu)相當(dang)不(bu)錯。我們要(yao)做(zuo)(zuo)的(de)(de)是(shi),把(ba)(ba)真正的(de)(de)亮點做(zuo)(zuo)到極(ji)致(zhi),而且做(zuo)(zuo)最(zui)大程(cheng)度的(de)(de)傳(chuan)(chuan)播,讓(rang)人人都知道它(ta),喜(xi)歡它(ta)。
做減法對于研發同學是極其困難的,因為不將自己花精力沒日沒夜開發的功能宣傳出去,太讓自己沒有成就感。但作為創業者,就是與要習慣思維做斗爭。只有聚焦,你才會真正思考產品在市場的獨特定位,把某個亮點做到極致。只有獨特,才能真正吸引用戶,才能真的受人喜歡。
因此過去(qu)的(de)幾年,我們一(yi)直強調(diao) TDengine 是一(yi)個物聯網(wang)(wang)大數據平臺,聚焦在物聯網(wang)(wang)細分市場,強調(diao)的(de)是 All in One 的(de)特性,這樣就能與其他時序數據庫做出差異化來。
但 TDengine 開(kai)源 2 年多(duo)時(shi)間,大部分用(yong)戶還是(shi)把我們當做時(shi)序數(shu)(shu)據庫來(lai)使用(yong),而且不(bu)僅是(shi)物(wu)聯網(wang)行(xing)業用(yong)戶在用(yong),金融(rong)、IT 運維(wei)、能源、汽(qi)車(che)、工(gong)業互聯網(wang)等行(xing)業的用(yong)戶也在用(yong)。經(jing)過很多(duo)思考之(zhi)后,我決(jue)定(ding)將 TDengine 重(zhong)新定(ding)位為時(shi)序數(shu)(shu)據庫。

6:三大優點
那么作為時序數據庫,怎么與眾多的時序數據庫 PK 或差異化,我個人認為就是:高性能、分布式與 SQL 支持。這三個特點足以讓我說服 InfluxDB, OpenTSDB, TimeScale 的客戶切換到 TDengine 上來。因此在我們最近的網站改版時,大膽地將 TDengine Database 的 Slogan 定為:高性能、分布式、支持 SQL 的時序數據庫。
貪多嚼不(bu)爛,用戶(hu)沒法記住你那(nei)么多特點(dian)優(you)點(dian),因此我們(men)列出高性(xing)能、分布(bu)式、支持 SQL 這三個(ge)優(you)點(dian)足(zu)夠(gou),其(qi)他(ta)優(you)點(dian)由用戶(hu)自己去總結和體會,讓他(ta)們(men)有(you)(you)驚(jing)喜。只要將三個(ge)優(you)點(dian)做實(shi)做得(de)(de)足(zu)夠(gou)好,TDengine 與(yu)其(qi)他(ta)時序數(shu)據庫(ku)就(jiu)會有(you)(you)足(zu)夠(gou)的差異化,就(jiu)一定能贏(ying)得(de)(de)開發者(zhe)的信賴,贏(ying)得(de)(de)市場。
陶建輝
2022 年 2 月(yue) 26 日


























