数维原动:如何应对亿级规模的数据分析挑战|OceanBase案例

news2025/2/27 17:12:07

本文作者:贾万利,北京数维原动教育科技

业务背景

作为国内专注于高端教育评估的机构,北京数维原动教育科技有限公司,其核心业务聚焦于中小学学校的诊断、评估与提升工作。自2009年起,公司便踏上了自主研发之路。经过十余载的不懈努力,已成功构建了一套针对基础教育阶段的全面学校诊断体系,涵盖了从理论探索到实践应用,再到模型构建、流程优化以及结果反馈的完整闭环。同时,依托互联网技术,公司自主研发了独特的诊断工具、数据分析平台及报告生成系统,旨在为学校提供更为全面、个性化的支持。迄今为止,公司已为国内众多知名中小学提供了专业、精细化的学校诊断评估与管理咨询服务,在学校教学改进、学生个性发展以及学校部门工作优化等方面发挥了显著作用,并赢得了项目合作学校的高度认可与赞誉。

业务痛点

近两年,随着业务的发展,原有的底层数据库管理系统压力越来越大。最初在线业务平台和后台分析平台我们均使用的MySQL数据库,云端在线业务还好,但是后台分析平台和报告报表系统随着数据量越来越大性能下降严重,增加表分区之后相对好一些,但是系统扩展性及单机性能瓶颈和安全性始终让人担心,可能无法应付接下来快速发展的业务。所以开启了探索MySQL的替代方案。由于拥有大量的人工制作的报表,所以必须完美兼容MySQL语法,否则成百上千的报表重新制作将会是一场“灾难”。

调研和选型

选型之路,很长也很难。

尝试中间件

MyCat是一个支持多种类型数据库的分片中间件,它支持多种类型数据库的分片,易扩展。但MyCat也存在一些缺点:

  • 在整个系统中,MyCat会成为一个单点,所有的SQL都会通过MyCat来路由,在数据库比较多的情况下,MyCat本身的CPU性能压力就会随之增大。
  • 不够通用,数据库连接的处理复杂,对业务不够透明,处理复杂分库分表中间件MyCat模式通过中间代理层(MyCat)来统一管理所有的数据源,后端数据库集群对前端应用程序透明。

所以综合考虑后放弃了MyCat。

ShardingSphere 是一个开源的分布式数据库中间件,优点明显:

  • 强大的分片和路由功能:支持多种分片算法和路由策略,能够灵活地将数据分布到多个数据库节点上。
  • 丰富的数据库支持:支持多种类型的数据库,包括 MySQL、Oracle、SQL Server 等。
  • 高可用性和可扩展性:支持主从复制和数据备份,提供了高可用性和数据可靠性。同时,它可以轻松地进行水平扩展,以适应不断增长的数据量和并发请求。
  • 灵活的配置和管理:提供了丰富的配置选项和管理工具,可以方便地进行分片、路由、数据迁移等操作。

在没有尝试OceanBase之前我们决定准备使用ShardingSphere。但最终选择OceanBase数据库是由于其原生分布式架构,无需中间件。

尝试Greenplum

Greenplum我们之前有一些业务在使用,还是很稳定的,但是它的语法是基于PostgreSQL 的,和MySQL的语法差异很大,我们需要的是可以兼容MySQL的,所以放弃了Greenplum。

尝试Doris

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。看到官网介绍后,我们进行了测试,性能很能打,强悍,亿级的数据也可以秒回,可以满足我们即席查询的需求,其架构也简单,我们当时测试的1.x版本,发现还是有一些聚类分析以及其他不常用的MySQL函数不能兼容,BI系统一执行常规报表没问题,但是总有一些报表报异常信。如果我们是新项目或者报表重新制作也许会选择Doris。

尝试SequoiaDB

巨杉数据库,常用于金融领域,高性能与无限水平弹性扩展能力很好,官网也称完全兼容传统关系型数据,通过测试也还是不能完美兼容MySQL所以放弃。

尝试OceanBase

一次偶然的机会,看到OceanBase 4.1.0发布了,高度兼容 Oracle 和 MySQL,能够随着业务发展快速的扩容缩容。主要有以下优点。

高兼容,高度兼容 Oracle 和 MySQL,覆盖绝大多数常见功能,支持过程语言、触发器等高级特性,提供自动迁移工具,支持迁移评估和反向同步以保障数据迁移安全,可支撑金融、政府、运营商等关键行业核心场景替代。

水平扩展,实现透明水平扩展,支持业务快速的扩容缩容,同时通过准内存处理架构实现高性能。支持集群节点超过数千个,单集群最大数据量超过 3PB,最大单表行数达万亿级。

低成本,基于 LSM-Tree 的高压缩引擎,存储成本降低 70% - 90%;原生支持多租户架构,同集群可为多个独立业务提供服务,租户间数据隔离,降低部署和运维成本。

