数据库优化: 分布式数据?性能和安全麻烦也来了

简介

要做出的另一个设计决策涉及决定节点在其群集中的交互方式。两个选项是同构和异构节点,都用于现代系统。

同构节点:集群中的每个节点都可以执行同一组任务(尽管可能不同的数据分区),很好地适合共享的无体系结构。

这使得预配和故障转移"更容易"。失败的任务将分配给可用节点。

异构节点:节点被分配了特定的任务,因此必须在节点之间进行通信执行给定的任务。

可以允许单个物理节点托管多个"虚拟"节点类型,用于专用任务。

可以独立地从一个节点扩展到另一个节点分布式系统必须跨多个资源(包括磁盘、节点、处理器)对数据库进行分区。

这个过程有时在NoSQL系统中称为分片。

2 MYSQL处理平衡

当 数据库管理系统 收到查询时,它首先分析查询计划需要访问的数据。

数据库管理系统 可能会发送对不同节点的查询计划,然后合并结果以生成单个答案。

分区方案的目标是最大化单节点事务或仅访问的事务一个分区中包含的数据。

这允许数据库管理系统不需要协调并发的行为在其他节点上运行的事务。

另一方面,分布式事务访问数据一次或更多分区。这需要昂贵、困难的协调,将在下一节中讨论。

对于逻辑分区节点,特定节点负责从共享访问特定元组磁盘。对于物理分区节点,每个无共享节点读取并更新其包含在其上拥有本地磁盘。

实现 对表进行分区的最简单方法是朴素的数据分区。

每个节点存储一个表,假设足够给定节点的存储空间。这是每个要实现的查询只是路由到特定分区。 这可能很糟糕,因为它不可扩展。如果一个分区的资源是经常查询,未使用所有可用节点。

更常用的是水平分区,它将表的元组拆分为不相交的子集。

选择在大小、负载或使用情况方面平均划分数据库的列,称为分区键。

数据库管理系统 可以通过哈希分区对数据库物理(不共享)或逻辑(共享磁盘)进行分区或范围分区。

分布式数据库本质上就是将数据存储到不同位置,数据分布的本质是,将原数据集划分为多个数据子集,以存储到不同的地方,在一定程度上体现了数据的可用性和可靠性。

分布式存储系统的三个要素:顾客、导购和货架。

其中,导购实现了分布式数据存储系统中数据索引的功能,包括存储数据时确定存储位置,以及获取数据时确定数据所在位置。那么,在分布式系统中,具体是如何实现数据索引或数据分布的呢

  • 数据分布方法,哈希,一致性哈希。

在实际情况下,仅考虑数据分片,其实是无法真正应用到生产环境的。

因为,故障导致数据丢失和不可用是很常见的情况。

因此,在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,而实现数据备份的关键技术就是"数据复制技术"。

数据复制技术实际就是指,如何让主备数据库保持数据一致的技术。

多数的分布式存储系统可以通过配置来选择不同的数据复制技术。 比如上面讲过的 MySQL 数据库集群,就支持全同步复制、异步复制和半同步复制三种模式,

3 Oracle 数据库处理平衡:

  • 最大保护模式

对于写请求,要求主数据库必须完成至少一个备数据库的数据同步才可成功返回给客户端,采用的是半同步复制技术中的第一种方式。

  • 最大性能模式

对于写请求,只要主数据库执行成功即可返回给客户端,采用的是异步复制技术。这种方式极大地提高了系统的可用性,但一致性难以保证。

  • 最大可用性模式

    介于最大保护模式和最大性能模式两者之间。

    这种模式是指,系统在通常情况下采用最大保护模式,但当主备之间出现网络故障时,切换为最大性能模式,等到网络恢复后,备数据库再进行数据同步。

    这种方式在系统的一致性和可用性之间做了一个权衡。

4 CAP理论:不可同时满足

分布式系统处理的关键对象是数据,而数据其实是与用户息息相关的。

CAP 理论指导分布式系统的设计,以保证系统的可用性、数据一致性等特征。

比如电商系统中,保证用户可查询商品数据、保证不同地区访问不同服务器查询的数据是一致的等。

何为 CAP?

如果你之前没有听说过 CAP 理论的话,看到这三个字母第一反应或许是"帽子"吧。

那么,在分布式领域中,CAP 这顶"帽子"到底是什么呢?先来看看这三个字母分别指的是什么吧。

结合电商的例子,一起理解 CAP 的含义。

假设某电商,在三个城市建立了仓库,同时建立了对应的服务器{A, B, C}用于存储商品信息。

比如,某电吹风在北京仓库有 20 个,在杭州仓库有 10 个,在上海仓库有 30 个。那么,CAP 这三个字母在这个例子中分别代表什么呢?

首先,来看一下 C。C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。

在电商系统中,A、B、C 中存储的该电吹风的数量应该是 20+10+30=60。 假设,现在有一个北京用户买走一个电吹风,服务器 A 会更新数据为 60-1=59,与此同时要求 B 和 C 也更新为 59,以保证在同一时刻,无论访问 A、B、C 中的哪个服务器,得到的数据均是 59。

然后,看一下 A。A 代表 Availability,可用性,是指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。

在电商系统中,用户在任一时刻向 A、B、C 中的任一服务器发出请求时,均可得到即时响应,比如查询商品信息等。

最后,看一下 P。P 代表 Partition Tolerance,分区容错性,是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。 网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络中,各个子网络内网络正常。

在电商系统中,假设 C 与 A 和 B 的网络都不通了,A 和 B 是相通的。 也就是说,形成了两个分区{A, B}和{C},在这种情况下,系统仍能响应用户请求。

小结

一致性、可用性和分区容错性,就是分布式系统的三个特征。那么 CAP 理论又是什么呢?

CAP理论就是,分布式系统中C,A,P三个特征无法同时满足,最多两个满足。

一致性,可用性,分区容错性,三个特征在分布式存储中一样有该属性。

相关推荐
ZC跨境爬虫几秒前
跟着 MDN 学CSS day_6:(伪类和伪元素详解)
前端·javascript·css·数据库·ui·html
fliter1 分钟前
在 Async Rust 中实现请求合并(Request Coalescing)
后端
王立志_LEO2 分钟前
Gunicorn 启动django服务
后端
fliter3 分钟前
一个让我调试一周的 Rust match 陷阱
后端
一只大袋鼠14 分钟前
SpringBoot 初学阶段知识点汇总(一)
spring boot·笔记·后端
洛水水16 分钟前
Redis对象类型与底层数据结构
数据结构·数据库·redis
Rust研习社16 分钟前
Rust 官方拟定 LLM 政策,防止 LLM 污染开源社区?
开发语言·后端·ai·rust·开源
倔强的石头_19 分钟前
深度解析:数据库内核如何通过逻辑推理与常值推导突破去重性能瓶颈
数据库
devilnumber20 分钟前
MySQL 部门表:树结构 (自关联) vs 非树结构 (扁平化 / 冗余字段)
数据库·mysql
烟雨江南78522 分钟前
从转写到智能体决策:基于“灵声智库”与本地大模型(LLM)的政务热线智能分析与 RAG 知识库融合架构
人工智能·科技·架构·语音识别·政务·ai质检