AmzTrends x TiDB Serverless:通过云原生改造实现全局成本降低 80%
本文介绍了厦门笛卡尔数据(AmzTrends)在面临数据存储挑战时,选择将其数据分析服务迁移到 TiDB Serverless 的思路和实践。通过全托管的数据库服务,AmzTrends 实现了全局成本降低 80% 的效果,同时也充分展示了 TiDB Serverless 在简化架构、提升性能和降低成本方面的优势。未来,AmzTrends 计划继续利用 TiDB Serverless 的优势,扩展业务并提升竞争力。
厦门笛卡尔数据是一家专注于跨境电商数据分析的 SaaS 公司,AmzTrends 为亚马逊卖家提供品牌分析(ABA)、商机探测以及广告数据的可视化分析。目前,AmzTrends 主要以 SAAS 和 Chrome、紫鸟浏览器的插件形式为客户提供数据服务,以订阅模式为美国、日本、中国数万计的跨境电商卖家提高数据服务,帮助卖家在选品、运营、广告等运营环节提供专业的数据分析决策价值 。

业务挑战
AmzTrends 的数据主要以大单表的形式进行存储,最大的表数据量超过 22 亿,字段较多且某些字段很长的大宽表,单表中存在结构化与非结构化的数据结构,因此需要建立大量的索引,占用大量存储空间,而且过期数据还需要定期清理,经常使用 BATCH 进行批量操作,一旦遇到异常无法无法事务的一致性,因此数据维护压力巨大。
技术痛点
在业务初期,AmzTrends 选择了在百度云上自建 TiDB 集群,资源按月付费。集群规模包含 1 个 TiDB 节点、1 个 PD 节点(此种部署方式会损害 PD 的高可用性,为了节约成本的部署方式,是官方不推荐的高风险方案)、3 个 TiKV 节点,技术人员通过将亚马逊下载的原始 CSV 格式的数据批量写入到 TiDB 中进行数据分析。此外还单独配置了 3 台服务器部署 Spark,进行全量复杂的数据计算分析。但 Spark SQL 与关系型数据库不同,需要专人运维,复杂的业务架构造成了资源冗余,使得运维成本较高。

由于集群配置不够加上专业运维团队的缺失,弃用了 Spark,大量复杂且数据计算量巨大的任务由 Spark 转到 TiDB 直接运行,集群越来越不稳定,数据安全面临严重挑战。在这种情况下,AmzTrends 不得不寻找对技术要求更低且更安全的运维解决方案。在接触到 TiDB Serverless 后,AmzTrends 认为由于都是 TiDB 产品体系,全托管的一栈式数据库服务 TiDB Serverless 不仅可以充分发挥 TiDB 数据库原有的特性和优势,还可以帮助公司简化架构,提升系统的整体性能和健壮性。所以,AmzTrends 决定将整体应用从百度云部署方案迁入 TIDB Serverless,不仅风险更低且兼容性和性能都能得到有效保证,另外通过数据容量与请求量的成本预估,AmzTrends 发现迁移后成本能比现有的云服务器部署更低,因此有了这样一次充满挑战的数据迁移过程。
为什么选择 TiDB Serverless?
TiDB Serverless 是一种全托管的、自动化的数据库服务(DBaaS),能够快速部署集群,并按实际使用资源量计费。结合自身业务架构特性,AmzTrends 在考虑 TiDB Serverless 时重点关注以下特性:
● 轻松扩展基础设施,按实际使用量付费 :商家只有在工作日时间才会使用 AmzTrends 的数据分析服务,而传统的云模式需要为预估的最大流量付费,容易造成闲时资源浪费。TiDB Serverless 可以秒级搭建起数据库环境,用户只需为实际的数据处理和存储付费,这让 AmzTrends 开发团队能够更专注于创新和发展。
● 轻松上手,无需手动分片 :以前, AmzTrends 的 20 亿数据需要定期进行清理或者分片,应用 TiDB Serverless 可以帮助用户摆脱数据分片等数据库繁琐的操作任务,相当于只维护一张大表即可,既可以满足更长时间维度的查询需求,又无需反复对数据进行整理操作。
● 自动伸缩,成本效益显著 :无论是存储、事务处理还是分析工作负载,AmzTrends 都能在几秒内根据应用需求自动伸缩,避免造成资源冗余浪费,既灵活又经济。
● 全面托管,无感运维 :为 AmzTrends 提供最优化的 TiDB 部署方案,免去了服务器配置维护的烦恼。以前一旦出现故障就需要人工进行紧急处理,使用全托管的 TiDB Serverless 后运维人员可以安心入眠。
● 熟悉的 SQL 接口,灵活应对业务增长 :TiDB Serverless 保持了开发者熟悉的 MySQL SQL 语言,AmzTrends 无需进行额外的学习即可高效地投入开发工作,同时 TiDB Serverless 具有一个高度灵活扩展的分布式架构,可以随需弹性扩缩容,应对业务的快速增长。
解决方案
决定迁移后,AmzTrends 采用 TiDB Serverless 替代了云上自建的 TiDB 集群,将数据全量迁移到 TiDB Serverless 中,简化了架构,大大缓解了运维压力,降低总体 IT 成本。

