分库分表分区

news2024/11/25 7:33:40

分库分表分区

数据库分库、分表和分区是水平切分数据库的策略,有助于提高数据库性能、可伸缩性和负载均衡。

概念

  • **分库:**将一个库的数据拆分到多个相同的库中,访问的时候访问一个库。
  • **分表:**把一个表的数据放到多个表中,操作对应的某个表就行。
  • **分区:**是指将同一表中不同行的记录分配到不同的物理文件中。

目的就是减少数据库的负担,提高数据库的效率。

应用场景

  1. 多租户系统:分库可确保不同租户的数据隔离,提高安全性和性能。
  2. 时间序列数据:分表和分区用于处理大量时间序列数据,提高时间范围内的查询性能。
  3. 大规模电子商务平台:分库和分表可确保商品、订单等数据均匀分布,提高负载均衡和性能。
  4. 数据保留政策:分区可用于实现数据保留策略,将数据分为热数据和冷数据。

拆分方式

垂直拆分

数据库垂直拆分

垂直拆分:是指数据表列的拆分,把一张列比较多的表拆分为多张表。

例如,根据业务拆分,例如电商系统,拆分成用户表,订单表,商品表。

在这里插入图片描述

表垂直拆分

根据业务去拆分表,如图,把user表拆分成user_base表和user_info表,use_base负责存储登录,user_info负责存储基本用户信息

优缺点

优点:

  • 拆分后业务清晰(专库专用按业务拆分)
  • 数据维护简单,按业务不同,业务放到不同机器上

缺点:

  • 如果单表的数据量,写读压力大。
  • 受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题,如双十一抢购)。
  • 部分业务无法关联join,只能通过java程序接口去调用,提高了开发复杂度。

水平拆分

数据水平拆分

水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

例如,按会员库拆分,拆分成会员1库,会员2库,以userId拆分,userId尾号0-5为1库 6-9为2库,还有其他方式,进行取模,偶数放到1库,奇数放到2库

表的水平拆分

如图把users表拆分成users1表和users2表,以userId拆分,进行取模,偶数放到users1表,奇数放到users2表

优点:

  • 单库/单表的数据保持在一定量(减少),有助于性能提高
  • 提高了系统的稳定性和负载能力
  • 拆分表的结构相同,程序改造较少。

缺点:

  • 数据的扩容很有难度维护量大
  • 拆分规则很难抽象出来
  • 分片事务的一致性问题部分业务无法关联join,只能通过java程序接口去调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数智化案例展】拜耳虫虫拜拜——全渠道倾听客户声音,持续指引产品改善与服务升级...

‍ 光速斑马案例 本项目案例由光速斑马投递并参与数据猿与上海大数据联盟联合推出的《2023中国数智化转型升级创新服务企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 虫虫拜拜是拜耳集团成立的上门除虫服务品牌,创立初衷是通过专业科学的…

MySQL Binlog实战应用之一

一、前言 开发业务系统尤其是与财务相关的系统,需要记录每一笔变更操作的日志,这一般有两种实现方案。 1、代码中通过AOP实现,提供注解跟踪记录日志,这种方案能够比较清晰地以业务角度记录操作日志,但记录变更前的旧…

uniapp黑马优购

配置tabbar 使用 npm install escook/request-miniprogram 进行http请求 挂载到 uni.$http 上 uniapp小程序分包 访问的时候 携带分包目录 /subpkg/goods_detail/goods_detail git分支使用 # 创建并使用分支 git checkout -b home git commit # 推送到远程的home分支…

“2024中国电子信息展会“百年历史展会,4月深圳,7月成都,11月上海

2024年中国电子信息博览会,将如一位游历全国的使者,跨越千山万水,让人们见证中国电子信息产业的辉煌成就。它的足迹将遍布全国多个地区,4月走进繁花似锦的深圳,7月拥抱历史悠久的成都,11月则落脚国际化的上…

什么是NPM(Node Package Manager)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

IBM LSF 作业负载管理

了解 LSF 作业生命周期。 使用 bsub 将作业提交到队列,并指定作业提交选项以修改默认作业行为。 提交的作业在队列中等待,直到将它们调度并分配到主机上来执行。 在作业分发时,LSF 会检查哪些主机有资格运行该作业。 一、作业生命周期 LSF …

5.5 TCP报文段的首部格式

