架构设计之数据分片

Java90

数据分片技术作为当前架构设计中处理大数据的常规手段,目前广泛应用于缓存、数据库、消息队列等中间件的开发和使用。例如,在数据量大的项目中,系统性能瓶颈主要来自与数据库的交互。通过合理设计数据库分片规则,系统中的数据可以分布在不同的物理数据库中,平衡单点的数据量和访问压力,提高应用系统的数据处理速度,从而提高系统的整体性能;

[En]

As a conventional means of dealing with big data in current architecture design, data sharding technology is currently widely used in the development and use of middleware such as cache, database, message queue, etc. For example, in projects with large data volume, the system performance bottleneck mainly comes from the interaction with the database. By reasonably designing database sharding rules, the data in the system can be distributed in different physical databases, It balances the data volume and access pressure of a single point to improve the data processing speed of the application system, thereby improving the overall performance of the system;

数据库分片的概念

数据分片概念就是按照一定的规则,将数据集划分成相对独立的数据子集,然后将数据子集分布到不同的节点上,这个节点可以是逻辑上节点,也可以是物理上的节点。数据分片需要按照一定的规则,不同的分布式场景需要设计不同的规则,但基本都遵循同样的原则:按照最主要、最频繁使用的访问方式来分片。在常规的项目开发当中,一般有以下三种方式对数据进行分片:hash方式、一致性hash、按照数据范围,每种分片方式是否适用,一方面需要结合项目的实际情况与规模,另一方面也要从几个常规的维度去评估:

1、 数据分片策略,也就是具体的分片方式

2、 数据分片节点的动态扩展,随着数据量的逐步增长,是否能够通过增加节点来动态扩展适应

3、 数据分片节点的负载均衡',结合分片策略能否保证数据均匀的分布在各个节点上以及各个节点的负载压力是否均衡

4、 数据分片的可用性,当其中一个节点产生异常,能否将该节点的数据转移到其他节点上

下面我们就对三种常规的分片模式做个基本的介绍

hash方式

通过对数据(一般为Key值)先进行hash计算再取模的方式是一种简单且使用频繁的分片方式,也就是Hash(Key)%N,这里的N大部分情况下就是我们的结点个数,这种方式相对简单实用,一般场景下能够满足我们的要求。但Hash取模方式主要的问题是节点扩容或缩减的时候,会产生大量的数据迁移,比如从N台设备扩容到N+1台,绝大部分的数据都要在设备间进行迁移。该种方式代码实现较为简单,既可以采用jdk自带的hash方式也可以采用其他hash算法,大家可以自行搜索具体实现。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长