【性能设计篇】数据库拓展

前两篇文章介绍了分布式存储的机制,为保证数据的高性能以及可拓展,采用分片/分区机制。为保证数据的高可用性,采用复制/镜像机制存储数据。一份数据存储多份。而这两种方式在数据中,就是分片/分区机制。分库分表/读写分离。

读写分离 CQRS

读写分离是最简单数据库拓展的方式,主要应对的场景是读多写少,可以有效的把业务做相应的隔离。
在这里插入图片描述

读写分离的形势可能不同,一主多从(一主一从,一主两从/多从)以及可能数据备份的方式,主备等方式。图中就是一个写库,两个从库,写的时候都写主库,读的时候都写从库。
好处
1.实现起来比较容易,数据库的master-slave 配置和服务框架里的读写分离比较成熟,应用比较快
2.可以很好的把业务隔离开来,经历的公司都是所有数据表在同一个库中,当这个数据库出现问题 负载比较高时,可能会拖垮所有业务,所以需要进行数据的拆分。将一些大表,配置表进行隔离开来。
3.可以有效分担数据的读操作,大多数的业务都是读耗费性能。
坏处
1.写库存在单点故障,如果写库不可用,那么对于一些高可用的业务,比如订单 支付系统,影响比较大。
2.数据库主从同步存在一定的延时,不实时,需要强一致性的读写操作需要写到从库上。
以下是主从复制的流程图
在这里插入图片描述

读写分离的目的主要是提高数据库的读操作的能力
以上的方式是比较简陋的,

读写分离CQRS
CQRS(Command and Query Responsibility Segregation) 命令和查询职责分离
用户对于一个系统的动作一个是 增删改,另一个是查询,主要数据回显,或者数据分析。
命令 不会返回数据项,但是会影响数据结果,返回执行命令

  • 查询 不应影响数据,但是会返回数据
  • 指责明确,可以跟好的追逐系统中哪些行为或者操作修改了系统的状态变化。

分库分表 Sharding

在这里插入图片描述

影响数据库性能来说是两点,一个是对数据库的操作,另一个是数据库本身的容量
前者我们可以通过减少多表join,或者合理建立索引,如果大量查询可以用es查询,比如日志,如果要做数据报表要使用hoddop处理。
但是对于数据库本身的容量是有一定的限制,比如单表5KW的级别的时候,数据查询是非常慢的。本身服务可以进行拆分成分布式的,那么数据库页可以拆分成分布式的,具体形态就是分库分表。

说到分库分表,其实比较就离不开两个事情,一个是分库分表的策略,另一个是数据中间层。
分库分表的策略,一般老说会按照时间维度,每月 每天创建一张表,或则地理位置,或者用户%操作散列哈希。库的力度其实比较大,我们可以按照业务域进行划分,比如订单域,支付域,库存域等拆分,都需要结合具体的业务进行拆分。
数据库中间层,其实这个数据中看层的目的就是为了屏蔽底层的分库分表后,一个SQL是不需要关注分库分表后的操作的。具体功能就是需要解析SQL的能力,以及多表联查 事务操作上也是有一定的难度,XA的两阶段事务提交,这个东西复杂度比较高,一般都是基础架构组进行开发的。

设计重点

一般来说,如果只是数据库层面的分库分表,其实并没有做到彻底,要做的事情是服务和数据一起拆分,一个服务一个数据库,对外只提供接口层面的访问。先做服务化的拆分在进行分片操作,分片分为垂直分片和水平分片。
比如订单系统有专门的订单数据库,支付有专门的支付库,而不是一个数据库,所有的表都存储在一个数据库中,这样非常不利于管理,而且别的系统读取你系统的数据,出现问题,你可可能要背锅。服务和数据库要一起拆分
分库分表后,如何保证全局的唯一id,一般使用雪花算法。
比如在真实开发中,如果上下业务系统需要相关数据,最好是通过通信的API的方式将数据返回,而不应该直接读取数据库。比如订单直接读取支付数据库。另一个读写分离虽然可以提高读的性能,但是当出现大量数据更新导致主从延迟,就会出现从库获取不到最新的数据,影响上下游业务系统。所以平时在高峰期不要频繁更新大量数据,刷数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/31151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解深度学习——Transformer:解码器(Decoder)部分

分类目录:《深入理解深度学习》总目录 相关文章: 注意力机制(Attention Mechanism):基础知识 注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson核回归 注意力机制&…

一文了解RabbitMQ安装使用

什么是RabbitMQ? 官网:Messaging that just works — RabbitMQ RabbitMQ是一种开源的消息中间件软件,用于构建可扩展的分布式应用程序。它实现了高级消息队列协议(AMQP),这是一种网络协议,用于在应用程序之…

C++ 新的类型转换

文章目录 前言一、静态转换(static_cast)二、动态转换(dynamic_cast):三、常量转换(const_cast):四、重新解释转换(reinterpret_cast):总结 前言 …

【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认

