支付之订单表的垂直切分和水平切分


layout: post title: "支付之订单表的垂直切分和水平切分" subtitle: " "表的切分有3个问题:1.切分的对象是谁?表; 2.怎么切分?垂直(按表的字段)和水平(按表的数据记录行); 3.谁来实现切分功能?数据库厂商或应用程序 "" date: 2018-10-17 06:00:00 author: "青乡" header-img: "img/post-bg-2015.jpg" catalog: true tags: - 支付 - 数据库 - database

数据量

单表-订单表
几十万/日
几千万/年
几亿/累计

数据大小

G

注:达到G,oracle官方推荐分区。

带来的问题

单表过百万,速度就很慢。

如何解决查询慢的问题

1.近期数据
近几个月的数据,放到订单库的订单表。

2.历史数据
放到历史库。

历史库

数据还是过亿。怎么处理?分区。

分区

oracle

怎么分区?

创建表的同时,创建分区。

创建分区,有好几种不同方式?
1.range //最常用,也最简单
按某个字段,比如按订单id字段的值划分://订单id是内部使用id,按一定规则数字增长 //什么规则?不是从1开始,因为这样会泄露订单数量,而是从一个其他的数字开始增长

1)1~50万 //这是一个分区
2)50万~100万 //这是一个分区
... //n个分区

总共划分为几十个分区。//几十万/日,1 2个月几百万上千万,分为几十个分区

2.list
相当于是枚举enum,就是有几个固定的值。

blog.csdn.net/clark_xu/ar…

my.oschina.net/u/140722/bl…

3.hash
字段——》hash——》随机选择一个分区,插入数据。

m635674608.iteye.com/blog/224891… blog.csdn.net/weixin_3670…

怎么访问?

1.range
1)插入
会根据字段的值,自动插入到对应的分区。这个是数据库厂商实现和支持的。不需要程序去处理分区的问题,当然如果在程序里处理也可以。
2)查找
同上。

3)查找-跨分区/多分区 一、 默认自动查找多个分区。 二、 如果实在要手动指定也可以。
代码计算属于哪个分区 + sql指定分区。//具体怎么计算?怎么指定?代码和sql?1.select * from partition(分区表名字1), partition(分区表名字2) where ...; 2.分2次查,合并结果(union)。

2.list

3.hash

水平切分

什么意思?
水平是指按表的数据记录行,水平切分。

就是把表看成一行行的记录,如果行达到百万级别,那么就需要水平把记录切分到多个表里去。

所谓水平切分就是把表的数据,划分到多个表。

切分对象是谁?表里的数据记录行。
谁来切分?1.数据库厂商 2.应用程序


谁来切分,有2种解决方案?
1.数据库厂商支持表分区partition
这就是数据库厂商支持表的水平切分。

一切都是自动的,1.创建表同时,以某个字段创建分区 2.自动根据字段值的大小,插入对应分区 3.查找的时候也是自动根据字段的值大小,选择对应的分区。

2.应用程序
这个时候不是分区,因为分区是数据库厂商实现的功能这么一个概念。
现在是多张表,比如order现在是order1、order2、order3。
1)插入
手动判断插入哪一张表。
2)访问
手动判断查找哪一张表。

总而言之,有2个不同,1.一个是分区,一个是多个表 2.sql是否需要手动判断插入哪一个表。

垂直切分

垂直指什么?
按表的字段切分,叫垂直切分。


应用场景?
如果一张表包含了大几十个字段,而且有的字段是大数据,那么就应该把一部分附加信息字段拆分出来,独立为一张单独的表,比如,订单表(重要字段)和订单附加信息表(非重要字段和大数据字段)。

参考

blog.csdn.net/xieyuooo/ar…

www.oracle.com/technetwork…

blog.csdn.net/shiyong1949…

zhuanlan.zhihu.com/p/24036067?… blog.csdn.net/xlgen157387… redhat.iteye.com/blog/137920…

转载于:https://juejin.im/post/5c04099651882508082591f3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值