思维导图: 5.5 TCP报文段的首部格式 基本概念 TCP报文段:包含首部和数据两部分,首部至少20字节。作用:首部字段定义了TCP的功能和行为。长度:首部长度可变,基础首部20字节,可添加选项。 首部…

初学编程教程视频教程,初学编程入门知识

初学编程教程视频教程,初学编程入门知识 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,向如图这个实例就是用这个…

零信任网络:一种全新的网络安全架构

随着网络技术的不断发展,网络安全问题日益凸显。传统的网络安全策略往往基于信任和验证,但这种信任策略存在一定的局限性。为了解决这一问题,零信任网络作为一种全新的网络安全架构,逐渐受到人们的关注。本文将对零信任网络的概念…

富士康“吃饭砸碗”,3年时间推动印度制造的iPhone翻倍增长

近期富士康备受关注,业界人士查找了富士康、印度制造的数据发现富士康为印度制造iPhone做出了“卓越”贡献,3年时间推动印度制造的iPhone翻倍增长,为印度制造立下了汗马功劳。 这几年苹果力推富士康、纬创、和硕等赴印设厂生产iPhone&#xf…

SpringCloud 微服务全栈体系(十一)

第十章 RabbitMQ 三、SpringAMQP SpringAMQP 是基于 RabbitMQ 封装的一套模板,并且还利用 SpringBoot 对其实现了自动装配,使用起来非常方便。 SpringAmqp 的官方地址:https://spring.io/projects/spring-amqp SpringAMQP 提供了三个功能&…

【protobuf】protobuf自定义数据格式,CMake编译C++文件读写自定义数据

protobuf自定义数据格式,CMake编译文件读写自定义数据 1.protobuf安装2.定义.proto文件3.编写main.cpp4.编写CMAkeLists配置文件5.运行 1.protobuf安装 protobuf库链接 2.定义.proto文件 新建一个Person.proto文件和一个Animal.proto文件,内容如下&…

在Node.js中,什么是模块(module)?如何导入和导出模块?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Oracle JDK 和OpenJDK两者有什么异同点

Oracle JDK 和 OpenJDK 是两种不同版本的 Java Development Kit(Java 开发工具包),它们都提供了用于开发 Java 程序的一系列工具和库。以下是它们之间的一些主要异同点: 相同点: 功能:在大多数情况下&…

VS2022 开发方式

使用 C# 在VS 2022 上开发时,发现有多种项目类型可以创建。这些类型放一起容易搞混,于是记录一下各种类型的区别。 这里主要介绍windows控制台程序、MFC程序、WPF程序、WinForm程序的特点。 创建哪种应用? 创建控制台应用 Windows控制台程序…

Postgresql批量按照顺序更新某一个字段

如批量更新采购订单行sequence字段,按照订单行id的顺序赋值1,2,3,4...: UPDATE purchase_order_line_copy1 SET sequence subquery.new_sequence FROM (SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS new_sequence…

一种使用Windows10自带工具快速精准地调整图片文件的尺寸大小的方法

最近在做一个材料申报工作,需要将很多图片大小调整到200k以下。个人经过摸索,总结出一种Windows10自带工具快速精准地调整图片文件的尺寸大小的一个便捷方法,现分享如下。 一、所用工具 Windows10系统自带的照片工具 默认Windows10系统打开…

【Python学习笔记】SQLite报错Error: near “)“: syntax error的低级错误

【Python学习笔记】SQLite报错Error: near “)”: syntax error的低级错误 不说废话,典型错误,写建表语句的时候末尾多写了一个逗号。 之前为了解决这个错误还去问chatgpt,得到一堆官话答案。伤害性不高,侮辱性极强。 最后发现在…

【Proteus仿真】【51单片机】数控稳压可调电源设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用动态数码管、按键、PCF8591 AD/DAC、LM358放大电路模块等。 主要功能: 系统运行后,系统默认输出直流5V,数码管…

基于合成数据的文本定位实现【OpenCV】

数据是目前深度学习的主要限制因素。 好的数据很难获得。 收集和标记数据是一项艰苦的体力劳动。 这是昂贵、耗时且困难的。 AI获胜者并不是有最好算法的人,而是有最多数据的人。 -安德鲁吴 此问题的一个“次优”解决方案是以编程方式生成合成数据。 合成数据无疑不…