当前位置: 首页 > news >正文

为什么要读写分离?如何实现业务系统读写分离?

信息化水平提升,很多企业已经接受并高频使用多样的业务系统进行日常作业,而在不断的使用过程中,部分行业和业务,如:直播电商、基础制造、公关传媒等,由于自身特点的原因,常常积累了海量的数据。巨大的数据资产怎样进行开发、运维、管理,就成为了IT部门长久以来的“心病”。

遇到这些问题,IT部门这时可能选择重新审视应用程序(业务逻辑)的设计,然而只是“杯水车薪”。原因本质上是:

数据库的“写”(写10000条数据到oracle可能要3分钟)操作十分耗时。

而数据库的“读”(从oracle读10000条数据可能只要5秒钟),但大量多次的请求对数据库有着高并发的压力。

在互联网的系统应用是一个读多写少的应用,常常具有数据量大、并发量高、高可用要求高、一致性要求高的特点,比如电商系统中,商品浏览的次数是比下单要多的。

也就是说,如何不让数据库的读成为业务瓶颈,同时也保证写库的成功率才是提升响应能力与稳定性的关键。

一、什么是读写分离

读写分离是一种数据库架构策略,它将数据库的读操作(查询)和写操作(更新、插入、删除)分开处理。这种分离通常通过将读请求和写请求分别发送到不同的数据库服务器来实现。

二、读写分离的应用场景

1.高并发访问

当应用面临大量用户同时访问时,读写分离可以有效地分散请求,提高系统的整体性能。

2.数据分析和报告

对于需要进行大量数据读取的分析和报告生成任务,读写分离可以确保这些操作不会影响在线事务处理的性能。

3.数据仓库

在数据仓库场景中,数据的读取操作远多于写入操作,读写分离可以优化资源分配,提高效率。

4.在线事务处理(OLTP)与在线分析处理(OLAP)分离

在需要同时进行事务处理和复杂查询分析的系统中,读写分离可以分别优化这两种类型的操作。

三、实战案例——如何实现读写分离?

下面将通过介绍业务系统读写分离方案,说明其具体的方案和内涵,为业务数据量大的行业进行高效数据调用提供一些新思路。

(一)背景与挑战

某公司目前存在以下问题:

1.BI直连业务数据,加载更新速度慢

直连业务库取数,数据约20-30亿,一次更新时间耗费7-8小时,甚至直到第二天早上,数据仍然未更新完成。

2.关联分析直连多系统,报表性能压力大

BI直连多个业务系统进行关联分析,不仅影响分析性能,还对业务库造成很大的性能压力,导致前端报表加载慢,重新启动更新代价太大。

3.数据孤岛,打通成本高

关联分析所需的目标数据分散在多个业务系统,像订单系统、ERP等常用系统、橱柜部门自己收集的客户需求信息,这些多源异构数据,以代码或者人工导出,时间人力成本高,难以维护。

(二)解决方案

IT决定采用一套基于FineDataLink(FDL)建设的高效离线数仓方案。该方案主要包括以下内容:

读写分离:采用数仓完成读写分离,将BI看板所需的高纬度汇总数据前置处理在数仓中完成,避免直接连接业务库。

数据同步:使用FDL进行批处理和流处理,从业务库获取数据并将其同步到数仓中。具体分层方式为:ODS层(原始数据层)- DW层(数据仓库层,包括DWD层-数据明细层和DWM层-数据汇总层)- ADS层(应用数据服务层)。

1、ODS层:制造中心将多个业务系统(如订单、物流和财务系统)数据进行实时同步,同时将业务数据做维度退化和清洗。

2、DWD层:制造中心依据业务处理逻辑,对20-30张表做关联形成宽表。后从DWD层中取数据,对不同维度做轻度汇总,汇总后数据量从20-30亿行降到8-9亿行

3、DWM层:该层负责对数据进行更细致的汇总——橱柜部门匹配自定义的维度表,生成材料数量、面积等数据的BI看板。

4、ADS层:橱柜部门将制造中心的DWM层的板件信息,与客户定制化需求表进行匹配,汇总后数据量从8-9亿行降到约1亿行。

