VictoriaMetrics是一個(gè)快速高效且可擴(kuò)展的監(jiān)控解決方案和時(shí)序數(shù)據(jù)庫,可以作為Prometheus的長期遠(yuǎn)端存儲(chǔ)坞琴,具備的特性有:
- 支持prometheus查詢api逾冬,同時(shí)實(shí)現(xiàn)了一個(gè)metricsql 查詢語言
- 支持全局查詢視圖,支持多prometheus 實(shí)例寫數(shù)據(jù)到VictoriaMetrics结窘,然后提供一個(gè)統(tǒng)一的查詢
- 支持集群
- 高性能
- 支持多種協(xié)議蚤氏,包括influxdb line協(xié)議,prometheus metrics,graphite 簿废,prometheus遠(yuǎn)端寫api,opentsdb http協(xié)議等
- 高壓縮比
本文主要分析下VictoriaMetrics的存儲(chǔ)機(jī)制络它,包括整體架構(gòu)族檬、數(shù)據(jù)模型、磁盤目錄化戳、文件格式等部分单料,對(duì)應(yīng)的源碼版本號(hào)為v1.45.0。
整體架構(gòu)
VictoriaMetrics的集群主要由vmstorage点楼、vminsert扫尖、vmselect等三部分組成,其中掠廓,vmstorage 負(fù)責(zé)提供數(shù)據(jù)存儲(chǔ)服務(wù); vminsert 是數(shù)據(jù)存儲(chǔ) vmstorage 的代理换怖,使用一致性hash算法進(jìn)行寫入分片; vmselect 負(fù)責(zé)數(shù)據(jù)查詢蟀瞧,根據(jù)輸入的查詢條件從 vmstorage 中查詢數(shù)據(jù)沉颂。
VictoriaMetrics的這個(gè)三個(gè)組件每個(gè)組件都可以單獨(dú)進(jìn)行擴(kuò)展条摸,并運(yùn)行在大多數(shù)合適軟件上。vmstorage采用shared-nothing架構(gòu)铸屉,優(yōu)點(diǎn)是 vmstorage的節(jié)點(diǎn)相互之間無感知钉蒲,相互之間無需通信,不共享任何數(shù)據(jù)彻坛,增加了集群的可用性顷啼、簡化了集群的運(yùn)維和集群的擴(kuò)展。
另外昌屉,VictoriaMetrics集群支持多個(gè)隔離的租戶特性钙蒙,又名命名空間。租戶通過accountID (或者accountID:projectID) 來標(biāo)識(shí)怠益,這些ID放在請求URL中仪搔。有關(guān)VictoriaMetrics租戶的一些事實(shí):
- 每個(gè)accountID和projectID由[0 .. 2 ^ 32)范圍內(nèi)的任意32位整數(shù)標(biāo)識(shí)。如果缺少projectID蜻牢,則會(huì)將其自動(dòng)分配為0。預(yù)計(jì)有關(guān)租戶的其他信息(例如身份驗(yàn)證令牌偏陪,租戶名稱抢呆,限制,計(jì)費(fèi)等)將存儲(chǔ)在單獨(dú)的關(guān)系數(shù)據(jù)庫中笛谦。此數(shù)據(jù)庫必須由位于VictoriaMetrics群集前面的單獨(dú)服務(wù)(例如vmauth)管理抱虐。
- 將第一個(gè)數(shù)據(jù)點(diǎn)寫入給定租戶時(shí),將自動(dòng)創(chuàng)建租戶饥脑。
- 所有租戶的數(shù)據(jù)平均分布在可用的vmstorage節(jié)點(diǎn)之間恳邀。當(dāng)不同的租戶具有不同的數(shù)據(jù)量和不同的查詢負(fù)載時(shí),這可以保證在vmstorage節(jié)點(diǎn)之間平均負(fù)載灶轰。
整體上來說谣沸,VictoriaMetrics支持多租戶,但租戶的信息需要使用額外的關(guān)系型數(shù)據(jù)庫來存儲(chǔ)笋颤,且VictoriaMetrics不支持在單個(gè)請求中查詢多個(gè)租戶乳附。
數(shù)據(jù)模型
開門見山,VictoriaMetrics采用的數(shù)據(jù)模型是單值模型伴澄,且只支持浮點(diǎn)數(shù)指標(biāo)赋除。那么到底什么是單值模型呢?目前非凌,常見的時(shí)序數(shù)據(jù)庫的數(shù)據(jù)模型举农,主要分成單值模型和多值模型。這里簡單說明下單值模型和多值模型敞嗡,整體上颁糟,可以認(rèn)為單值模型是多值模型的一個(gè)特例祭犯。
單值模型是根據(jù)業(yè)務(wù)指標(biāo)數(shù)據(jù)建模,按照單個(gè)指標(biāo)的細(xì)粒度進(jìn)行數(shù)據(jù)使用和邏輯存儲(chǔ)滚停,如下圖所示沃粗,一行數(shù)據(jù)只有一個(gè)指標(biāo)值,即value列键畴。目前采用單值模型的時(shí)序數(shù)據(jù)庫最盅,有OpenTSDB、KairosDB起惕、Prometheus等涡贱。
多值的模型則是針對(duì)數(shù)據(jù)源建模,我們每一行數(shù)據(jù)針對(duì)的是一個(gè)數(shù)據(jù)源惹想,它的被測量的多個(gè)指標(biāo)在同一列上问词,如下圖所示,一行數(shù)據(jù)有多個(gè)指標(biāo)值嘀粱,即有cpu和io兩列激挪。目前采用多值模型的時(shí)序數(shù)據(jù)庫,有InfluxDB锋叨、TimescaleDB等垄分。
磁盤目錄
VictoriaMetrics的根目錄下主要包括4個(gè)目錄或文件,如下圖所示娃磺。其中薄湿,最主要的是數(shù)據(jù)目錄data和索引目錄indexdb,flock.lock文件為文件鎖文件偷卧,用于VictoriaMetrics進(jìn)程鎖住文件豺瘤,不允許別的進(jìn)程進(jìn)行修改目錄或文件。
數(shù)據(jù)目錄
數(shù)據(jù)目錄data的具體結(jié)構(gòu)听诸,如下圖所示坐求,在圖中使用紅色文字,對(duì)主要目錄或文件做了簡單說明蛇更,其中最主要的是big目錄和small目錄瞻赶,這兩個(gè)目錄的結(jié)構(gòu)是一樣的。其中派任,在VictoriaMetrics中砸逊,使用table來表示的數(shù)據(jù)或者索引的根目錄,而實(shí)際上VictoriaMetrics中沒有實(shí)際的表table級(jí)別目錄掌逛。
在small目錄下师逸,以月為單位不斷生成partition目錄,比如上圖中的2020_11目錄豆混,對(duì)應(yīng)的實(shí)現(xiàn)在源碼lib/storage/partition.go中篓像。partition目錄包括part目錄动知、臨時(shí)目錄tmp、 事務(wù)目錄txn等三個(gè)目錄员辩。
內(nèi)存中的數(shù)據(jù)每刷盤一次就會(huì)生成一個(gè)part目錄盒粮,如上圖中的"708_354_20201103102134.255_20201103102149.255_1643F83394CA24A7",目錄名中的708表示這個(gè)目錄下包含的數(shù)據(jù)行數(shù)rowsCount, 目錄名中的354表示這個(gè)目錄中包含的數(shù)據(jù)塊數(shù)blocksCount, 20201103102134.255表示目錄中包含的數(shù)據(jù)的最小時(shí)間戳奠滑,20201103102149.255表示目錄中包含的數(shù)據(jù)的最大時(shí)間戳丹皱,1643F83394CA24A7是生成這個(gè)目錄時(shí)的系統(tǒng)納秒時(shí)間戳的16進(jìn)制表示,對(duì)應(yīng)的實(shí)現(xiàn)邏輯在源碼lib/storage/part.go中宋税;
看到這里摊崭,可能會(huì)有一些疑問?比如為何要分成big和small目錄, 或者說big目錄和small中的數(shù)據(jù)關(guān)系是什么杰赛? 這個(gè)需要從VictoriaMetrics的compaction機(jī)制講起呢簸。
在VictoriaMetrics中,small目錄和big目錄都會(huì)周期性檢查乏屯,是否需要做part的合并根时。VictoriaMetrics默認(rèn)每個(gè)10ms檢查一次partition目錄下的part是否需要做merge。如果檢查出有滿足merge條件的parts瓶珊,則這些parts合并為一個(gè)part啸箫。如果沒有滿足條件的part進(jìn)行merge,則以10ms為基進(jìn)行指數(shù)休眠伞芹,最大休眠時(shí)間為10s。
VictoriaMetrics在寫數(shù)據(jù)時(shí)蝉娜,先寫入在small目錄下的相應(yīng)partition目錄下面的唱较,small目錄下的每個(gè)partition最多256個(gè)part。VictoriaMetrics在Compaction時(shí)召川,默認(rèn)一次最多合并15個(gè)part南缓,且small目錄下的part最多包含1000W行數(shù)據(jù),即1000W個(gè)數(shù)據(jù)點(diǎn)荧呐。因此汉形,當(dāng)一次待合并的parts中包含的行數(shù)超過1000W行時(shí),其合并的輸出路徑為big目錄下的同名partition目錄下倍阐。
因此概疆,big目錄下的數(shù)據(jù)由small目錄下的數(shù)據(jù)在后臺(tái)compaction時(shí)合并生成的。 那么為什么要分成big目錄和small目錄呢峰搪?
這個(gè)主要是從磁盤空間占用上來考慮的岔冀。時(shí)序數(shù)據(jù)經(jīng)常讀取最近寫入的數(shù)據(jù),較少讀歷史數(shù)據(jù)概耻。而且使套,時(shí)序數(shù)據(jù)的數(shù)據(jù)量比較大罐呼,通常會(huì)使用壓縮算法進(jìn)行壓縮。
數(shù)據(jù)進(jìn)行壓縮后侦高,讀取時(shí)需要解壓嫉柴,采用不同級(jí)別的壓縮壓縮算法其解壓速度不一樣,通常壓縮級(jí)別越高奉呛,其解壓速度越慢计螺。在VictoriaMetrics在時(shí)序壓縮的基礎(chǔ)上,又采用了ZSTD這個(gè)通用壓縮算法進(jìn)一步壓縮了數(shù)據(jù)侧馅,以提高壓縮率危尿。在small目錄中的part數(shù)據(jù),采用的是低級(jí)別的ZSTD馁痴,而big目錄下的數(shù)據(jù)谊娇,采用的是高級(jí)別的ZSTD。
因此罗晕,VictoriaMetrics分成small目錄和big目錄济欢,主要是兼顧近期數(shù)據(jù)的讀取和歷史數(shù)據(jù)的壓縮率。
索引目錄
索引目錄indexdb的具體結(jié)構(gòu)小渊,如下圖所示法褥,在圖中使用紅色文字,對(duì)主要目錄或文件做了簡單說明酬屉。與數(shù)據(jù)目錄不同的是半等,indexdb目錄下由多個(gè)table目錄,每個(gè)table目錄代表一個(gè)完整的自治的索引呐萨,每個(gè)table目錄下杀饵,又有多個(gè)不同的part目錄,part命名方式比較簡單谬擦,有文件包含的item數(shù)itemsCount和block數(shù)blocksCount, 以及根據(jù)系統(tǒng)納秒時(shí)間戳自增生成的mergeIdx的16進(jìn)制表示切距。
indexdb下面的形如"1643F4F397B53DEE"是怎么生成的,或者什么時(shí)候切換新的目錄寫索引的呢惨远?VictoriaMetrics會(huì)根據(jù)用戶設(shè)置的數(shù)據(jù)保留周期retention來定期滾動(dòng)索引目錄谜悟,當(dāng)前一個(gè)索引目錄的保留時(shí)間到了,就會(huì)切換一個(gè)新的目錄北秽,重新生成索引葡幸。
文件格式
在介紹具體的文件格式之前,不得不提下VictoriaMetrics對(duì)于寫入數(shù)據(jù)的處理過程羡儿。下圖是VictoriaMetrics支持的Prometheus協(xié)議的一個(gè)寫入示例礼患。
VictoriaMetrics在接受到寫入請求時(shí),會(huì)對(duì)請求中包含的時(shí)序數(shù)據(jù)做轉(zhuǎn)換處理,如下圖所示缅叠。首先先根據(jù)包含metric和labels的MetricName生成一個(gè)唯一標(biāo)識(shí)TSID悄泥,然后metric + labels + TSID作為索引index, TSID + timestamp + value作為數(shù)據(jù)data肤粱,最后索引index和數(shù)據(jù)data分別進(jìn)行存儲(chǔ)和檢索弹囚。
因此,VictoriaMetrics的數(shù)據(jù)整體上分成索引和數(shù)據(jù)兩個(gè)部分领曼,因此文件格式整體上會(huì)有兩個(gè)部分鸥鹉。其中,索引部分主要是用于支持按照label或者tag進(jìn)行多維檢索庶骄。與大多數(shù)時(shí)序數(shù)據(jù)庫的數(shù)據(jù)組織方式一樣毁渗,比如InfluxDB、Prometheus单刁、OpenTSDB等灸异,VictoriaMetrics也是按時(shí)間線來組織數(shù)據(jù)的,即數(shù)據(jù)存儲(chǔ)時(shí)羔飞,先將數(shù)據(jù)按TSID進(jìn)行分組肺樟,然后每個(gè)TSID的包含的數(shù)據(jù)點(diǎn)各自使用列式壓縮存儲(chǔ)。
索引文件
VictoriaMetrics每次內(nèi)存Flush或者后臺(tái)Merge時(shí)生成的索引part逻淌,主要包含metaindex.bin么伯、index.bin、lens.bin卡儒、items.bin等4個(gè)文件田柔。這四個(gè)文件的關(guān)系如下圖所示, metaindex.bin文件通過metaindex_row索引index.bin文件,index.bin文件通過indexBlock中的blockHeader同時(shí)索引lens.bin文件和items.bin文件骨望。
metaindex.bin文件中凯楔,包含一系列的metaindex_row, 每個(gè)metaindex_row中包含最小項(xiàng)firstItem锦募、索引塊包含的塊頭部數(shù)blockHeadersCount、索引塊偏移indexBlockOffset邻遏、索引塊大小indexBlockSize糠亩。
- metaindex_row在文件中的位置按照firstItem的大小的字典序排序存儲(chǔ),以支持二分檢索准验;
- metaindex.bin文件使用ZSTD進(jìn)行壓縮赎线;
- metaindex.bin文件中的內(nèi)容在part打開時(shí),會(huì)全部讀出加載至內(nèi)存中糊饱,以加速查詢過濾垂寥;
- metaindex_row包含的firstItem為其索引的IndexBlock中所有blockHeader中的字典序最小的firstItem;
- 查找時(shí)根據(jù)firstItem進(jìn)行二分檢索;
index.bin文件中滞项,包含一系列的indexBlock, 每個(gè)indexBlock又包含一系列blockHeader狭归,每個(gè)blockHeader的包含item的公共前綴commonPrefix、最小項(xiàng)firstItem文判、itemsData的序列化類型marshalType过椎、itemsData包含的item數(shù)、item塊的偏移itemsBlockOffset等內(nèi)容戏仓。
- 每個(gè)indexBlock使用ZSTD壓縮算法進(jìn)行壓縮疚宇;
- 在indexBlock中查找時(shí),根據(jù)firstItem進(jìn)行二分檢索blockHeader赏殃;
items.bin文件中敷待,包含一系列的itemsData, 每個(gè)itemsData又包含一系列的item。
- itemsData會(huì)根據(jù)情況是否使用ZTSD壓縮仁热,當(dāng)item個(gè)數(shù)小于2時(shí)榜揖,或者itemsData的長度小于64字節(jié)時(shí),不壓縮股耽;當(dāng)itemsData使用ZSTD壓縮后的大小根盒,大于原始itemsData的0.9倍時(shí),則不壓縮物蝙,否則使用ZSTD算法進(jìn)行壓縮炎滞。
- 每個(gè)item在存儲(chǔ)時(shí),去掉了blockHeader中的公共前綴commonPrefix以提高壓縮率诬乞。
lens.bin文件中册赛,包含一系列的lensData, 每個(gè)lensData又包含一系列8字節(jié)的長度len, 長度len標(biāo)識(shí)items.bin文件中對(duì)應(yīng)item的長度震嫉。在讀取或者需要解析itemsData中的item時(shí)森瘪,先要讀取對(duì)應(yīng)的lensData中對(duì)應(yīng)的長度len。 當(dāng)itemsData進(jìn)行壓縮時(shí)票堵,lensData會(huì)先使用異或算法進(jìn)行壓縮扼睬,然后再使用ZSTD算法進(jìn)一步壓縮。
VictoriaMetrics索引文件都是圍繞著item來組織的悴势,那么item的結(jié)構(gòu)是什么樣子的窗宇?或者item的種類有哪些? 在VictoriaMetrics中item的整體上是一個(gè)KeyValue結(jié)構(gòu)的字節(jié)數(shù)組特纤,共計(jì)有7種類型军俊,每種類型的item通過固定前綴來區(qū)分,前綴類型如下圖所示捧存。
VictoriaMetrics是怎么基于item支持tag多維檢索的呢粪躬? 這里就不得不提下VictoriaMetrics的TSID的生成過程担败。
VictoriaMetrics的MetricName的結(jié)構(gòu)如下所示,包含MetricGroup字節(jié)數(shù)組和Tag數(shù)組镰官,其中提前,MetricGroup是可選的,每個(gè)Tag由Key和Value等字節(jié)數(shù)組構(gòu)成朋魔。
VictoriaMetrics的TSID的結(jié)構(gòu)如下所示岖研,包含MetricGroupID,JobID警检,InstanceID孙援,MetricID等四個(gè)字段,其中除了MetricID外扇雕,其他三個(gè)字段都是可選的拓售。這個(gè)幾個(gè)ID的生成方法如下:
- metricGroupID根據(jù)MetricName中的MetricGroup使用xxhash的sum64算法生成。
- JobID和InstanceID分別由MetricName中的tag的第一個(gè)tag和第二個(gè)tag使用xxhash的sum64算法生成镶奉。為什么使用第一個(gè)tag和第二個(gè)tag础淤?這是因?yàn)閂ictoriaMetrics在寫入時(shí),將寫入請求中的JobID和InstanceID放在了Tag數(shù)組的第一個(gè)和第二個(gè)位置哨苛。
- MetricID鸽凶,使用VictoriaMetrics進(jìn)程啟動(dòng)時(shí)的系統(tǒng)納秒時(shí)間戳自增生成。
因?yàn)門SID中除了MetricID外建峭,其他字段都是可選的玻侥,因此TSID中可以始終作為有效信息的只有metricID,因此VictoriaMetrics的在構(gòu)建tag到TSID的字典過程中亿蒸,是直接存儲(chǔ)的tag到metricID的字典凑兰。
以寫入http_requests_total{status="200", method="GET"}為例,則MetricName為http_requests_total{status="200", method="GET"}边锁, 假設(shè)生成的TSID為{metricGroupID=0, jobID=0, instanceID=0, metricID=51106185174286}姑食,則VictoriaMetrics在寫入時(shí)就構(gòu)建了如下幾種類型的索引item,其他類型的索引item是在后臺(tái)或者查詢時(shí)構(gòu)建的茅坛。
- metricName -> TSID, 即http_requests_total{status="200", method="GET"} -> {metricGroupID=0, jobID=0, instanceID=0, metricID=51106185174286}
- metricID -> metricName音半,即51106185174286 -> http_requests_total{status="200", method="GET"}
- metricID -> TSID,即51106185174286 -> {metricGroupID=0, jobID=0, instanceID=0, metricID=51106185174286}
- tag -> metricID贡蓖,即 status="200" -> 51106185174286,? method="GET"? -> 51106185174286, "" = http_requests_total -> 51106185174286
有了這些索引的item后祟剔,就可以支持基于tag的多維檢索了,在當(dāng)給定查詢條件http_requests_total{status="200"}時(shí)摩梧,VictoriaMetrics先根據(jù)給定的tag條件,找出每個(gè)tag的metricID列表宣旱,然后求所有tag的metricID列表的交集仅父,然后根據(jù)交集中的metricID,再到索引文件中檢索出TSID,根據(jù)TSID就可以到數(shù)據(jù)文件中查詢數(shù)據(jù)了笙纤,在返回結(jié)果之前耗溜,再根據(jù)TSID中的metricID,到索引文件中檢索出對(duì)應(yīng)的寫入時(shí)的原始MetircName省容。
但是由于VictoriaMetrics的tag到metricID的字典抖拴,沒有將相同tag的所有metricID放在一起存儲(chǔ),在檢索時(shí)腥椒,一個(gè)tag可能需要查詢多次才能得到完整的metricID列表阿宅。另外查詢出metricID后,還要再到索引文件中去檢索TSID才能去數(shù)據(jù)文件查詢數(shù)據(jù)笼蛛,又增加了一次IO開銷洒放。這樣來看的話,VictoriaMetrics的索引文件在檢索時(shí)滨砍,如果命中的時(shí)間線比較多的情況下往湿,其IO開銷會(huì)比較大,查詢延遲也會(huì)比較高惋戏。
數(shù)據(jù)文件
VictoriaMetrics每次內(nèi)存Flush或者后臺(tái)Merge時(shí)生成的數(shù)據(jù)part领追,包含metaindex.bin、index.bin响逢、timestamps.bin绒窑、values.bin等4個(gè)文件。這四個(gè)文件的關(guān)系如下所示龄句。metaindex.bin文件索引index.bin文件回论,index.bin文件同時(shí)索引timestamps.bin和values.bin文件。
metaindex.bin文件中分歇,包含一系列的metaindex_row傀蓉, 每個(gè)metaindex_row中包含時(shí)間線標(biāo)識(shí)TSID、最小時(shí)間戳minTimestamp职抡、最大時(shí)間戳maxTimestamp葬燎、索引塊偏移indexBlockOffset、索引塊大小indexBlockSize缚甩、索引塊包含的塊頭部數(shù)blockHeadersCount谱净。
- metaindex_row在文件中的位置按照TSID的大小的字典序排序存儲(chǔ);
- metaindex.bin文件使用ZSTD進(jìn)行壓縮擅威;
- metaindex.bin文件中的內(nèi)容在part打開時(shí)壕探,會(huì)全部讀出加載至內(nèi)存中,以加速查詢過濾郊丛;
- metaindex_row包含時(shí)間線標(biāo)識(shí)TSID為其索引的IndexBlock中所有blockHeader中的最小時(shí)間標(biāo)識(shí)TSID李请;
- metaindex_row包含最小時(shí)間戳minTimestamp為其索引的IndexBlock中所有blockHeader中的最小時(shí)間戳minTimestamp瞧筛;
- metaindex_row包含最大時(shí)間戳maxTimestamp為其索引的IndexBlock中所有blockHeader中的最大時(shí)間戳maxTimestamp;
- 查找時(shí)根據(jù)TSID進(jìn)行二分檢索导盅;
index.bin文件中较幌,包含一系列的indexBlock, 每個(gè)indexBlock又包含一系列blockHeader,每個(gè)blockHeader的包含時(shí)間線標(biāo)識(shí)TSID白翻、最小時(shí)間戳minTimestamp乍炉、最大時(shí)間戳maxTimestamp、第一個(gè)指標(biāo)值firstValue滤馍、時(shí)間戳數(shù)據(jù)塊偏移timestampsBlockOffset岛琼、指標(biāo)值數(shù)據(jù)塊偏移valuesBlockOffset等內(nèi)容。
- 每個(gè)indexBlock使用ZSTD壓縮算法進(jìn)行壓縮纪蜒;
- 查找時(shí)衷恭,線性遍歷blockHeader查找TSID;
timestamps.bin文件中纯续,包含一系列時(shí)間線的時(shí)間戳壓縮塊timestampsData;? values.bin文件中随珠,包含的一系列時(shí)間線的指標(biāo)值壓縮塊valuesData。 其中猬错,timestampsData和values.data會(huì)根據(jù)時(shí)序數(shù)據(jù)特征進(jìn)行壓縮窗看,整體上的壓縮思路是:先做時(shí)序壓縮,然后在做通用壓縮倦炒。比如显沈,先做delta-of-delta計(jì)算或者異或計(jì)算,然后根據(jù)情況做zig-zag逢唤,最后再根據(jù)情況做一次ZSTD壓縮拉讯,VictoriaMetrics支持的壓縮算法或者類型主要有6種,如下圖所示鳖藕,壓縮編碼源碼在lib/encoding/encoding.go文件中魔慷。
VictoriaMetrics文檔中提到在生產(chǎn)環(huán)境中,每個(gè)數(shù)據(jù)點(diǎn)(8字節(jié)時(shí)間戳 + 8字節(jié)value共計(jì)16字節(jié))壓縮后小于1個(gè)字節(jié)著恩,最高可達(dá) 0.4字節(jié)院尔,如下所示。
VictoriaMetrics總結(jié)
VictoriaMetrics的整體的存儲(chǔ)設(shè)計(jì)還是不錯(cuò)的喉誊,比如數(shù)據(jù)時(shí)間分區(qū)邀摆、數(shù)據(jù)壓縮率高、豐富的生態(tài)協(xié)議等伍茄。但VictoriaMetrics的標(biāo)簽索引栋盹、數(shù)據(jù)可靠性、支持的數(shù)據(jù)類型等方面還存在一些不足敷矫。比如贞盯,標(biāo)簽索引查詢多次IO音念,可能在時(shí)間線數(shù)量非常多的場景下,其檢索效率會(huì)比較低躏敢,且沒有WAL,在寫入時(shí)可能會(huì)存在數(shù)據(jù)丟失的風(fēng)險(xiǎn)整葡。目前只支持浮點(diǎn)數(shù)類型件余,不支持布爾、字符串遭居、字節(jié)數(shù)組等類型啼器。