数据库分片(Sharding)技术 - 文章写作框架

Introduction 导言

本文中分片的概念与数据库分区的概念一致?

本文中的分片会放到不同的物理节点上。


下面是本文目录,帮助您接下来的阅读

What is Sharding? 什么是分片?

分片(Sharding)是一种与水平切分(horizontal partitioning)相关的数据库架构模式——将一个表里面的行,分成多个不同的表的做法(称为分区)。每个区都具有相同的模式和列,但每个表有完全不同的行。同样,每个分区中保存的数据都是唯一的,并且与其他分区中保存的数据无关。

从水平切分(horizontal partitioning)与垂直切分(vertical partitioning)的关系,可能会有所帮助。在垂直切分表中,所有的列被分离出来,并放入新的不同的表中。每个垂直切分内的数据,独立于所有其他分区中的数据,并且每个分区都包含不同的行和列。下图说明了如何在水平和垂直方向上对表进行分区:


range 分区是一种水平分区。

逻辑分片与物理分片

分片(Sharding)将一个数据分成两个或多个较小的块,称为逻辑分片(logical shards)。然后,逻辑分片(logical shards)分布在单独的数据库节点上,称为物理分片(physical shards)。物理分片(physical shards)可以容纳多个逻辑分片(logical shards)??。

数据库分片(Database shards)是无共享架构的一个例子。这意味着分片是自治的:分片间不共享任何相同的数据或服务器资源。

通常,分片(Sharding)在应用程序级别进行实现。这意味着应用程序包含“要向哪个分片发送读和写”的代码。但是,某些数据库管理系统内置了分片功能,允许您直接在数据库级别实现分片。

Key Based Sharding 基于对某个键进行 HASH 后的分片



Range Based Sharding 基于范围的分片

基于范围的分片(Range based sharding),基于给定值的范围进行数据分片。为了说明,假设您有一个数据库,用于存储零售商目录中所有产品的信息。您可以创建一些不同的分片,并根据每个产品的价格范围分配每个产品的信息,如下所示:


本案例中基于第二列 Price 进行范围划分得到分片

Benefits of Sharding 分片的好处

数据库分片的主要吸引力在于,它可以帮助促进水平扩展(horizontal scaling),也称为向外扩展(scaling out)。水平扩展是将更多的机器添加到现有堆栈中,以分散负载,允许更多的流量和更快的处理。这通常与垂直扩展(vertical scaling)形成对比,垂直扩展也称为向上扩展(scaling up),是指升级现有服务器的硬件,通常是添加更多内存或CPU。

Drawbacks of Sharding 分片的缺点

要考虑的最后一个缺点是,并不是每个数据库引擎本身都支持分片。例如,尽管可以手动分片PostgreSQL数据库,但PostgreSQL本身并不包括自动分片功能。有许多Postgres分支包括自动分片功能,但这些分支通常落后于最新的PostgreSQL版本,并且缺乏某些其他的功能特性。一些专业的数据库技术——如MySQL Cluster或某些数据库即服务产品(如MongoDB Atlas)确实包含自动分片功能,但这些数据库管理系统的普通版本却并不包含。因此,分片通常需要“自己动手”的方法。这意味着通常很难找到有关分片或故障排除技巧的文档。

Should I Shard? 我应该分片吗?

什么场景下应该实现分片数据库架构:

私聊

在分片之前,您应该用尽所有其他选项来优化数据库。您可能需要考虑的一些优化包括:

私聊。

Conclusion 结语



参考文献

编辑于 2019-12-19 21:27