zoukankan      html  css  js  c++  java
  • 数据库拆分

    垂直拆分:是指按功能模块拆分。比如分为订单库、商品库、用户库...这种方式多个数据库之间的表结构不同。如系统可以分为,订单系统,商品管理系统,用户管理系统业务系统比较明的,垂直拆分能很好的起到分散数据库压力的作用。

    缺点:

    • 表关联无法在数据库层面做
    • 单表大数据量依然存在性能瓶颈
    • 应用端的复杂性增加
    • 事务保证比较复杂

    水平拆分:如可以按订单的日前按年份才分,2003年的放在db1中,2004年的db2,以此类推。当然也可以按主键标准拆分。

    例如 有一个5000w的订单表,操作起来订单库的压力仍然很大,如我们需要在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销还是不容忽视的,反过来,假如我们将这个表分成100个table呢,从table_001一直到table_100,5000w行数据平均下来,每个子表里边就只有50万行数据,这时候我们向一张只有50w行数据的table中insert数据后建立索引的时间就会呈数量级的下降,极大了提高了DB的运行时效率,提高了DB的并发量,这种拆分就是横向拆分。

    优点:可部分迁移

    缺点:数据分布不均,可能2003年的订单有100W,2008年的有500W。

     库表散列:表散列与水平拆分相似,但没有水平分割那样的明显分割界限,采用Hash算法把数据分散到各个分表中, 这样IO更加均衡。

    比如:对user_id进行hash(或者如果user_id是数值型的话直接使用user_id的值也可),然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。

    优点:数据分布均匀

    缺点:数据迁移的时候麻烦;不能按照机器性能分摊数据 。

  • 相关阅读:
    资源文件 -- 初级应用篇
    Dephi中资源文件的应用
    VC++ 中使用内存映射文件处理大文件
    Delphi中正常窗口的实现
    让程序只运行一个实例
    多条明细(绑定到一个字段)汇总
    在更新之后最好有个判断 看是否更新上 编码码自动生成
    Delphi中有序型
    使用powerDesign画er图 并用 Database --->Generate Database ---> Genarate Script一次性将表结构的脚本导出来。
    .Net中的水晶报表
  • 原文地址:https://www.cnblogs.com/flyxiangshang/p/5085223.html
Copyright © 2011-2022 走看看