💧 【 R a b b i t M Q 教程】第三章—— R a b b i t M Q − 发布确认 \color{#FF1493}{【RabbitMQ教程】第三章 —— RabbitMQ - 发布确认} 【RabbitMQ教程】第三章——RabbitMQ−发布确认💧 🌷 仰望天空,妳我亦是行人…

用Visual Studio 2022写出你第一个Windows程序(程序保证能正常运行)

我是荔园微风,作为一名在IT界整整25年的老兵,今天来看看如何用Visual C写出你第一个Windows程序。 与其看很多Windows的书,不如先自己动手写一个Windows程序。由于Windows程序的特有机制,不建议去写那种简单的HELLO WORLD&#x…

5G是如何提升通行能力的?5G毫米波到底有多快?

高速公路,可以通过多层交通、多条车道、车道方向、车辆容量、货物包装、驾驶司机等多个因素,提升通行能力。 我们把5G比作高速公路,那么,5G是如何提升自身通行能力的呢?5G毫米波,到底能有多快呢&#xff1f…

DELL的交换机PowerSwitch学习手册-ONIE篇

下面是最近学习DELL的网络交换机PowerSwitch的一些笔记,供朋友们参考。如果还有问题,可以add wechat at StorageExpert。 在具体学习产品之前,先来了解下DELL的ONIE,什么是ONIE?和如何使用ONIE? ONIE是 O…

【JavaEE】网络层和数据链路层重点协议:IP和以太网

目录 1、IP协议 1.1、IP协议报头 1.2、解决IPv4地址不够用的问题 2、IP地址管理 2.1、IP地址的组成 2.1.1、子网掩码 2.1.2、IP地址的分类 3、路由选择 4、数据链路层协议:以太网协议 1、IP协议 IP协议属于TCP/IP模型的网络层,在网络层协议存在…

【夜深人静写数据结构与算法 | 第八篇】哈希算法与哈希表

目录 前言: 哈希: 哈希表: 哈希表组成: 哈希表实例: 哈希函数: TIPS: 总结 前言: 如果此时我要你默写一个有一百位的数字,你要如何做才能保证不会漏写呢&#xf…

算法-双指针-秋招算法冲刺

秋招冲刺算法 双指针 数组划分,数组分块 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 快慢指针 基本思想:使用两个移动速度不同的指针在数组或链表等序列结构上移动。通常处理结构类型:环形链表或数组…

Cortext-M3系统:储存器系统(2)

1、存储系统功能概览 Cortext-M3储存器有如下特点: 存储器映射是预定义的,并且还规定好了哪个位置使用哪条总线。 存储器系统支持所谓的“位带”(bit-band)操作。通过它,实现了对单一比特的原子操作,位带操…

【数据库三】数据库的存储引擎

存储引擎 1.存储引擎1.1 概念介绍1.2 常用存储引擎 2.MyISAM2.1 特点介绍2.2 支持的存储格式2.3 适用的生产场景 3.InnoDB3.1 特点介绍3.2 适用生产场景分析4.企业选择存储引擎依据 5.MyISAM和InnoDB的区别命令操作 1.存储引擎 1.1 概念介绍 MySQL数据库中的组件,负…

腾讯云+PicGo+Typora图床,生成专属图片链接

腾讯云PicGoTypora搭建自己的图床 原创声明,转载请注明文章链接来源、作者信息 TyporaPicGogitHub搭建自己的图床,写作效率大大提升 索奇问答 问:图床是什么? 答:用户可以将图片上传到图床,然后将生成的…

基于U-Net网络实现图像分割

目录 1、作者介绍2、U-Net网络及数据集介绍2.1 U-Net网络2.2 数据集介绍2.2.1 VOC_2012数据集2.2.2 眼球毛细血管数据集2.2.3 医学图像数据集 3、U-Net实现图像分割3.1 U-Net实现图像分割实验(简易版本)3.1.1 环境配置3.1.2 数据集准备3.1.3 代码实现3.1…

(十)异步-使用异步(3)

一、GUI 程序中的异步操作 1、在 GUI 程序中使用异步操作 在 GUI程序中, 首先理解关于 UI 显示变化的概念。 消息: UI 上的行为,如点击按钮、展示标签、移动窗体等。消息队列: 把要触发的所有消息,都按照相关的顺序…

CSDN 周赛 59 期

CSDN 周赛 59 期 前言判断题单选题题目1题目2填空题编程题1、题目名称:坏掉的打字机2、题目名称:布尔零点计数小结前言 由于最近,csdn 每日一练新增了两个题目,按照惯例,那么新增的题目,会就近出现在最近的 CSDN 周赛中,嗯,经常参加周赛,并关注每日一练社区的小伙伴应…

IO流(C++)

IO流C C语言的输入与输出流是什么CIO流C标准IO流C文件IO流二进制读写文本读写 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据,并将值存放在变量中。printf():…

阿里云国际站代理商:如何优化阿里云服务器的性能和响应速度?有哪些调优策略和建议?

随着互联网的发展,阿里云服务器已经成为很多企业和个人的首选解决方案。然而,面对不断增长的需求和复杂的网络环境,如何优化阿里云服务器的性能和响应速度,提高用户体验,是很多用户关心的问题。本文将从以下几个方面&a…

MsSqlServer配置管理器TCP/IP属性

TCP/IP 属性(“IP 地址”选项卡) 使用 “TCP/IP 属性(‘IP 地址’选项卡)” 对话框,可以配置特定 IP 地址的 TCP/IP 协议选项。 只有选中 “IP All” ,才能一次配置所有地址的 “TCP 动态端口” 和 “TCP…

Debian openssh-server 的安装

在之前安装系统的时候有一个安装 SSH 服务的,结果没点上,导致系统完成后,ssh无法连接上啊,于是要安装sshd 服务。使用命令:apt-get install openssh-server 结果就出现问题了: 网上搜索说是要更新源&#x…