传统库分表麻烦查询慢?TDengine 如何解决“搜狐基金”的应用难题

news2024/11/24 1:48:23

该项目需要实时展示国内基金的净值和收益(货币基金),在保证满足折线图展示的功能基础上,还需要加入统计排行、分页展示等功能,为用户提供最全面实时的查询服务。此前搜狐基金团队使用的 MySQL 数据库在面对海量数据时存在能力瓶颈,在此背景下,其决定基于 TDengine 尝试一下全新的方案。

选型背景

在使用 TDengine 之前,我们使用的是 MySQL 数据库。

由于所购买的数据源的基金数据都是混在一起的,包含来自国内的2万只基金,跨越几十年(从九几年至今)的数千万行较宽的数据,如果通过 MySQL 来存储这些数据,我们首先要把每个基金的数据分表,有一定程度的工作量,所以我们决定先全量保存这些数据在一张表中。

但这种大表会导致查询的性能非常低下,为了应对这一问题,我们通过离线查询生成每天的基金数据图片返回给用户,暂未对外提供自定义查询服务。

与此同时,经历了以上种种,我们也在怀疑传统关系型数据库面对海量数据的能力瓶颈。这时候,我们了解到了 TDengine ,它的核心是一款时序数据库(Time Series Database),它“一个设备一张表”的特殊设计,与我们正在做的“一个基金一张表”的分表工作不谋而合。因此我们决定基于 TDengine 尝试一下全新的方案。

使用经历

通过充分调研和测试后,我们发现:

由于“超级表”的存在,数据建模变得非常清晰,几乎所有查询都可以以“超级表”为核心用简单的 SQL 完成。

此外,由于“自动建表”这个特色功能,我们可以无需校验就能够直接建表,这让我们得以非常轻松地完成各只基金数据的拆分建表以及写入工作。

可以说,接入 TDengine 的前期准备工作十分顺利。

传统库分表麻烦查询慢?TDengine 如何解决“搜狐基金”的应用难题 - TDengine Database 时序数据库

我们使用三台 4C 16GB 的服务器组建了 TDengine 的集群。

数据库创建语句如下:

传统库分表麻烦查询慢?TDengine 如何解决“搜狐基金”的应用难题 - TDengine Database 时序数据库

值得一提的是,基金数据是一日一条,属于低频次数据。对于这种数据,默认的配置是不够的。一开始我们的查询性能并不快,基本都是在秒级别甚至还有更高。

通过文档和博客以及官方团队的支持,我们放大了 duration 和 stt_trigger 参数,这样确保了不会产生过多的文件碎片影响读写性能,后续的查询全部被优化至毫秒级别。

因此我们总结出来一点经验就是:不同的写入频率属于不同的业务场景,最好不要使用同一个库,而是要分库处理比较好。

超级表建模如下:

传统库分表麻烦查询慢?TDengine 如何解决“搜狐基金”的应用难题 - TDengine Database 时序数据库

传统库分表麻烦查询慢?TDengine 如何解决“搜狐基金”的应用难题 - TDengine Database 时序数据库

当前在日常使用时,业务查询在 100 qps 的情况下,均可以实现毫秒级实时返回数据。

从超级表的设计特点出发,我们在超级表维度上做统计分析就方便多了,比如:筛选类型和日期的全量基金查询——

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')

传统库分表麻烦查询慢?TDengine 如何解决“搜狐基金”的应用难题 - TDengine Database 时序数据库

又比如,查询目前基金净值排行和收益排行,通过简单的 SQL 即可实现——

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}

传统库分表麻烦查询慢?TDengine 如何解决“搜狐基金”的应用难题 - TDengine Database 时序数据库

与此同时我们搭建了 Grafana 可视化监控体系,利用各种监控工具和软件来收集、存储和分析监控数据,并通过可视化界面提供实时的监控图表和警报,帮助项目相关负责人即时识别修改问题,进一步提高了服务的可靠性和稳定性。

