数据库分片分库常见问题解决方案

常见的优化数据库结构方法:

  • 字段多的表分解多个表,分库分表
  • 中间表
  • 适当增加冗余字段

接下来具体说下分库分表。

1、垂直分表

表的相关性拆分不同的表,表现形式一张列比较多的表拆分多张子表。

特点:

  • 多张子表需要主键,所以主键出现冗余
  • 这种场景使用元表中,尤有些列常用,有些列不常用
  • 查询所有数据要join。2次查询,第一次查询结果集查出关联数据id,再根据id查询相关数据

2、水平分表

通过策略对每一片数据分散不同库。

特点:

  • 使用场景数据量大
  • 查询多张表需要union
  • 分布式事务,部署,运维难

数据库分片常见实现方案:

  1. 分片在应用端,封装在jar,通过修改或封装JDBC实现
  2. 应用和数据中加中间代理

分片分库面临问题:

  • 跨节点的count,order by,group by以及聚合函数问题。分别在各节点并行查询得到结果,再应用端合并结果
  • 数据迁移,容量规划,扩容等问题。对2的倍数取余分配数据,表级别数据迁移
  • id问题。不能依赖数据库自身的主键生成机制,无法保证全局唯一。snowflake算法解决
  • 分页排序问题。如果排序字段就是分片字段,比较容易定位指定分片。如果不是,在不同结果排序返回,再将不同分片返回的结果排序

原文地址:https://www.cnblogs.com/ivy-xu/p/12550644.html

时间: 2024-10-20 00:23:09

数据库分片分库常见问题解决方案的相关文章

亿级数据库分片分库架构设计亿【转】

数据库扩展性架构设计 http://mp.weixin.qq.com/s/gI6j_TyjJ4jEb-i8HstFaw分库分表需要考虑的问题及方案 http://www.jianshu.com/p/32b3e91aa22c无限容量数据库架构设计 https://mp.weixin.qq.com/s/ad4tpM6cdi9r6vgfbaTzxgMQ消息可达性+幂等性+延时性架构设计 http://mp.weixin.qq.com/s/8oX7u8XcLL80_nNdN-UkvQ高可用+高并发+负载

分库分表和数据库分片方案

分库分表和数据库分片方案 数据库数据量达到千万级别时查询效率会很低,分库分表是一种很有效的解决方案. 垂直划分和水平划分 垂直划分:垂直划分又分为垂直分库和垂直分表两种,垂直分库就是将关联度低的各种表放在不同的数据库中,垂直分表是针对表的列进行的,将字段拆到其他表中形成新表,这样表的记录就会变小,索引就会降低空间消耗,提升性能.垂直划分业务逻辑清晰便于管理,提升高并发性能,但是表无法连接查询,涉及分布式事务技术,且不能从本质上减少表的大数据量,还需要借助水平划分. 水平划分:分为分库分表和库内分

MySQL 高可用:mysql+mycat实现数据库分片(分库分表)

本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么是MYCAT: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术.NoSQL技术.HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数

数据库(分库分表)中间件对比

转自:http://www.cnblogs.com/cangqiongbingchen/p/7094822.html 分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm. 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表呢,还是一张表.分区可以把表分到不同的硬盘上,但不能分配到不同服务器上. 优点:数据不存在多个副本,不必进行数据复制,性能更高. 缺点:分区策略必须经过充分考虑,避免多个分区之间的数

数据库-数据库设计-分库分表

为什么要分库分表 分库分表的设计 带来的问题 扩容 分布式事务 多个路由字段怎么设置 关于分库分表最全的一篇文章 这里介绍设计分库分表框架时应该考虑的设计要点,并给出相应的解决方案. 一.整体的切分方式 简单来说,数据的切分就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)中,以达到分散单台设备负载的效果,即分库分表. 数据的切分根据其切分规则的类型,可以分为如下两种切分模式. 垂直(纵向)切分:把单一的表拆分成多个表,并分散到不同的数据库(主机)上. 水平(横

57-4 数据库分片概念及mongodb sharding的实现

04 数据库分片的概念及mongodb sharding的实现 配置环境: node1: 192.168.1.121 CentOS release 6.7 node2: 192.168.1.122 CentOS release 6.7 node3: 192.168.1.123 CentOS release 6.7 [[email protected] ~]# vim /etc/hosts 添加 192.168.1.121   node1 192.168.1.122   node2 192.168

数据库mysql 分库备份脚本

数据库mysql 分库备份脚本 在企业工作中,我们经常会遇到数据库备份问题,当然我之前不止提到过mysql 主从,现在我们 先来看看单库如何来实现分库定期进行备份的,先看一下以下脚本: vi mysql_backup.sh #!/bin/sh #backup tiandao bbs edoing #coding tonye.li MYUSER=root MYPASS=meidi SOCKET=/data/3306/mysql.sock MYCMD="mysql -u$MYUSER -p$MYPA

Emoji表情符号录入MySQL数据库报错的解决方案

前言:手机app应用评论的时候,恢复表情符号,提示失败.?1,查看tomcat后台日志,核心报错信息如下:  Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)at com.mysql.

docker之常见问题&解决方案

Docker 问题积累 1. 使用Dockerfile构建镜像时报错 2. Docker时区问题 3. 启动Docker进程失败–Centos7.X 4. docker启动失败 5. Docker启动失败–ubuntu 6. docker pull镜像失败 http://blog.csdn.net/u010472499/article/details/54929678 docker之常见问题&解决方案