架构设计(八):数据库的水平扩展和垂直扩展

架构设计,数据库,水平,扩展,垂直 · 浏览次数 : 351

小编点评

## 数据库水平扩展和垂直扩展 **垂直扩展** * 通过增加现有机器的硬件配置来扩展数据库的存储和处理能力。 * 可以通过增加CPU、内存等硬件配置来提高数据库的性能。 * 但垂直扩展也有一些严重的缺点,例如硬件的限制会导致单点故障的风险更大,并且配置一个强大的服务器非常昂贵。 **水平扩展** * 通过添加更多数据库服务器来扩展数据库的存储和处理能力。 * 可以通过增加服务器的数量来提高数据库的性能。 * 由于水平扩展不需要更改现有服务器的硬件配置,因此更经济有效。 **数据库扩展方法的选择** * 用户数量巨大时,垂直扩展的性能会下降。 * 对于数据量巨大,且对性能需求有严格要求的情况,则选择水平扩展更为合适。 **示例** * 垂直扩展:将多个数据库服务器连接到一个集群中,并配置相同的模式。 * 水平扩展:将多个数据库服务器连接到一个集群中,并配置不同的模式。 **数据库扩展的优点和缺点** **优点** * 性能提升 * 可扩展性提升 **缺点** * 硬件限制 * 单点故障风险提升 **总结** 数据库扩展是降低数据库服务器负载的方法,可以通过增加服务器数量或硬件配置来实现。选择方法取决于数据库的规模、性能需求和预算等因素。

正文

架构设计(八):数据库的水平扩展和垂直扩展

作者:Grey

原文地址:

博客园:架构设计(八):数据库的水平扩展和垂直扩展

CSDN:架构设计(八):数据库的水平扩展和垂直扩展

数据库的扩展有两种方法:垂直扩展和水平扩展。

垂直扩展是通过提高现有机器的硬件配置(CPU、硬盘、内存等)来进行扩展。比如,如果使用的是亚马逊的 RDS ,可以得到一个超大内存的数据库服务器,所以在一台数据库服务器,就可以实现存储和处理大量的数据。但是垂直扩展也有一些严重的缺点。

  • 虽然可以在数据库服务器上增加更多的 CPU、内存等,但是有硬件的限制,如果用户数量巨大,一台服务器是不够的。

  • 单点故障的风险更大。

  • 垂直扩展的总体成本很高。如果要配置一个强大的服务器,费用是很高的。

垂直扩展的示例图如下

img

横向扩展,就是将大型数据库分离成更小、更容易管理的部分,横向扩展也被称为分片,是增加更多服务器来承载更高的访问需求,每个分片共享相同的模式,尽管每个分片上的实际数据对分片来说是独一无二的。

横向扩展的示例图如下

img

以用户ID的例子来说,用户数据是根据用户ID分配到数据库服务器的。任何时候你访问数据,都会使用一个哈希函数来寻找相应的分片,比如,可以使用取模方式来定位具体的服务器分片,利用用户ID % 4 以后的结果定位到具体的服务器。如果结果等于0,分片区0就被用来存储和获取该用户ID数据。如果结果等于1,则使用分片1。这个逻辑也适用于其他分片。

img

实施分片策略时要考虑的最重要因素是分片键的选择。分片键(称为分区键)由一列或多列组成,决定数据的分配方式。上例中,用户ID就是分片键。分片键允许你通过将数据库查询路由到正确的数据库来有效地检索和修改数据。在选择分片密钥时,最重要的标准之一是选择一个能够均匀分布数据的密钥。分片是扩展数据库的技术,但它同时也不是完美的,它为系统引入了复杂性。分片会遇到如下几个问题

问题1,重分数据

  1. 由于数据的快速增长,单个分片不能再容纳更多的数据时,就需要重分数据。

  2. 由于数据分布不均,某些分片可能比其他分片更快地经历分片耗尽。当分片耗尽发生时,需要更新分片功能并移动数据。可以利用一致性哈希来解决这个问题

问题2:热点密钥问题

即对一个特定分片的过度访问可能会导致服务器过载。为了解决这个问题,我们可能需要为每个热点密钥分配一个分片。每个分片甚至可能需要进一步划分。

问题3:分片的连接问题

一旦一个数据库在多个服务器上被分片,就很难在数据库分片间进行连接操作。一个常见的解决方法是对数据库进行去规范化,这样就可以在一个表中进行查询,将数据库分片,以支持快速增长的数据流量。同时,也可以把系统中的非关系型的功能被转移 NoSQL 数据存储,以减少数据库的负载。