实时 HTAP,基于“同一份数据,同一个引擎”,同时支持在线实时交易及实时分析两种场景,“一份数据”的多个副本可以存储成多种形态,用于不同工作负载,从根本上保持数据一致性。

初步阅读文档后,感觉高可用没有问题,但是对于MySQL的兼容性还是没有太大信心。毕竟前面尝试很多方案都已折戟沉沙。

1703487982

功能和兼容性测试

我们计划先部署 OceanBase 演示环境,看看效果。基于官网文档,简单几行命令很顺利的在本地虚拟机中安装好了测试环境,而且对机器配置要求也不高

项目描述
系统CentOS Linux 7.6 版本
CPU4 核。
内存8 GB
磁盘类型使用 SSD 存储。
磁盘存储空间100GB。
文件系统XFS
all-in-one 安装包all-in-one 安装包需选择 V4.1.0 及以上版本。

导入数据后,基于我们当时的报告系统,跑了一套报告,想不到在没有做任何修改的情况下完美生成了我们的报告文件,这说明我们使用的BI系统和其中几千个报表是可以完美兼容OceanBase的,很兴奋,因为在尝试很多方案后,终于找到一款应该可行的方案,能够兼容我们各种各样的复杂的统计语句。

于是,我们很快申请了较高配置的虚拟机,开始正式进行功能性和兼容性测试

1703487992

当我们将MySQL中的数据全部迁移到OceanBase中,发现节省了很多的磁盘空间,MySQL中401.5G到OceanBase中也就44.7G,后来阅读官方文档才知道OceanBase 数据库的存储引擎是基于 LSM-Tree 架构,具有高压缩率,同时将数据分为静态基线数据(放在 SSTable 中)和动态增量数据(放在 MemTable 中)两部分保证性能。

1703488000

在安装OceanBase,以及创建资源池,租户,数据库,用户等等对象时,操作简单,文档清晰,所以上手很容易,也很顺利。

随后,我们开始大量的测试,其中也遇到了一些问题,如部分SQL语句的性能问题,通过和社区人员以及钉钉群中的技术老师沟通都能很快得到解决,后来升级到4.2.1,稳定性也更好一些。

数据迁移

通过navicat、kettle、datax等工具可以实现快速迁移,性能,kettle测试1.2亿数据导入,8分钟完成,也可以使用mydumper和myloader。

迁移注意事项:

  • 关闭自增主键属性,否则高并发导入时严重影响性能
  • 索引和外键先关闭,导入数据后再建立
  • 注意将字符集utf8替换为 utf8mb4
  • 大表数据导入超时问题
    • 连接超时修改参数
show variables like '%ob_query_timeout%'; 修改为3600 000 000微秒
    • 写入超时修改参数
show variables like '%net_write_timeout%';  修改为600秒

总结

现在,我们分析平台的业务已经正式切到OceanBase上,经过一段时间的使用还是比较满意的,首先解决了MySQL中几亿数据的大表和多个表join关联分析卡死问题,其次对于单点故障的担忧也随之解决,对于数据库系统的安全性,高可用和扩展性有了保障,后期随着我们业务的快速发展,仅需要动态扩容就可以,对于我们数据库的运维人员压力骤减,最后也希望OceanBase发展越来越好!

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

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

相关文章

Visual Studio VS 插件之 ReSharper

集成在VS2022上的ReSharper暂无找到汉化方式,如果有大神可以汉化,请指导下。 首先ReSharper 是IDE 下的插件 主要是基于C# 语句优化的这么一个插件。 使用ReSharper可以使开发效率大大提高,但是也是比较吃电脑的配置。所以说如果配置低的小…

移动开发(一):使用.NET MAUI开发第一个安卓APP

目录 一、.NET MAUI官方介绍 二、开发工具安装 三、创建项目 四、Windows Machine模式运行 五、安卓虚拟机方式运行 六、总结 对于工作多年的C#程序员来说,近来想尝试开发一款安卓APP,考虑了很久最终选择使用.NET MAUI这个微软官方的框架来尝试体验开发安卓APP,毕竟是…

C/C++开发---全篇

