首页 > 其他分享 >读写分离的思想

读写分离的思想

时间:2023-05-06 15:22:41浏览次数:43  
标签:架构 思想 读写 分离 查询 这种 CQRS 数据 数据库

要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺。

CQRS(Command Query Responsibility Segration)架构,命令查询职责分享架构。
一个系统,从架构上把它拆分为两部分:命令处理(写请求)+查询处理(读请求)。

C端负责数据存储,Q端负责数据查询,Q端的数据通过C端产生的Event来同步。

在进行大量的读操作时,如果将读取与写入操作进行分离,将能够提高查询的可伸缩能力。

其实对于读取密集型应用环境来说,可以通过另一种途径实现可伸缩性,即主/从复制。数据的修改全部发生在主节点上,数据将同步到一个或多个进行读取的从节点上。

这种方式已经存在很久了,并且在许多数据库机制中都已经得到了完整的支持。也可将它定义为一种CQRS架构,因为它确实做到了读写分离。

另一种用于处理可伸缩性问题的解决方案,即数据分片、或数据库分区。这种方式将某张表中的数据切分到数据库的多个实例中,并通过某个字段在实例之间进行分布,例如客户的名称。这种方式的一大优点在于能够设置多个主节点,因此可以对命令与查询两方面同时进行扩展。而许多数据库技术本身就支持分区能力,只需一些非常简单的代码就可以实现。在使用多个主节点的情况下无法支持跨记录的事务,因此就像对解决方案领域所进行的分区一样,对业务领域也要进行某种程度的划分。

在某一种场景下是非常适合应用CQRS架构的,即具有高竞争性的业务领域。在这种领域中的负载非常大,而且具有高度的局域性。一旦出现并发异常就可能导致大多数事务操作开始失败、无法释放数据库连接、阻塞用户请求等一系列问题,产生巨大的系统瓶颈。这种测试用例在进行性能测试时经常会被忽略,一般在进行可伸缩性测试时,通常会针对多条记录创建大量的用户请求,而不是让所有的请求都集中于少数几条记录上。即使完美地实现了CQRS架构,这种瓶颈依然会出现在数据查询的场景,由于后台的进程不能快速地完成更新操作,导致查询模型总是无法及时获得最新的数据。

对于这种高竞争性的问题,解决方案是转为使用一种基于事件的模型,其数据模型是非阻塞式的、并且是只增的(append only),这就意味着该模型不会受到竞争性的影响。但这种方案可能会带来一个问题,因为它影响了某些业务规则。打个比方,某条业务规则规定只有在订单中的产品都有足够的库存时才允许接受订单。而这种方案则要求在业务处理上提供更高的灵活性,甚至可能会对需求产生变更。拿这个订单的例子来说,业务流程应当允许在不检查库存的情况下直接接受这个订单。而如果在处理订单时发现其中有某些产品库存不足,需要由业务人员决定如何处理这种情况。

标签:架构,思想,读写,分离,查询,这种,CQRS,数据,数据库
From: https://www.cnblogs.com/lucken2000/p/17377458.html

相关文章

  • 互斥锁 读写锁 条件变量 生产者消费者问题
    #互斥锁/*#include<pthread.h>intpthread_mutex_init(pthread_mutex_t*restrictmutex,constpthread_mutexattr_t*restrictattr);功能:初始化一个互斥变量mutex参数:mutex:需要初始化的互斥变量......
  • Sharding-JDBC:实现数据库的读写分离?
    简介轻量级Java框架,在Java的JDBC层提供额外服务,以jar包的形式提供服务(增强版数据库连接驱动)。适用于基于JDBC的ORM框架、支持第三方数据库连接池、支持实现了JDBC规范的数据库。 读写分离:基于已配置好主从复制的多个数据库。 使用步骤在springboot项目中使用。一、......
  • Python教程:pandas读写txt文件——DataFrame和Series
    大家用pandas一般都是读写csv文件或者tsv文件,读写txt文件时一般就withopen了,其实pandas数据类型操作起来更加方便,还是建议全用pandas这一套。读txt文件代码如下,主要是设置正则表达式的分隔符(sep参数),和列名取消(header参数),以及不需要列索引(index_col)。1df=pd.read_csv("workl......
  • 从源码深入理解读写锁(golang-RWMutex)
    环境:go1.19.8在读多写少的情况下,即使一段时间内没有写操作,大量并发的读访问也不得不在Mutex的保护下变成串行访问,这种情况下,使用Mutex,对性能影响比较大。所以就要区分读写操作。如果某个读操作的g持有了锁,其他读操作的g就不必等待了,可以并发的访问共享变量,这样就可以将串行的......
  • 告别繁冗,走向专业!前后端分离部署的主要内容介绍
    当前,前后端分离已经成为行业发展趋势。那么,什么是前后端分离?前后端分离部署的内容都有哪些?如果想告别繁冗,朝着更专业、更简洁的方向迈进,那么,做好前后端分离也是顺其自然的事。今天,我们就一起来探讨前后端分离部署的相关内容知识,希望能给屏幕前的你一些启发。1、什么是前后端分离?......
  • 【DRF】0. 前后端分离
    前后端不分离的工作流程:提出需求前端页面开发翻译成模板前后端对接集成遇到问题前端返工后端返工二次集成集成成功交付上线前后端分离提出需求约定接口规范数据格式前后端并行开发前后端对接前端调试效果集成成功交付上线定义规范后端自测前端mock数据......
  • java基于springboot+vue非前后端分离的网上商城购物系统、在线商城管理系统,附源码+数
    1、项目介绍java基于springboot+vue非前后端分离的网上商城购物系统、在线商城管理系统,实现管理员:首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理,用户;首页、个人中心、订单评价管理、我的收藏管理、订单管理,前台首页;首页、商品信息、......
  • Nginx动静分离平滑升级
    挂载系统光盘到本地安装依赖程序切换云计算光盘挂载云计算光盘安装nginx优化nginx命令检查配置文件创建网站根目录设置主页修改Nginx主配置文件启动nginx监听服务挂载系统光盘安装DNS服务更改DNS主配置文件检查DNS主配置文件是否错误修改区域配置文件检查配置文件是否错误启动DNS服......
  • java基于springboot+vue非前后端分离的影城管理系统、影院销售管理系统,附源码+文档+PP
    1、项目介绍本影城管理系统主要包括二大功能模块,即用户功能模块和管理员功能模块。(1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来管理后台系统。主要功能有:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订......
  • java基于springboot+vue前后端分离的超市进销存系统管理系统、超市管理系统,附源码+数
    1、项目介绍超市进销存系统,通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括:首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、商品信息管理、采购信息管理、入库信息管理、出库信息管理、销......