写在最后

总而言之,在保证稳定高效运行的前提下,我们已经通过 TDengine 逐步平滑替代原有功能。考虑到国内基金项目只是一个开始,围绕着股票等其他项目,我们仍需要对这款国产时序库做更多的研究与学习。

企业简介

搜狐公司是中国著名的的综合性互联网企业,主要业务领域包括新媒体、通信以及移动增值服务,集成了娱乐中心、体育中心、时尚文化中心等多重角色。

作者介绍

武朋,搜狐智能平台高级开发工程师。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux粘滞位的介绍及使用

文章目录 1.粘滞位的引入2.粘滞位的使用 1.粘滞位的引入 首先看一个场景 已知 对目录无w权限时 无法进行目录中的文件的创建/删除操作但是普通用户通过sudo命令 以root身份创建一个文件 rw- r-- r-- 普通用户此时是other 没有w权限 但却可以删除 [root和普通用户在一个目录下时…

【LittleXi】ICPC2023 南京站 总结

【LittleXi】ICPC2023 南京站 总结 赛前: 一周两次的vp训练 cf div2正常打、补题、沉淀,顺便vp了两把(网瘾了) 热身赛 熟悉了一下键盘,顺便交了一下A题的随机算法 测试评测了bitset、map、hashmap、打印时间&…

立冬问候语,立冬祝福语图片大全,温暖您整个冬天

立冬了,花落的声音冬知道,关爱的感觉心知道,立冬快乐,天凉保重! 立冬寒气从天降,保重身心体健康,出入平安鸿运照,幸福快乐又吉祥,立冬,祝朋友们冬天幸福快乐安…

SpringBoot整合Canal+RabbitMQ监听数据变更(对rabbit进行模块封装)

SpringBootCanal(监听MySQL的binlog)RabbitMQ(处理保存变更记录) 在SpringBoot中采用一种与业务代码解耦合的方式,来实现数据的变更记录,记录的内容是新数据,如果是更新操作还得有旧数据内容。 使用Canal来监听MySQL的…

埃隆·马斯克旗下xAI推出PromptIDE工具,加速提示工程和可解释性研究

🦉 AI新闻 🚀 埃隆马斯克旗下xAI推出PromptIDE工具,加速提示工程和可解释性研究 摘要:埃隆马斯克旗下人工智能初创公司xAI推出了PromptIDE工具,该工具是一个用于提示工程和可解释性研究的集成开发环境。通过该工具&a…

MATLAB|怎么将散点图替换成图片

目录 效果图 工具箱函数 输入参数: 输出参数 使用教程 案例1 案例3 案例4 案例5 案例6 案例7 案例8 扫一扫关注公众号: 今天教大家怎么把散点图替换成自己喜欢的图片,喜欢此推文的小伙伴们记得点赞关注分享! 效果图 看了slandare…

【BUG解决】服务器没报警但是应用接口崩了....

最近遇到一个突发问题:服务器没报警但是应用接口崩了… 为其他业务系统提供一个接口,平时好好的,突然就嚷嚷反馈说访问不了了,吓得我赶紧跳起来! 正常情况下在系统崩溃前,我会收到很多系统报警&#xff0…

【Unity】光照烘培-基础参数-基础设置

光照烘培 一级目录二级目录 问题目录烘焙光照在手机不起作用 一级目录 二级目录 Unity 2020.3.25 打开灯光面板 Wingdow -》 Rendering -> Lighting Lighting Settings 灯光设置文件 Realtime Lighting Realtime Global lllumin Realtime Environme Mixed Lighting Ba…

欧科云链:成本与规模之辨——合规科技如何赋能香港Web3生态?

作为国际金融中心,香港近两年来在虚拟资产及Web3领域频频发力。秉持着“稳步创新”的基本逻辑,香港在虚拟资产与Web3领域已建立一定优势,但近期各类风险事件的发生则让业界的关注焦点再次转向“安全”与“合规”。 在香港FinTech Week前夕&a…

【Hugging Face】如何下载模型文件

参考文章: 1、mac安装Homebrew - 知乎 2、 ssh连接 git lfs install git clone githf.co:bert-base-uncased -- 安装Homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" -- 配置文件生效 source /Use…

创邻科技再获人行旗下《金融电子化》2023年度大奖

11月3日,由中国人民银行核心金融期刊《金融电子化》与第五届数字金融应用博览会共同主办的第14届金融科技大会在江苏苏州举行。 大会现场揭晓了2023年度“金融科技创新奖”,创邻科技的“Galaxybase全行级图应用平台”项目,从全国各金融机构送…

支持企业微信集成和登录!镭速传输新版本带来多项升级

近日,镭速发布了最新版本V.6.7.8.0,增加了一些新的功能和优化,为用户带来更好的体验。以下是本次更新的主要内容: 01 企业微信集成 企业微信登录功能为企业提供了更加便捷的用户管理和权限控制。在镭速的新版本中,通…

查出来这个表中evaluation_num字段中以2023开头的最大的尾数是几,instr用法

查出来这个表中evaluation_num字段中以2023开头的最大的尾数是几, sql如下: select max(to_number(substr(evaluation_num,instr(evaluation_num,-,1,2)1))) evaluation_num from tbl_lawsuit_index_assess_rec where to_char(create_time,yyyy)2023我…

某相亲网站白合网js逆向解析,★

文章目录 前言网址:参数加密确定加密位置和加密的参数解析加密方法完结撒花前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以留言发给我,一起学习共享学习路程 如侵权,联系我删除 此文仅用于学习交流,请…

队列(定义,基本操作,顺序存储,链式存储)

目录 1.队列的定义1.重要术语2.基本操作 2.队列的顺序存储1.基本操作1.初始化2.判空3.入队(循环队列)4.出队5.读队头 2.判断队列已满/已空 3.队列的链式存储1.基本操作(带头结点)1.初始化2.判空3.入队4.出队5.队满条件 1.队列的定…

腾讯广告RACE曝光归因模型

今天我们以腾讯广告RACE曝光归因模型为例(以下简称RACE模型),来聊聊行业在衡量广告效果上的努力与成效。 第一类:衡量转化以及转化过程的归因 如同前面所讲,如果只是衡量ROI,对广告投放的效果衡量就只有一…

idea配置插件JRebel and XRebel

激活 点击Help—>JRebel—>Activation 激活地址: http://server.52zhaoyue.cn/b56c9b61-2e80-4e31-82b4-15271a93e8c7 b56c9b61-2e80-4e31-82b4-15271a93e8c7生成地址https://www.guidgen.com/ 激活邮箱: 自由 激活及确认 方案1:激活后直接显示 激活信息…

第二证券:北交所30%的涨跌幅限制?

随着我国股市的不断发展,股市生意的涨跌幅束缚也成为了一个备受注重的论题。在北交所,股票的涨跌幅束缚为30%,这一束缚是否合理呢?本文将从多个角度进行剖析。 首先,涨跌幅束缚对于股市的安稳起着重要的效果。股票价格…

CSS实现透明度效果的两种方法—— opacity 和 rgba()

在实际开发过程中&#xff0c;为了给用户呈现一些效果&#xff0c;我们需要控制元素的透明度。CSS 提供了 opacity 属性和 rgba() 函数给我们控制透明度&#xff0c;接下来通过一个例子来感受一下两种方法的区别。 <style>.transparentBox {display: inline-block;width…

telnet不是内部或外部命令

telnet不是内部或外部命令-telnet测试端口是否开放 在windows系统上开启Telnet服务 win8以上系统&#xff1a;"开始"→"控制器面板"→"程序和功能"→ 左侧"启动或关闭windows功能"→ 在"Windows功能"界面勾选Telnet服务器和…