六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

傳統(tǒng)庫分表麻煩查詢慢?TDengine 如何解決“搜狐基金”的應(yīng)用難題

搜狐基金, 武朋

2023-11-02 /

該項(xiàng)目需要實(shí)時(shí)展示國內(nèi)基金的凈值和收益(貨幣基金),在保證滿足折線圖展示的功能基礎(chǔ)上,還需要加入統(tǒng)計(jì)排行、分頁展示等功能,為用戶提供最全面實(shí)時(shí)的查詢服務(wù)。此前搜狐基金團(tuán)隊(duì)使用的 MySQL 數(shù)據(jù)庫在面對海量數(shù)據(jù)時(shí)存在能力瓶頸,在此背景下,其決定基于 TDengine 嘗試一下全新的方案。

選型背景

在使用 TDengine 之前,我們使用的是 MySQL 數(shù)據(jù)庫。

由于所購買的數(shù)據(jù)源的基金數(shù)據(jù)都是混在一起的,包含來自國內(nèi)的2萬只基金,跨越幾十年(從九幾年至今)的數(shù)千萬行較寬的數(shù)據(jù),如果通過 MySQL 來存儲這些數(shù)據(jù),我們首先要把每個(gè)基金的數(shù)據(jù)分表,有一定程度的工作量,所以我們決定先全量保存這些數(shù)據(jù)在一張表中。

但這種大表會導(dǎo)致查詢的性能非常低下,為了應(yīng)對這一問題,我們通過離線查詢生成每天的基金數(shù)據(jù)圖片返回給用戶,暫未對外提供自定義查詢服務(wù)。

與此同時(shí),經(jīng)歷了以上種種,我們也在懷疑傳統(tǒng)關(guān)系型數(shù)據(jù)庫面對海量數(shù)據(jù)的能力瓶頸。這時(shí)候,我們了解到了 TDengine ,它的核心是一款時(shí)序數(shù)據(jù)庫(Time Series Database),它“一個(gè)設(shè)備一張表”的特殊設(shè)計(jì),與我們正在做的“一個(gè)基金一張表”的分表工作不謀而合。因此我們決定基于 TDengine 嘗試一下全新的方案。

使用經(jīng)歷

通過充分調(diào)研和測試后,我們發(fā)現(xiàn):

由于“超級表”的存在,數(shù)據(jù)建模變得非常清晰,幾乎所有查詢都可以以“超級表”為核心用簡單的 SQL 完成。

此外,由于“自動建表”這個(gè)特色功能,我們可以無需校驗(yàn)就能夠直接建表,這讓我們得以非常輕松地完成各只基金數(shù)據(jù)的拆分建表以及寫入工作。

可以說,接入 TDengine 的前期準(zhǔn)備工作十分順利。

傳統(tǒng)庫分表麻煩查詢慢?TDengine 如何解決“搜狐基金”的應(yīng)用難題 - TDengine Database 時(shí)序數(shù)據(jù)庫

我們使用三臺 4C 16GB 的服務(wù)器組建了 TDengine 的集群。

數(shù)據(jù)庫創(chuàng)建語句如下:

傳統(tǒng)庫分表麻煩查詢慢?TDengine 如何解決“搜狐基金”的應(yīng)用難題 - TDengine Database 時(shí)序數(shù)據(jù)庫

值得一提的是,基金數(shù)據(jù)是一日一條,屬于低頻次數(shù)據(jù)。對于這種數(shù)據(jù),默認(rèn)的配置是不夠的。一開始我們的查詢性能并不快,基本都是在秒級別甚至還有更高。

通過文檔和博客以及官方團(tuán)隊(duì)的支持,我們放大了 duration 和 stt_trigger 參數(shù),這樣確保了不會產(chǎn)生過多的文件碎片影響讀寫性能,后續(xù)的查詢?nèi)勘粌?yōu)化至毫秒級別。

因此我們總結(jié)出來一點(diǎn)經(jīng)驗(yàn)就是:不同的寫入頻率屬于不同的業(yè)務(wù)場景,最好不要使用同一個(gè)庫,而是要分庫處理比較好。

超級表建模如下:

傳統(tǒng)庫分表麻煩查詢慢?TDengine 如何解決“搜狐基金”的應(yīng)用難題 - TDengine Database 時(shí)序數(shù)據(jù)庫
傳統(tǒng)庫分表麻煩查詢慢?TDengine 如何解決“搜狐基金”的應(yīng)用難題 - TDengine Database 時(shí)序數(shù)據(jù)庫

當(dāng)前在日常使用時(shí),業(yè)務(wù)查詢在 100 qps 的情況下,均可以實(shí)現(xiàn)毫秒級實(shí)時(shí)返回?cái)?shù)據(jù)。

從超級表的設(shè)計(jì)特點(diǎn)出發(fā),我們在超級表維度上做統(tǒng)計(jì)分析就方便多了,比如:篩選類型和日期的全量基金查詢——

select time, code, name, manager_id, manager_name, unit_net_value, pre_unit_net_value, accumulate_net_value, pre_day_rate, pre_week_rate, pre_month_rate, pre_three_month_rate, pre_half_year_rate, pre_year_rate, pre_cur_year_rate, pre_start_rate, last_time, last_unit_net_value, last_accumulate_net_value, asset_size from fund_net_value where time = #{date} and (type = '003009' or type = '003010')
傳統(tǒng)庫分表麻煩查詢慢?TDengine 如何解決“搜狐基金”的應(yīng)用難題 - TDengine Database 時(shí)序數(shù)據(jù)庫

又比如,查詢目前基金凈值排行和收益排行,通過簡單的 SQL 即可實(shí)現(xiàn)——

select time, code, name, manager_id, manager_name, unit_net_value, pre_unit_net_value, accumulate_net_value, pre_day_rate, pre_week_rate, pre_month_rate, pre_three_month_rate, pre_half_year_rate, pre_year_rate, pre_cur_year_rate, pre_start_rate, last_time, last_unit_net_value, last_accumulate_net_value, asset_size from fund_net_value where time = #{date} and order by ${column} ${sort} limit #{offset}, #{size}
傳統(tǒng)庫分表麻煩查詢慢?TDengine 如何解決“搜狐基金”的應(yīng)用難題 - TDengine Database 時(shí)序數(shù)據(jù)庫

與此同時(shí)我們搭建了 Grafana 可視化監(jiān)控體系,利用各種監(jiān)控工具和軟件來收集、存儲和分析監(jiān)控?cái)?shù)據(jù),并通過可視化界面提供實(shí)時(shí)的監(jiān)控圖表和警報(bào),幫助項(xiàng)目相關(guān)負(fù)責(zé)人即時(shí)識別修改問題,進(jìn)一步提高了服務(wù)的可靠性和穩(wěn)定性。

寫在最后

總而言之,在保證穩(wěn)定高效運(yùn)行的前提下,我們已經(jīng)通過 TDengine 逐步平滑替代原有功能。考慮到國內(nèi)基金項(xiàng)目只是一個(gè)開始,圍繞著股票等其他項(xiàng)目,我們?nèi)孕枰獙@款國產(chǎn)時(shí)序庫做更多的研究與學(xué)習(xí)。

企業(yè)簡介

搜狐公司是中國著名的的綜合性互聯(lián)網(wǎng)企業(yè),主要業(yè)務(wù)領(lǐng)域包括新媒體、通信以及移動增值服務(wù),集成了娛樂中心、體育中心、時(shí)尚文化中心等多重角色。

作者介紹

武朋,搜狐智能平臺高級開發(fā)工程師。