当前位置: 首页 > 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…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...