参考资料

System Design Interview

与架构设计(八):数据库的水平扩展和垂直扩展相似的内容:

架构设计(八):数据库的水平扩展和垂直扩展

架构设计(八):数据库的水平扩展和垂直扩展 作者:Grey 原文地址: 博客园:架构设计(八):数据库的水平扩展和垂直扩展 CSDN:架构设计(八):数据库的水平扩展和垂直扩展 数据库的扩展有两种方法:垂直扩展和水平扩展。 垂直扩展是通过提高现有机器的硬件配置(CPU、硬盘、内存等)来进行扩展。比如

架构设计(二):数据库复制

架构设计(二):数据库复制 作者:Grey 原文地址: 博客园:架构设计(二):数据库复制 CSDN:架构设计(二):数据库复制 在架构设计(一):从单服务器模式到负载均衡设计中提到了数据库类型的选择, 针对大数据量,高可用的场景,数据库复制是一种比较好的方式,其中多个数据库实例之间可以是主/从关系

向量数据库技术全景

本文深入探讨了向量数据库的基础概念、架构设计及实现技术,详细介绍了HNSW、FAISS和Milvus等关键算法和工具,旨在为高效管理和检索高维向量数据提供全面的技术指南。 关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机

稳,从数据库连接池 testOnBorrow 看架构设计

本文从 Commons DBCP testOnBorrow 的作用机制着手,管中窥豹,从一点去分析数据库连接池获取的过程以及架构分层设计。以下内容会按照每层的作用,贯穿分析整个调用流程。

架构设计(五):有状态服务和无状态服务

架构设计(五):有状态服务和无状态服务 作者:Grey 原文地址: 博客园:架构设计(五):有状态服务和无状态服务 CSDN:架构设计(五):有状态服务和无状态服务 无状态的服务 在横向扩展服务的过程中,将状态(例如用户会话数据)从服务中移出并将会话数据存储在持久性存储介质中,如关系型数据库或 No

架构设计(三):引入缓存

架构设计(三):引入缓存 作者:Grey 原文地址: 博客园:架构设计(三):引入缓存 CSDN:架构设计(三):引入缓存 缓存是一个临时存储区域,如果请求的数据获取代价比较高或者数据的访问频率比较高,则会把响应结果存储在内存中,以便更快速地提供后续请求。 每次加载一个新的网页,都要执行一次或多次数

深入了解Elasticsearch搜索引擎篇:倒排索引、架构设计与优化策略

首先,我们介绍了Elasticsearch(ES)的倒排索引,这是一种用于快速检索的数据结构。其次,我们了解了ES集群的架构,包括主节点、数据节点和协调节点的功能和作用。然后,我们探讨了中文分词器的选择,其中包括IK、HanLP和Jieba等常用的分词工具。接着,我们解释了写入数据和查询数据的工作原理,包括请求的分配和预处理,数据的存储和查询结果的处理过程。最后,我们讨论了ES部署的优化方法,包括调整JVM内存、分片布局和数量、节点身份设计以及配置Ingest节点等方面的策略。

[转帖]【Windows 10】Prometheus监控平台安装以及配置windows Exporter探针

Prometheus 简介 Prometheus是一个开放性的监控解决方案,用户可以非常方便的安装和使用Prometheus并且能够非常方便的对其进行扩展。 在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数

架构设计(六):引入消息队列

架构设计(六):引入消息队列 作者:Grey 原文地址: 博客园:架构设计(六):引入消息队列 CSDN:架构设计(六):引入消息队列 消息队列是一个支持持久化的组件,数据存储在内存中,支持异步通信。它作为一个缓冲器,分配异步请求。消息队列的基本架构很简单,包含两个部分 第一部分:输入服务,称为生产

京东小程序数据中心架构设计与最佳实践

小程序平台是怎么保证商家业务的稳定、健康发展,服务好这些外部商家的呢?这里面非常重要的是我们平台对小程序基本流量的运营与监控。如何不让业务的小程序在线上裸奔?如何帮助业务对自身小程序流量的冲高回落有一种直观的把握和监测?如何基于海量数据指导业务去进行一个精细化的运营?实际上,京东小程序数据中心就扮演了一个这样的小程序数据问题终结者的角色,充分利用各类数据手段,解决这些痛点问题。