1、统筹 学习目标: C/C、python精通。 就业匹配方向:专精一个领域,延长职业生涯。 (1)适配行业; (2)量化; (3)安全; (4&…

嵌入式系统可靠性设计案例分析

目录 案例 【题目】 【问题 1】(共 9 分) 【问题 2】(共 8 分) 【问题 3】(共 8 分) 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关知识 案例 阅读以下关于嵌入式系统可靠性设计方面的描述,回答问题 1 至问题 3。 【题目】 某宇航公司长期从事宇航装…

H7-TOOL混合脱机烧录以及1拖4不同的通道烧录不同的程序操作说明(2024-08-07)

【应用场景】 原本TOOL的1拖4是用于同时烧录相同程序给目标板,但有时候一个板子上有多个不同的MCU, 客户希望仅通过一个TOOL就可以完成对板子上多个MCU的烧录,也就是1拖4不同的通道烧录不同的程序,此贴为此制作。 【实验目标】…

Android+Jacoco+code-diff全量、增量覆盖率生成实战

背景 主要是记录下Android项目使用jacoco生成代码覆盖率的实战流程,目前已完成全量覆盖方案,仅使用jacoco就能实现; 由于我们的Android端是使用Java和kotlin语言,目前增量的方案code-diff仅针对Java代码,卡在kotlin文件的分析&am…

java 面试 PDF 资料整理

“尊贵的求知者,作者特此献上精心编纂的Java面试宝典PDF,这份资料凝聚了无数面试精华与实战经验,是通往Java技术殿堂的钥匙。若您渴望在Java编程的求职之路上稳健前行,只需轻轻一点,完成这象征支持与认可的一键三联&am…

Dubbo源码深度解析(五)

上一篇博客主要讲服务提供方服务的发布,以及Netty是如何启动的,客户端发过来的请求,会经过哪些处理器,以及补充之前没讲完的SPI机制等等。这篇博客将会接着继续讲,在看这篇博客之前,请先看上一篇博客&#…

VTK—vtkStructuredGrid提取维度面数据

1.在VTK自带的vtkStructuredGrid数据文件combq.bin和combxyz.bin 2.文件读取代码如下: //读取数据文件Create(vtkMultiBlockPLOT3DReader, reader);reader->SetXYZFileName("G:/Temp/vtkTest/combxyz.bin");reader->SetQFileName("G:/Temp/v…

Vitis AI 基本认知(训练过程)

目录 1. 目的 2. TensorBoard 2.1 In TensorFlow 2.2.1 安装 TensorBoard 2.2.2 导入必要的库 2.2.3 初始化 2.2.4 记录数据 2.2.5 启动 TensorBoard 2.2.6 刷新间隔 2.2 In PyTorch 3. 训练周期 Epoch 3.1 Epoch 3.2 Batch 3.3 Iteration 4. 总结 1. 目的 介绍…

传奇游戏发布渠道

传奇游戏发布渠道 回答:游戏发布平台|手机游戏发布平台 传奇游戏发布渠道作为游戏开发商直接控制的信息传播途径,其安全性自然有着较高的保障。首先,渠道通常会采用先进的加密技术和安全协议来保护数据传输过程中的安全,防止信息…

Centos 7 升级GCC时遇到 mirrorlist.centos.org; Unknown error“

问题描述 在执行如下操作的时候, yum install devtoolset-9-gcc devtoolset-9-gcc-c devtoolset-9-binutils 出现: 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error" 网上搜索了一下,原因是 mir…

redis集合若干记录

无序集合 redis通常使用字典结构保存集合数据,字典健存储集合元素,字典值为空。如果一个集合全为整数,使用字典就有点浪费了,redis使用intset保存。 插入元素到intset中 获取插入元素编码,如果插入元素编码级别高于int…

Chapter 36 PySpark数据计算

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、map算子二、flatMap算子三、reduceByKey算子四、filter算子五、distinct算子六、sortBy算子七、综合案例 前言 在大数据处理的时代,Apache Spark以其高…

猫头虎 分享:Python库 Pygame 的简介、安装、用法详解入门教程

猫头虎 分享:Python库 Pygame 的简介、安装、用法详解入门教程 😺 摘要:今天,猫头虎将带大家深入了解Python中常用的Pygame库。Pygame是开发2D游戏和多媒体应用的首选工具之一。在本文中,我们将从安装Pygame、了解Pyg…

深入学习零拷贝

在学习中遇到了一个问题就是什么是零拷贝,因此学习之后以此来记录一下。 零拷贝、直接I/O、异步I/O等,优化的目的就是为了提高系统的吞吐量,减少访问磁盘次数。访问磁盘的速度会比读写内存会慢十倍以上。因此就需要提高它的读写速度。 什么…

uniapp自定义请求头信息header

添加请求头:uniapp自定义请求头信息header 代码

Java性能优化之并发编程:深入解析与实战技巧

在Java应用程序的性能优化中,并发编程是一个关键领域。通过合理使用并发编程技术,可以充分利用多核CPU的计算能力,提高程序的执行效率。本文将深入探讨Java并发编程的优化策略,并提供一些实用的代码示例和实战技巧。 1. 线程与同…

Linux Day1 系统编程和文件操作

系统编程内容 文件I/O (输入/输出): 1)使用标准库函数如fopen, fclose, fread, fwrite, fgetc, fputc, fgets, fprintf, fscanf等进行文件操作。 2)使用open, close, read, write等系统调用来实现底层文件操作。 进程管理: 1)使用fork, e…

力扣 3152. 特殊数字Ⅱ

题目描述 queries二维数组是nums数组待判断的索引区间(左闭右闭)。需要判断每个索引区间中的nums相邻元素奇偶性是否不同,如果都不同则该索引区间的搜索结果为True,否则为False。 暴力推演:也是我最开始的思路 遍历q…