分布式系统架构设计之数据访问

简介: 版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/44216855

数据访问层是一个链式的处理过程,并且多数组件都是提供对外提供JDBC的实现,提供服务的方式有三:

1)  提供专有API,通用性差

2)  通用性强的方式,如JDBC

3)  基于ORM的方式,可以在ORM框架上再包一层,对外暴露的还是原有框架的接口。

在合并查询时,JDBC优势明显。


数据访问层设计的基本步骤:SQL解析,规则处理,SQL改写,数据源选择,SQL执行和结果集返回合并处理。

1)在进行SQL解析时,解析的缓存可以提升解析速度。一个重要的事情是根据执行的SQL得到被操作的表,根据参数及规则来确定目标数据源的连接数。

2)规则处理时,可以采用固定hash,根据某个字段取模,然后分散到不同的库和表中,通常将周期性数据放在一起;也可以采用一致性hash,把节点对应的hash值变为了一个范围,不再是离散的;还可以通过在一个物理节点上对应多个虚拟节点且虚拟节点均匀分布的方式来解决增加或减少节点时负载不均衡的问题。映射表是根据分库分表字段的值的查表法来确定数据源的方法,一般用于热点数据的特殊处理,或者对不完全符合规律的的规则进行补充。

3)SQL修改一般用于表名,索引,以及跨库计算。

4)规则处理是确定一组数据源,数据源选择是确定具体某个数据源。

5)SQL执行和结果处理部分需要注意异常的判断和处理。

 

从工程上看,可以把spring中的driverClassName,username和password抽取出来做成一个公共配置,但最好在配置管理中心中进行。GroupDataSource解决了具体访问数据库的选择问题,具体选择策略是groupDataSource完成的重点包括根据事务,读写等特性选择主备,不同库间的选择等。GroupDataSource意味着分组数量的绑定,虽然不能整体缩放,但可以进行组内缩放、主备切换等。数据源分组后,通过对数据源进行功能切分,可以构建原子数据源,原子数据源仅管理一个具体的数据库。

 

数据访问层的部署也可以分为jar包和Proxy两种方式,与服务框架类似,使用Proxy时,协议同样可以使用数据库协议和私有协议,最好直接使用数据库协议。

 

数据库读写分离最好基于数据库的日志来进行数据的复制。数据变更场景包括:复制数据库,索引构建,缓存失效等,一般引入数据抽取器把数据源变更的信息加入到数据分发平台,数据采用器把这些变更应用到相应的目标上,数据分发平台是由多个管道组成的。不同的数据变更来源需要不同的抽取器来进行解析和变更进入分发平台的工作。在进行数据迁移时,记录增量的日志,迁移后,再对增量的变化处理。

目录
相关文章
|
2月前
|
数据采集 缓存 前端开发
如何开发门店业绩上报管理系统中的商品数据板块?(附架构图+流程图+代码参考)
本文深入讲解门店业绩上报系统中商品数据板块的设计与实现,涵盖商品类别、信息、档案等内容,详细阐述技术架构、业务流程、数据库设计及开发技巧,并提供完整代码示例,助力企业构建稳定、可扩展的商品数据系统。
|
26天前
|
数据采集 机器学习/深度学习 搜索推荐
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
MIT与丰田研究院研究发现,扩散模型的“局部性”并非源于网络架构的精巧设计,而是自然图像统计规律的产物。通过线性模型仅学习像素相关性,即可复现U-Net般的局部敏感模式,揭示数据本身蕴含生成“魔法”。
97 3
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
|
14天前
|
存储 监控 算法
117_LLM训练的高效分布式策略:从数据并行到ZeRO优化
在2025年,大型语言模型(LLM)的规模已经达到了数千亿甚至数万亿参数,训练这样的庞然大物需要先进的分布式训练技术支持。本文将深入探讨LLM训练中的高效分布式策略,从基础的数据并行到最先进的ZeRO优化技术,为读者提供全面且实用的技术指南。
|
15天前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
139 1
|
1月前
|
JSON 供应链 监控
1688商品详情API技术深度解析:从接口架构到数据融合实战
1688商品详情API(item_get接口)可通过商品ID获取标题、价格、库存、SKU等核心数据,适用于价格监控、供应链管理等场景。支持JSON格式返回,需企业认证。Python示例展示如何调用接口获取商品信息。
|
1月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
2月前
|
数据采集 监控 数据可视化
数据量暴涨时,抓取架构该如何应对?——豆瓣电影案例调研
本案例讲述了在豆瓣电影数据采集过程中,面对数据量激增和限制机制带来的挑战,如何通过引入爬虫代理、分布式架构与异步IO等技术手段,实现采集系统的优化与扩展,最终支撑起百万级请求的稳定抓取。
数据量暴涨时,抓取架构该如何应对?——豆瓣电影案例调研
|
2月前
|
缓存 前端开发 BI
如何开发门店业绩上报管理系统中的门店数据板块?(附架构图+流程图+代码参考)
门店业绩上报管理是将门店营业、动销、人效等数据按标准化流程上报至企业中台或BI系统,用于考核、分析和决策。其核心在于构建“数据底座”,涵盖门店信息管理、数据采集、校验、汇总与对接。实现时需解决数据脏、上报慢、分析无据等问题。本文详解了实现路径,包括系统架构、数据模型、业务流程、开发要点、三大代码块(数据库、后端、前端)及FAQ,助你构建高效门店数据管理体系。
|
2月前
|
SQL 数据采集 数据处理
终于有人把数据架构讲清楚了!
本文深入浅出地解析了数据架构的核心逻辑,涵盖其定义、作用、设计方法及常见误区,助力读者构建贴合业务的数据架构。
|
2月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
219 2