迁移后,AmzTrends 在 PingCAP 官方服务的帮助下也进行了架构简化、优化建表、索引优化,提高了整体数据处理效率,并使 AmzTrends 业务架构演进至云原生模式:
○ 索引优化:通过发现和删除冗余数据索引,节省了 50% 的数据库成本;
○ SQL 查询性能提升:优化索引后,不仅提高了查询速度,也显著减少了成本;
○ 架构简化:自建配置中心和服务注册要求的最小三台云服务器转变为单台云服务器,降低了成本和复杂性;
○ 业务缓存建立:在了解业务的基础上建立了业务缓存,进一步降低了实际查询量,节约成本。
项目收益
全托管一栈式数据库服务库服务
TiDB Serverless 提供全托管的服务模式,充分发挥了 TiDB 数据库的原有特点和优势,简化了 Amztrends 的整体架构,提升了性能和系统健壮性,同时降低了总体成本。
数据架构成本节省 50%
通过云原生改造,Amztrends 在数据架构方面节省了 50% 的成本。( Serverless 采用全分离架构,Amztrends 只需为使用付费,无需浪费闲置资源)
整体服务资源节约 30%
简化架构后,Amztrends 前端服务资源实现了 30% 的资源节约。
全局成本降低 80%
综合上述优化,Amztrends 实现了整体成本降低 80%。
总结
TiDB Serverless 作为全托管一站式的数据库服务,从根本上解决了 Startup 公司基础架构门槛高的难题,即使缺少专业运维人员,也可以拥有简化、健壮的数据基础架构,获得了更高的系统稳定性和可用性。同时,Serverless 的 “Pay as you go”模式提供了更灵活、更优化的资源利用率,AmzTrends 从百度云迁移至 AWS 之后,总体 IT 成本实现了大幅下降。在此基础上,这种灵活的资源使用模式也可以让 AmzTrends 探索更灵活、更具性价比的商业方案,为商业模式提供更多可能性。
AmzTrends PM Steve 表示:“迁移到 TiDB Serverless 后我们不会再去担心数据库的问题,完全放心交给 TiDB Serverless 就好了。用最简单的话来讲,没有问题就是最好的结果。”
未来
未来,Amztrend 计划继续利用 TiDB Serverless 的优势,进一步扩展其业务并探索更多的数据分析和优化机会。公司还计划通过持续的技术改进和优化,维持并提升其在市场上的竞争力。
相关文章:
AmzTrends x TiDB Serverless:通过云原生改造实现全局成本降低 80%
本文介绍了厦门笛卡尔数据(AmzTrends)在面临数据存储挑战时,选择将其数据分析服务迁移到 TiDB Serverless 的思路和实践。通过全托管的数据库服务,AmzTrends 实现了全局成本降低 80% 的效果,同时也充分展示了 TiDB Ser…...
[最佳实践] Windows上构建一个和Linux类似的Terminal
感谢大佬批评指正,现已更新 preview Target:致力打造最赏心悦目Window下的终端,同时能够很接近Linux的使用习惯 key word:windows终端美化 windows terminal windows powershell 类似Linux下的Window终端 Window也能用ll windows…...
租赁系统|手机租赁软件|租赁系统功能开发
当如今的生活用品越来越多、交流更加便捷时,人们的消费需求也变得越来越丰富。不可避免地,我们会遇到这样一种情况:需要新的手机,但资金有限。此时,手机租赁小程序呼之欲出。这种创意不仅使我们能够充分利用各类闲置物…...
【设计模式 04】建造者模式
如果要构建的对象很复杂,那么可以将整个构建过程拆分成多个步骤,并为每一个步骤定义一个抽象的接口。并添加一个指导者用来控制构建产品的顺序和步骤。 Java实现: // 产品类 class Product {private String part1;private String part2;pub…...
Python使用错误总结
【1】cannot import name ‘ParameterSource’ from ‘click.core’ 其根本原因在于是black模块,其模块版本可能过时,升级black模块版本即可: pip install black --upgrade【2】partially initialized module ‘charset_normalizer’ has n…...
【Java EE初阶三十】JVM的简单学习
1. JVM 内存区域划分 一个运行起来的 Java 进程,就是一个 JVM 虚拟机,需要从操作系统申请一大块内存,就会把这个内存,划分成不同的区域,每个区域都有不同的作用. JVM 申请了一大块内存之后,也会划分成不同的内…...
thinkphp5水平分割表partition,以及查询操作
前言 先交代下背景,在一个项目中,有一个数据表有水平分表的需求。当时想找到一种方法,把对数据库的操作,写到一个模型里,通过去换模型属性中的table来达到代码不变操作的数据表变化的效果。 我们都知道,模型要想关联数据表的话&a…...
docker部署aria2-pro
前言 我平时有一些下载视频和一些资源文件的需求,有时候需要离线下载,也要速度比较快的方式 之前我是用家里的玩客云绝育之后不再写盘当下载机用的,但是限制很多 我发现了aria2 这个下载器非常适合我,而有个大佬又在原来的基础…...
vue中Mixins
使用 Mixins 的主要优点包括: 代码复用: 可以将常用的逻辑封装在 Mixin 中,然后在多个组件中重复使用。逻辑分离: 将不同功能的代码分开管理,使代码更加清晰和易于维护。灵活性: Mixins 允许你在组件中引入多个 Mixin,并且可以根…...
linux常用指令(定期更新)
linux常用指令 1.页相关页大小 2.系统参数3.启动参数4.网络参数查询网卡所属numa节点信息网络测速相关iperf测试sar监控网卡流量查看网卡txqueuelen和mtu抓包tcpdump 网络数据收发状态snmp协议栈netstat -i所有网口TX-OK、RX-OKnetstat-s查看各个协议的收发数据ethtool -S单个网…...
【项目】图书管理系统
目录 前言: 项目要求: 知识储备: 代码实现: Main: Books包: Book: BookList: Operate包: Operate: addOperate: deleteOperate: exitOperate: findOperate:…...
华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)
目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷&am…...
[数据集][图像分类]棉花叶子病害分类数据集2293张4类别
数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):2293 分类类别数:4 类别名称:["diseased_cotton_leaf"…...
《辐射4》是一款什么样的游戏 怎样在mac电脑上玩到《辐射4》辐射4攻略 辐射4开局加点 怎么在Mac电脑玩Steam游戏
辐射4(Fallout 4)是由Bethesda开发的一款动作角色扮演类游戏,为《辐射》系列游戏作品的第四代,于2015年11月10日发行。游戏叙述了主角一家在核爆当天(2077年10月23日),被Vault-Tec(避…...
视频推拉流EasyDSS平台直播通道重连无法转推的原因排查与解决
视频推拉流EasyDSS视频直播点播平台,集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 用户使用EasyDSS平台对直播通道进行转推,发现只要关闭…...
Javaweb之SpringBootWeb案例之自动配置案例的自定义starter测试的详细解析
3.2.4.3 自定义starter测试 阿里云OSS的starter我们刚才已经定义好了,接下来我们就来做一个测试。 今天的课程资料当中,提供了一个自定义starter的测试工程。我们直接打开文件夹,里面有一个测试工程。测试工程就是springboot-autoconfigurat…...
java包的相关概念
包:有效地管理类的一个机制。 包名的目的:通过隶属不同的包有效的区分不同源文件中名字相同的类 包语句 声明:通过关键字 package声明包语句。 位置:源文件中的第一条语句。 作用:为该源文件中声明的类指定包名。 …...
window搭建本地mongo数据库并导入数据
1 window下载mongo数据库 官网:www.mongodb.com 选择 Products > Community Edition 就能进入社区版 在这里下载 windows 版对应的安装包 注意:6.0.1 版本的 MongoDB 配置环境变量有问题,并且我不知道怎么解决,如果想要避免出…...
如何为Android车载应用开发通知?
如何为Android车载应用开发通知?在开发车载应用的通知时,开发者需要考虑到驾驶安全,确保通知不会分散驾驶员的注意力。这通常意味着通知应该是非侵入性的,或者在不影响驾驶的情况下提供信息。开发者可以使用Android的通知API来创建…...
centos上部署k8s
环境准备 四台Linux服务器 主机名 IP 角色 k8s-master-94 192.168.0.94 master k8s-node1-95 192.168.0.95 node1 k8s-node2-96 192.168.0.96 node2 habor 192.168.0.77 镜像仓库 三台机器均执行以下命令: 查看centos版本 [rootlocalhost Work]# cat /…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
