连锁企业如何通过OceanBase解决数据库瓶颈

本文来自OceanBase客户,重庆三十七度健康管理有限公司的技术负责人Rinvay的分享

背景

足疗养生对于大家来说应该并不陌生,自古以来便有多部古籍记载。尽管现代生活中,人们可能不再严格遵循节气进行泡脚,但在忙碌的工作间隙,许多人仍会选择足疗等养生方式,以舒缓身心,缓解疲劳。

如今大多数人已经接受自己的基础信息被录入商家系统,却想不到一个简单的支付动作或会员查询请求背后涉及多么复杂的数据管理系统。

重庆三十七度健康管理有限公司(以下简称“三十七度”)是一家致力于为客户提供品质养生体验与惬意生活的公司,足疗就是该公司旗下品质养生的一部分业务,客户管理系统使用了MySQL、PostgreSQL、MongoDB这三个数据库,用来管理会员卡与储值卡。

门店扩张带来三个系统瓶颈

随着三十七度旗下品牌和门店的不断扩张,公司内部对数据的要求以及对安全的要求越来越高,系统逐渐显露出许多问题。举个例子,由于每天订单信息等数据不断累积,数据总量达到100GB后,单机备份无法实现,使用MySQL做备份的时候由于I/O及其他问题,导致系统运行有几分钟甚至几十分钟的停滞。前台提交的请求比如交易、支付等都会报告异常。对此,技术团队尝试采用MySQL主从复制将数据库实时复制后在另一台设备进行备份,尝试了Binlog及GTID的方式,但该方案在意外停机或者一些异常情况下,导致GTID或Binlog出现异常无法对齐,同步失败,备份失效。

在这个例子中,涉及三个系统瓶颈。

瓶颈1,备份困难。MySQL备份的难点主要体现在数据量较大时备份效率低下的问题。MySQL备份通常采用物理备份或逻辑备份的方式进行,但是在备份过程中,会出现锁表、卡顿等现象,导致备份效率低下,同时也会对业务产生影响。随着门店的数据量不断增加,,数据以几何增长堆积到决策系统,安全备份就成了空谈。

瓶颈2,数据丢失。在随机读写过程中,MySQL可能会发生异常关闭,导致数据丢失,而且系统无法快速恢复服务,需要做容灾处理,比如多活。但是,MySQL不自带多活能力,需要借助第三方工具,不仅配置麻烦,也会带来额外的资源消耗。

瓶颈3,高可用困难。MySQL高可用方案包括主从复制、半同步复制、MHA、MySQL Cluster等,但是这些方案都存在各自的问题。例如,主从复制可能会出现数据不一致的问题,半同步复制可能会导致写入性能下降,MHA的自动切换可能会出现误判等问题,MySQL Cluster的性能和扩展性也存在瓶颈。因此,MySQL在高可用方面的解决方案不够完善,需要借助第三方工具,增加了配置和维护的难度。

由于三十七度计划自研新CRM客户管理系统和商城模块,并与收银系统进行打通,便开始寻求新的数据库解决方案。

寻求稳定而高效的数据库解决方案

我们在考虑数据库选型时,曾经考虑过PostgreSQL和TiDB等数据库,但最终选择了OceanBase。”团队技术负责人Rinvay坦言,相对于PostgreSQL和TiDB等数据库,OceanBase具有以下优势:

  • 高可用性:OceanBase自带多活能力,可以实现业务的高可用性,而TiDB的高可用性需要借助TiDB的PD、TiKV等组件,增加了系统的复杂度和维护成本。
  • 扩展性:OceanBase采用分布式架构,可以根据业务需求灵活扩展节点,而TiDB的扩展性受限于PD和TiKV的性能和扩展性。
  • 兼容性:OceanBase与MySQL的语法基本相同,可以实现无缝迁移,降低了公司的学习成本,而PostgreSQL和TiDB的语法与MySQL略有不同,需要重新学习。

三十七度最终选择了OceanBase作为新系统的数据库,因为它能够为企业提供更加稳定和高效的数据库解决方案,同时也能够满足公司的业务需求。

线上部署过程中的小插曲

在选定数据库后,三十七度技术团队开始针对OceanBase的部署进行学习研究,得益于OceanBase社区的完善以及部署脚本等大多都是一键部署的关系,团队很快就在本地机房搭建了一套基于OCP管理的OceanBase数据库,进行了核心业务的开发。

当然,在开发过程中,也遇到了很多问题。

问题1:分区数量过多。订单明细表每天都有上百万条数据,以至于分区数量达到8000个左右,导致表增改字段操作速度慢,语句执行失败。此时,唯一的办法是在后台删除进程或避免该操作。经过重新制定分区策略后(将数据备份,删掉分区并重建),目前分区数量降至200个。每个分区的数据量约500万条,卡顿问题就很少出现了。经过深入排查分析之后,得出结论:大概率是因为机器资源紧张而分区数过多导致(单机8c 16g)的。

