【实战总结】分库路由字段与业务字段绑定落库

2024-08-30 10:32

本文主要是介绍【实战总结】分库路由字段与业务字段绑定落库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

问题背景

常见的解决方案

方案1:Hbase+ES

方案2:MQ异步绑定


问题背景

我们一般分库分表的路由字段是用户的账户ID(userId),有些业务场景外部不以此做业务,而是以业务请求ID等进行业务交互

所以我们内部系统通过userId来串联业务关系,但是与外部交互要使用到bizId等这些代表业务唯一性的字段,这两个字段不同路由可能会打到不同的库是没办法做数据库事务处理的

出现这些场景时的一个需要解决的问题是,按照userId路由字段落库了,但是外部服务交互只有bizId没有userId,导致无法通过bizId反查userId路由到内部的业务数据。

 

常见的解决方案

方案1:Hbase+ES

查询数据中心的同步数据,只要字段做了ES索引配置,就是支持全量搜索的,这种方案最简单,但不是最优的,原因是数据中心数据都配置了TTL,有些不能支持永久查询,而且数据中心的查询性能不能满足生产级调用可能会产生性能瓶颈

方案2:MQ异步绑定

通过绑定分库分表路由字段与外部业务交互字段进行逻辑绑定,这样就可以在同外部业务交互时通过内部业务的分库分表的业务字段反查库表了

 

如图所示,

Step 1:业务请求发起时,按照路由字段(userId)落库,同时发出一条包含路由字段(userId)与业务字段(bizId)MQ消息,异步处理再按照业务字段(bizId)进行落库,一般这就是完整的处理流程了。

Step 2:99.9%的时间Step 1都是OK的,异常情况是MQ发不出去或者丢失或异常了,这时候可以增加Worker来扫描绑定状态进行补偿,异步落库的业务字段MQ是支持幂等重试的,是最终一致的

Step 3:由于上述绑定过程不是准实时的,99.9%的时间外部是感知不到是非同步业务的,外部调用失败可以重试处理

这篇关于【实战总结】分库路由字段与业务字段绑定落库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120569

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的