zoukankan      html  css  js  c++  java
  • 数据库分片分库常见问题解决方案

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

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

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

    1、垂直分表

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

     

    特点:

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

    2、水平分表

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

    特点:

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

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

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

    分片分库面临问题:

    • 跨节点的count,order by,group by以及聚合函数问题。分别在各节点并行查询得到结果,再应用端合并结果
    • 数据迁移,容量规划,扩容等问题。对2的倍数取余分配数据,表级别数据迁移
    • id问题。不能依赖数据库自身的主键生成机制,无法保证全局唯一。snowflake算法解决
    • 分页排序问题。如果排序字段就是分片字段,比较容易定位指定分片。如果不是,在不同结果排序返回,再将不同分片返回的结果排序
  • 相关阅读:
    02作业
    作业01
    10-C++远征之模板篇-学习笔记
    9-C++远征之多态篇-学习笔记
    8-C++远征之继承篇-学习笔记
    C++远征之封装篇(下)-学习笔记
    6-C++远征之封装篇[上]-学习笔记
    C++远征离港篇-学习笔记
    4-c++教程起航篇-学习笔记
    Linux C语言结构体-学习笔记
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12550644.html
Copyright © 2011-2022 走看看