编辑

5、BI看板连接ADS层:最后,在BI里面根据不同的维度对轻度汇总表再做一层汇总,形成自助数据集

汇总后不同维度对应的数据集

数据降维:通过数仓的分层设计,对原始数据进行清洗、转换、整合和汇总等操作,将原始数据量从20-30亿行降至约1亿行,提高了数据分析的效率和准确性。

(三)实施效果

通过搭建基于FDL的离线数仓并实施读写分离方案后,该家居集团取得了以下显著效果:

1、BI可视化报表的使用更稳定由于数据量的大幅减少(从20-30亿行降至约1亿行)和数仓的高效处理,BI可视化报表的秒级呈现,使用更加稳定可靠。

2、数据的决策分析更有力经过数仓处理和降维的数据质量更高,为橱柜部门和研发部门的决策分析提供了更加准确和有力的支持。

3、关联分析需求快速满足:数仓的读写分离和前置处理满足了橱柜部门和研发部门对关联分析的快速需求,为定制化业务的发展插上了腾飞的翅膀。

FineDataLink是一款低代码/高时效的数据集成平台,它不仅提供了数据清理和数据分析的功能,还能够将清理后的数据快速应用到其他应用程序中。FineDataLink的功能非常强大,可以轻松地连接多种数据源,包括数据库、文件、云存储等,而且支持大数据量。此外,FineDataLink还支持高级数据处理功能,例如数据转换、数据过滤、数据重构、数据集合等。使用FineDataLink可以显著提高团队协作效率,减少数据连接和输出的繁琐步骤,使整个数据处理流程更加高效和便捷。

了解更多数据仓库与数据集成关干货内容请关注>>>FineDataLink官网

