比如 a 服务需要从 b 服务获取几十万的数据处理后生成自己的业务数据,如果 b 服务直接从数据库中一次性查出来返回,对内存的压力就很大。
现在的方案是使用分页,每次最多 1 万条记录,获取一批处理一批,把整个业务处理的时间拉长了。
想知道还有没有更好的办法
举报· 263 次点击
登录 注册 站外分享
16 条回复  
ZGame 初学 2024-10-17 08:28:05
1.内存压力大?一个作业才几十万数据。。  如果怕影响 a 库业务性能,直接给 a 库做一个从库,从从库里拉数据。
2.走 cdc 那种从日志里读取,这种时效性会好点。我是感觉没必要
csys 初学 2024-10-17 08:29:35
1.
b 服务把数据保存成文件
a 服务下载文件后进行处理

2. kafka/cdc
securityCoding 初学 2024-10-17 08:29:41
单独落离线表,明令禁止直接从线上业务表捞数据
ymz 小成 2024-10-17 08:36:53
kafka
m2276699 小成 2024-10-17 08:46:01
数据源之间冗余
xiaohupro 小成 2024-10-17 08:46:27
时间线拉长应该是由于同步导致的吧,查一万处理一万。可以把查处来的数据立马丢给 Kafka 或者 Rabbit MQ 这类消息队列,A 服务监听队列,只要有数据就一直处理,这样应该会分批同步处理快一些。
sagaxu 初学 2024-10-17 08:47:12
这是两个步骤

1. b 服务从 db 获取几十万条数据
2. a 服务从 b 服务获取完整数据

第二个步骤在分页之后,从 1 次 rpc 变成几十次,内网 rpc 的开销是毫秒级的,几十次 rpc 增加几十毫秒,不会显著拉长处理时间。

那问题就出在第一步,db 端分页之后,几十次小量查询,开销远大于单次全量。这种情况就不建议分页,而是分批,b 服务一次查询分批读取,写入文件或者消息队列等暂存设施,返回给 a 的是数据的指向,a 自己再分批读取
ymmud 初学 2024-10-17 08:58:30
才几十万条,服务之间类似于流式处理直接拉过去就行了
SmartTom 小成 2024-10-17 09:02:18
a 服务直接做多数据源直连 b 服务数据库/doge
12下一页
返回顶部