问题2:OceanBase 4.0备份机制已知Bug。在测试时,三十七度使用的是OceanBase 3.x版本,上线4.0版本后,使用OCP增加备份策略一直未能成功。原因是备份时需要自动执行,如果选择“不执行”则报错,提示缺少admin文件,团队架构师刘亿谈到。计划升级到4.1版本再做备份,OceanBase在线升级不用停机,不会对业务造成影响。

问题3:连接驱动问题。使用JDBC2.4版本无法连接OBProxy,但可以连接三节点集群,或使用JDBC v3.0也可以连接OBProxy。

对于这些问题,我们也得到了OceanBase社区版的支持和帮助,历时一年半完成了整套系统的研发和测试,在2023年的3月份正式启动上线并成功完成上线。线上部署主要采用了三个OceanBase节点,使用OCP进行集群管理维护及告警提醒等,还采用了OBProxy进行访问代理。目前日活跃用户超过5万,日订单及其他数据承载量为15-20万单,注册/转移会员超过50万,借助OceanBase的强大驱动力,三十七度正在用技术的力量一点点改变世人对足浴行业的固有认知,让智能和健康与足浴于大健康相互绑定相互衬托。

总结与展望

对于后续计划,三十七度会将现有系统升级为支持主备的OceanBase 4.1版本,并将旧业务也迁移至新系统。

2023年是AI技术元年,随着AI技术的不断进步,有一个稳定的数据库大后方为我们的数据提供强有力的支撑才能让‘Chat‘们在用户手中开出花。我们有理由相信有着这样一支以‘打造极致体验感‘为理念的团队支撑三十七度不断前行,一定能为客户带来更优秀的体验。也相信依托OceanBase 的独特技术优势和成为国之重器的决心,一定能在未来的合作中碰撞出更多智慧的火花。

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

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

相关文章

C语言例题31:在屏幕上显示一个菱形

题目要求&#xff1a;在屏幕上显示一个菱形 #include <stdio.h>void main() {int i, j;int x;printf("输入菱形行数(3以上的奇数&#xff09;&#xff1a;");scanf("%d", &x);//显示菱形上面的大三角形for (i 1; i < (x 1) / 2; i) {for (…

缓解程序员工作压力:保持高效创新的方法与经验分享

文章目录 每日一句正能量前言工作与休息的平衡心理健康与自我关怀社交与网络建设后记 每日一句正能量 不要抱怨你的伴侣丑&#xff0c;不要抱怨你没有一个好爸爸&#xff0c;不要抱怨你的工作差&#xff0c;不要抱怨没人赏识你。现实有太多的不如意&#xff0c;就算生活 给你的…

【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】

