架构设计之数据分片

Java34

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

[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学长

相关文章
Grafana 安装 Java

Grafana 安装

环境 CentOS 8 1. 安装 sudo nano /etc/yum.repos.d/grafana.repo 写入配置 ```txt [grafana] name=grafana baseurl...
Mysql优化 Java

Mysql优化

1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽...
Java并发编程艺术系列-四、 Java并发编程基础 Java

Java并发编程艺术系列-四、 Java并发编程基础

四、 Java并发编程基础 本章将着重介绍Java并发编程的基础知识,从启动一个线程到线程间不同 的通信方式,最后通过简单的线程池示例以及应用(简单的Web服务器)来串联本章所介绍的内容。 4.1 线...
Java se Java

Java se

一些需要注意的点 ConcurrentHashMap CAS是乐观锁 CopyOnWriteArrayList的add方法
企业级微服务API网关Fizz-服务编排内置函数 Java

企业级微服务API网关Fizz-服务编排内置函数

概述 在前面的教程里已经介绍过服务编排的功能,服务编排主要是基于现有的业务微服务使用在线配置的方式快速的生成一个聚合接口。在进行入参或结果处理时,常要进行数据转换或计算。此时可用常用的内置函数来处理,...
Netty-NIO基础 Java

Netty-NIO基础

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的 双向通...
2.java基础笔试 Java

2.java基础笔试

1.Java中的jdk是什么?jre是什么? 答:jdk是Java的开发工具包,主要包含了各种类库和工具,也包含了一个jre。 jre是Java程序的运行环境 2.什么是Java平台的无关性? 答:我...
设计模式之装饰器模式 Java

设计模式之装饰器模式

本文由老王将建好的书房计划请小王来帮忙,小王却想谋权篡位,老王通过教育他引出装饰器设计模式,第二部分针对老王提出的建设性意见实现装饰器模式,第三部分针对装饰器模式在Jdk中的IO、Spring中的缓存...
HashMap 浅度分析 Java

HashMap 浅度分析

Map结构是最常用的 数据结构之一,理解hashmap关键在于理解对于hash冲突的处理方式。 一、 默认常量 1、默认初始化容量 static final int DEFAULT_INITIAL_C...
线程的同步 Java

线程的同步

线程同步机制同步块:Java中提供了同步机制,可以有效的防止资源冲突。同步机制使用 synchronized关键字 使用该关键字的代码块称为同步块。同步块 语法: synchronized (Obje...