为什么需要读写分离?

简介: 为什么需要读写分离?

平时在我们的项目中需要更新的请求总是很少的。大多时候我们都是查询的请求。这就会导致我们的系统瓶颈就是由于查询请求过多引起的。然而我们都知道更新数据的时候需要加入一个锁。这个锁就是排他锁。查询请求的时候也需要加一个锁,这个锁就是共享锁。这两个锁之间是存在竞争的。那么如何把这两个锁分开呢?这也就是为什么需要读写分离的原因了。读写分离的思想其实也体现了架构中的分而治之的思想。把一个复杂的问题分成若干个小问题,然后逐个击破。当我们使用了读写分离之后,读请求和写请求分别落到不同的地上。而且随着请求的增加,我们还可以追加slave的服务器。这样可以支撑更多的读请求,其实缓存和搜索服务也是一种读写分离的思想体现。

说完了读写分离的思想,我们再来说一说。分库分表的思想。首先说分表,分表其实就只有两种分法,一个是水平成分,一个是垂直拆分水平拆分的思想就是把常用的字段剥离出来,然后单独的加到一个表中。然后两个表做相关的关联操作,平时较多的查询就会查这个单独的表,然后一些不常用的字段。就会在原表中搜索。这样把常用的字段处理出来,可以提高查询速度。

然而,水平拆分是将数据按照字段进行哈希,或者按照时间进行分片儿的操作。把数据分散到不同的表中,然后保证每个表的数据不会太多。常用的算法就是根据ID取模者根据一个特定的参数取模。

水平拆分和垂直拆分也体现了架构中的分而治之的思想。

水平分表和垂直分表可以单独使用,也可以结合使用。选择哪种分表策略取决于具体的应用场景和需求。水平分表适用于数据量大、查询压力大的场景,可以实现数据的并行处理和横向扩展。垂直分表适用于字段之间关联性不强、数据更新频率不同的场景,可以提高查询效率和减少冗余数据。


相关文章
|
机器学习/深度学习 人工智能 NoSQL
数据库与人工智能的关系
随着AI技术的飞速发展,数据库与人工智能的联系日益紧密。数据成为AI的关键部分,预计到2023年全球数据量将达到33ZB。AI通过机器学习和神经网络等方式处理数据,优化企业运营,预测模式并创造机会。数据库利用AI进行复杂数据分析,如机器学习识别销售趋势,深度学习处理和分类客户数据。悦数图数据库作为高性能图数据库,为AI提供实时、准确的数据支持,尤其在金融风控、实时推荐和知识图谱等领域展现出强大效能,推动AI在各行业的应用和发展。
|
存储 负载均衡 关系型数据库
分布式架构|打造高效、稳定、灵活的现代IT基石
分布式架构|打造高效、稳定、灵活的现代IT基石
507 1
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
24366 64
图解一致性哈希算法,看这一篇就够了!
|
运维 监控 关系型数据库
【一文搞懂PGSQL】7. PostgreSQL + repmgr + witness 高可用架构
该文档介绍了如何构建基于PostgreSQL的高可用架构,利用repmgr进行集群管理和故障转移,并引入witness节点增强网络故障检测能力。repmgr是一款轻量级的开源工具,支持一键部署、自动故障转移及分布式节点管理。文档详细描述了环境搭建步骤,包括配置postgresql参数、安装与配置repmgr、注册集群节点以及配置witness节点等。此外,还提供了故障手动与自动切换的方法及常用命令,确保集群稳定运行。
|
开发者 Python
确保你的Python环境中已经安装了`python-docx`模块。如果还没有安装,可以通过pip来安装:
确保你的Python环境中已经安装了`python-docx`模块。如果还没有安装,可以通过pip来安装:
|
SQL 分布式计算 并行计算
PostgreSQL 并行计算解说 之1 - parallel seq scan
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan parallel index scan parallel index only scan
5158 0
|
安全 Cloud Native 数据安全/隐私保护
【阿里云云原生专栏】云原生安全挑战与对策:阿里云的安全防护实践
【5月更文挑战第22天】随着云原生技术推动企业数字化转型,安全挑战日益凸显:容器安全、微服务安全和数据安全成为关注点。阿里云通过容器安全沙箱、镜像安全扫描服务保障容器安全;使用API网关和RAM强化微服务安全;借助TDE和SSE保护数据安全。通过这些实践,用户可在享受云原生优势的同时确保业务安全。
854 0
|
NoSQL Java 关系型数据库
使用Kafka实现Java异步更新通知解决Redis与MySQL数据不一致
使用Kafka实现Java异步更新通知解决Redis与MySQL数据不一致
210 0
|
JavaScript
Vega-Embed 在 Vue Typescript 项目中引入报错
Vega-Embed 在 Vue Typescript 项目中引入报错
149 0
|
运维 监控 前端开发
记一次线上 bug 的排查分析过程及总结
记一次线上 bug 的排查分析过程及总结
记一次线上 bug 的排查分析过程及总结