上篇文章:【ARM CoreLink 系列 4.1 – NI-700 interconnect hub 控制器详细介绍】 文章目录 ASNI 介绍AMNI 介绍HSNI 介绍HMNI 介绍AHB请求者接口AHB镜像完成者接口PMNI 介绍PCDC 介绍Routers 介绍SERDES 介绍PMU 介绍ASNI 介绍 CoreLink NI-700的ASNI(

汇川AM400PLC编码器转速测量功能块(M法测速)

M法测速的原理和相关代码,大家可以参考相关专栏文章,常用链接如下: 1、编码器M法测速仿真 编码器M法测速仿真(Simulink)_mt法测速 simulink-CSDN博客文章浏览阅读2k次。编码器M法和T法测速的详细讲解可以参看下面的文章链接,这里不再赘述,这里主要介绍Simulink里建模仿真…

python程序设计语言超详细知识总结

Python 首先 python 并不是简单&#xff0c;什么语言都有基础和高级之分&#xff0c;要想掌握一门语言&#xff0c;必须把高级部分掌握才行。 HelloWorld helloWorld.py print(hello, world)数据类型与变量 变量的数据类型数据类型描述变量的定义方式整数型 (int)整数&…

吴恩达2022机器学习专项课程(一)8.1 过拟合

目录 什么是过拟合&#xff1f;如何解决过拟合&#xff1f;什么是泛化&#xff1f;它跟过拟合有什么关系&#xff1f;过拟合案例线性回归线性回归的欠拟合线性回归较好的拟合线性回归的过拟合 逻辑回归逻辑回归的欠拟合逻辑回归的较好的拟合逻辑回归的过拟合 总结 什么是过拟合…

Prometheus+Grafana多方位监控

PrometheusGrafana多方位监控 契机 ⚙ 最近发现火山引擎有托管的Prometheus,可是当前是邀测阶段。并且发现火山云的ECS是自带开机自启的exporter的。刚好需要搭建一套服务器监控&#xff0c;所以研究了一套Prometheus监控&#xff0c;包含linux主机监控nginx监控es监控rabbitM…

数据库(MySQL)—— 数据类型

数据库&#xff08;MySQL&#xff09;—— 数据类型 MySQL中的数据类型数值类型字符串类型时间戳类型 一个实例 我们今天来看MySQL中的数据类型&#xff1a; MySQL中的数据类型 MySQL中的数据类型有很多&#xff0c;主要分为三类&#xff1a;数值类型、字符串类型、日期时间类…

Linux的学习之路:21、线程(1)

摘要&#xff1a; 本章说一下线程 目录 摘要&#xff1a; 一、回忆一下 二、如何理解线程 三、命令行看线程 四、利用函数进行使用 五、本章总结 1、线程的优点 2、线程的缺点 3、线程的异常 4、线程的用途 一、回忆一下 1、exe就是一个文件 2、我们的可执行程序…

监控摄像机如何选购?

在选购监控摄像机时&#xff0c;需了解其基本知识&#xff0c;如分辨率、帧率、存储方式等。根据需求选择合适的产品&#xff0c;关注夜视功能、品牌和售后服务。预算和性价比同样重要。这样才能选到实用又安全的监控摄像机&#xff0c;提高生活品质。摘要由作者通过智能技术生…

JavaScript(四)

一、JavaScript变量 在 JavaScript 中&#xff0c;你可以使用几种不同的方式来声明变量。以下是主要的几种方式&#xff1a; 使用 var 关键字&#xff1a; 在 ES5 (ECMAScript 5) 及之前的版本中&#xff0c;var 是最常用的声明变量的方式。但是&#xff0c;var 有一个问题&am…

Scott Brinker:16年后,当前的(而非未来的)Martech已经出现,但分布不均。

杜克大学、德勤和美国营销协会共同开展的名为「CMO调查」 的两年一度的项目&#xff0c;是营销行业内的一项重要研究项目&#xff0c;已经持续了十多年。该调查的组织工作做得非常好&#xff0c;每次发布我都迫不及待地想要阅读。 我特别兴奋地阅读了刚刚发布的2024年春季版&a…

Elasticsearch内存占用分析

目录 1. 堆内存 (Heap Memory) 2. 索引缓存 (Index Cache) 3. 段缓存 (Segment Cache) 4. 文件系统缓存 (File System Cache) 5. 分片和副本 (Shards and Replicas) 6. 分析器和令牌器 (Analyzers and Tokenizers) 7. 过度配置 (Over-Allocation) 8. 垃圾回收 (Garbage…

MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解

目录 前言语法示例代码运用 前言 mysql中内置函数date_add 和 date_sub能对指定的时间进行增加或减少一个指定的时间间隔&#xff0c;返回的是一个日期。 语法 添加时间间隔 DATE_ADD(date,INTERVAL expr type)SELECT DATE_add(NOW(),INTERVAL -7 DAY);//获取7天前的日期 S…

java基础郎波版chapter4习题

文章目录 1.试说明Java语言是如何支持多重继承的。2.类的构造方法和成员方法之间有什么区别?构造方法&#xff1a;成员方法&#xff1a; 3.编写程序片段,定义表示课程的类Course。4.编写程序创建习题3中的Course类的对象,设置并打印输出该对象的课程名、编号以及先修课号。5.J…

Python数组类+AI插件

目录 规划实现初始化插入删除查找 AI插件单测注释调优建议 小结 规划 先想清楚都写哪些&#xff0c;然后再动手操作 用Python写了一个简单数组类&#xff0c;首先思考下都写哪些功能&#xff1a; 插入删除查找用插件做单元测试和写注释 目的只是实现一个简单的数组类&#x…

ffplay支持mac/iOS硬解码实践

1. ffmpeg编译开启videotoolbox的支持。 ./configure --enable-videotoolbox --enable-hwaccels 2. stream_component_open方法中开启硬件解码器。 int FSPlay::stream_component_open(VideoState *is, int stream_index) {//...codec avcodec_find_decoder(avctx->code…

Python自学篇3-PyCharm开发工具下载、安装及应用

一、Python开发工具 自学篇1中讲到了安装Python之后出现的几个应用程序&#xff0c;其中IDLE、Python.exe都可以用来编写python程序&#xff0c;也可以进行调试&#xff1b;但是比较基础&#xff0c;比较原始&#xff0c;调试不方便&#xff0c;界面也不友好&#xff0c;需要更…

Unity List底层源码剖析

文章目录 前言一、List源码二、Add接口三、Remove接口四、Insert接口五、其他接口1、[]接口2、Clear接口3、Contains接口4、ToArray接口5、Find接口6、Enumerator接口7、Sort接口 六、线程安全总结 前言 没有扎实的基础&#xff0c;很多编写的程序会随着软件规模的扩大或扩展而…

(06)vite与ts的结合

文章目录 系列全集package.json在根目录创建 tsconfig.json 文件在根目录创建 vite.config.ts 文件index.html额外的类型声明 系列全集 &#xff08;01&#xff09;vite 从启动服务器开始 &#xff08;02&#xff09;vite环境变量配置 &#xff08;03&#xff09;vite 处理 c…