Apollo数据项太大怎么迁移

news/2024/10/12 8:14:53

前言

Apollo是携程开发的开源配置中心,支持分布式部署,是非常方便且受欢迎的。一般大多数使用都会作为应用服务的配置项,但也不排除🈶的公司存储一些业务数据,因为Apollo的设计导致数据库中Commit表,Release表变得非常大,注意这个大是指表中列非常大。在迁移时就较为困难

存储原理

聊聊Commit表
有了解他原理的朋友会知道Commit表是对项进行CUD操作时都会增加一条记录,每次都会增加一个ChangSets变化数据集,对于Properties的业务数据来讲,每次变更Apollo会认为你整个数据项都变化了,就会整体插入ChangeSets字段内

最头疼Release表
Apollo是以NameSpace为发布单元,这点不如Nacos了,所以每次发布都会增加Release的记录,以及ReleaseHistory和ReleaseMessage,Release的Configurations字段每次发布会包含整个Namespace的Properties,会转换为字典进行存储,这些Properties若是存放业务数据时可想而知Configurations字段会有多大。

迁移数据库

最难迁移的莫过于Commit与Release了,由于不合理的运用,字段数据量太大,严重影响查询性能,导致严重影响迁移效率,既然查询慢那我们是不是可以将每个namesce的最后一次的release进行迁移即可呢。

解决方案

当时我们在迁移时运维直接把全表进行迁移,发现每次都超时,再加上Apollo是我一手搭建的,对其原理还是较为熟悉的。
先看下图中实际生产中的数据

Commit表提交次数

image

Release表的发布次数

image

Oh, My God!!!,这么多次,再加上prop的value非常大,可层想有多少数据是大表,把历史记录进行迁移无非是浪费了时间以及磁盘的空间,这些数据完全不需要历史记录

对于Commit表只需要保留每个命名空间的最后一条快照即可,其他历史无需关心,
Release表同理。数据量最大的命名空间,提交次数也比较高,迁移时最麻烦的就是这个了。

下面附上迁移SQL
Commit表

SELECT*
FROM(SELECTid,ROW_NUMBER() OVER (PARTITION BY AppId,ClusterName,NamespaceNameORDER BYId DESC) AS row_numFROM`Commit`) AS t
WHERErow_num = 1
LIMIT100

自行调整 limit ,根据Id主键查询指定数据在使用DataX等工具进行迁移 ,相信非常快的就搞定了

后续优化表数据
对于外键AppId可以使用定时任务定时清理历史数据,控制表的大小

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

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

相关文章

[随笔] 快速幂,并查集,求最大公约数,二进制转十进制,十进制转二进制代码

1.快速幂 位运算1 long long ksm(int n,int x){2 int ans=1;3 while(x){4 if(x&1){5 ans*=n;6 }7 n*=n;8 x>>=1;9 } 10 return ans; 11 } 递归1 long long ksm(int n,int x){2 if(x==0) 3 …

需求改进与系统设计

需求改进&系统设计 一、需求&原型改进 1. 针对课堂讨论提出的问题以及建议对需求进行修改 问题一:原需求文档中将商家模块与管理员模块整合到一起,面向商家群体更像是个人小店; 解决:出于考虑团队成员的技术成本以及团队后续开发的时间成本,如若系统功能完成较为顺…

4.3万字详解PHP+RabbitMQ(AMQP协议、通讯架构、6大模式、交换机队列消息持久化、死信队列、延时队列、消息丢失、重复消费、消息应答、消息应答、发布确认、故障转移、不公平分发、优先级、等)

理论(后半部分有实操详解) 哲学思考易经思维:向各国人讲述一种动物叫乌龟,要学很久的各国语言,但是随手画一个乌龟,全世界的人都能看得懂。 道家思维:努力没有用(指劳神费心的机械性重复、肢体受累、刻意行为),要用心(深度思考、去感悟、透过现象看本质)才有用。 举…

【攻防靶场系列】WEB LLM 学习及实操(一)

什么是LLM❓大型语言模型 (LLM) 是一种 AI 算法,可以处理用户输入并通过预测单词序列来创建合理的响应。他们在巨大的半公开数据集上接受训练,使用机器学习来分析语言的组成部分如何组合在一起。如何检测LLM漏洞❓确定LLM(语言模型)的输入,包括直接输入(如提示)和间接…

在线AI智能客服源码|支持多国语言|人工客服坐席系统下载

此款客服系统可以对接ChatGPT,也可以对接国内大模型实现智能AI回复 访客界面是可以切换多国语言,实现多语言客服系统 客服后台功能完善,高性能大并发支持,并且占用资源很低,只要是服务器就能运行 即时通讯实时消息接受,可以随时获取到访客的咨询信息,不放过一个意向客户…

【安卓逆向】MotionNinja会员功能的解锁分析

这次的要分析的软件是😃无壳,mt管理一键去除签名就行🤩 先来看看这款应用这里有很多实用的功能但是要会员!!!😂 这里导入jadx分析一下,还是先搜索一下isvip这两个方法名根据我的经验,一眼是假的,点进去看看空方法,果然没什么用,这里还搜索了"会员”,“vip…