免费试用、获取更多信息,点击了解更多>>> 体验FDL功能
往期推荐:
[ETL实战」跨库取数需复杂编程怎么办?推荐这款低代码工具-CSDN博客
增量同步与全量同步:深入解析数据同步的两种策略-CSDN博客
数据同步常用方法和应用场景-CSDN博客

相关文章:

为什么要读写分离?如何实现业务系统读写分离?

信息化水平提升,很多企业已经接受并高频使用多样的业务系统进行日常作业,而在不断的使用过程中,部分行业和业务,如:直播电商、基础制造、公关传媒等,由于自身特点的原因,常常积累了海量的数据。…...

C#基础——类、构造函数和静态成员

类 类是一个数据类型的蓝图。构成类的方法和变量称为类的成员,对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。 class 类名 { (访问属性) 成员变量; (访问属性) 成员函数; } 访问属性:public(公有的&…...

hadoop学习(二)

一.MapReduce 1.1定义:是一个分布式运算程序的编程框架 1.2核心功能:将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 1.3优点 1)易于编程 它简单的实现一些接口&#…...

WXZ196微机消谐装置的运行方式了解一下

WXZ196微机消谐装置是一种用于抑制铁磁谐振的设备,可以在电力系统中快速消除各种频率的铁磁谐振,同时可以区分过电压、铁磁谐振以及单相接地,并给出相应的报警信号。该装置采用高速增强型单片机作为核心元件,对PT开口三角电压进行…...

单链表的建立

一.前言 单链表的建立一共有两种方法,一种是头插法,将元素插入在链表的头部,也叫前插法。另外一种则就是尾插法,将元素插入在链表尾部,也叫后插法。 二. 头插法 首先从一个空表开始,重复读入数据&#xff1…...

Shell脚本编程学习

IPv4和IPv6有什么区别? - 知乎 (zhihu.com) Shell 是一个命令解释权,它为用户提供了一个向 Linux 内核发送请求以便运行程序界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。 可以查看当前系统的进程 ps -ef...

从宏基因组量化细菌生长动态

Introduciton 了解细菌在各种环境中的生长动态对于人类健康和环境监测等广泛领域至关重要。传统研究细菌生长的方法往往依赖于培养技术,这不仅耗时,而且对易培养的物种有偏向。然而,随着宏基因组测序技术的兴起,我们现在可以直接…...

Linux---git工具

目录 初步了解 基本原理 基本用法 安装git 拉取远端仓库 提交三板斧 1、添加到缓存区 2、提交到本地仓库 3、提交到远端 其他指令补充 多人协作管理 windows用户提交文件 Linux用户提交文件 初步了解 在Linux中,git是一个指令,可以帮助我们做…...

【JavaScript】函数的动态传参

Javacript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言&…...

从0到1,AI我来了- (4)AI图片识别的理论知识-II

上篇文章,我们理解了我们程序的神经网络设计,这篇我们继续,把训练迭代过程分析一下,完成这两篇文章,下面问题,应该能回答了。 一张图片,如何被计算机读懂?pytorch 封装的网络&#…...

2024 Java 高分面试宝典 一站式搞定技术面

前言 每年9月和10月,被业界称为“金九银十”,这是人才市场一年中最活跃的时期。此时,企业为了来年的业务扩展,纷纷加大招聘力度,空缺岗位众多,招聘需求集中。同时,初秋的招聘活动也避开酷暑&am…...

MongoDB - 聚合操作符 $eq、$gte、$in、$sum、$avg

文章目录 1. $eq2. $gte3. $in4. $sum5. $avg 1. $eq $eq比较两个值并返回&#xff1a;true &#xff08;当值相等时&#xff09;|false&#xff08;当值不相等时&#xff09; { $eq: [ <expression1>, <expression2> ] }构造测试数据&#xff1a; db.inventory…...

C语言 | Leetcode C语言题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; // 判断是否为完全平方数 bool isPerfectSquare(int x) {int y sqrt(x);return y * y x; }// 判断是否能表示为 4^k*(8m7) bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7; }int numSquares(int n) {if (isPerfect…...

在appium中,如何通过匹配图片来进行断言?

在Appium中进行图片匹配断言&#xff0c;可以使用OpenCV来实现。以下是使用Appium和OpenCV进行图片匹配断言的示例代码。 首先&#xff0c;需要确保安装了必要的库&#xff1a; pip install opencv-python-headless pip install opencv-python pip install numpy然后&#xf…...

昇思25天学习打卡营第21天|CV-Shufflenet图像分类

打卡 目录 打卡 ShuffleNet 网络介绍 ShuffleNet 模型架构 Pointwise Group Convolution Channel Shuffle ShuffleNet模块 ShuffleNet 模块代码 构建ShuffleNet网络 模块代码 模型训练和评估 模型训练 模型评估 模型预测 ShuffleNet 网络介绍 ShuffleNetV1是旷视科…...

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具&#xff0c; 底层使用的是Google的Tesseract-OCR 引擎&#xff0c;支持识别图片中的文字&#xff0c;支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…...

SSRF (服务端请求伪造)

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…...

SQL中的LEFT JOIN、RIGHT JOIN和INNER JOIN

在SQL中&#xff0c;JOIN操作是连接两个或多个数据库表&#xff0c;并根据两个表之间的共同列&#xff08;通常是主键和外键&#xff09;返回数据的重要方法。其中&#xff0c;LEFT JOIN&#xff08;左连接&#xff09;、RIGHT JOIN&#xff08;右连接&#xff09;和INNER JOIN…...

[网鼎杯 2020 朱雀组]Nmap(详细解读版)

这道题考察nmap的一些用法,以及escapeshellarg和escapeshellcmd两个函数的绕过&#xff0c;可以看这里PHP escapeshellarg()escapeshellcmd() 之殇 (seebug.org) 两种解题方法&#xff1a; 第一种通过nmap的-iL参数读取扫描一个文件到指定文件中第二种是利用nmap的参数写入we…...

【React】详解“最新”和“最热”切换与排序

文章目录 一、基本概念和初始化二、切换与排序功能的实现1. 函数定义和参数2. 设置活动 Tab3. 定义新列表变量4. 根据排序类型处理列表4.1 按时间降序排序4.2 按点赞数降序排序 5. 更新评论列表 三、渲染导航 Tab 和评论列表1. map 方法2. key 属性3. className 动态赋值4. onC…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...