前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『互联网架构』软件架构-解密电商系统-交易分库分表(75)

『互联网架构』软件架构-解密电商系统-交易分库分表(75)

作者头像
IT架构圈
发布2019-06-17 16:06:18
6100
发布2019-06-17 16:06:18
举报
文章被收录于专栏:IT架构圈

订单相关表都已经是超大表,最大表的数据量已经是几十亿,数据库处理能力已经到了极限;单库包含多个超大表,占用的硬盘空间已经接近了服务器的硬盘极限,很快将无空间可用;过度解决:我们可以考虑到最直接的方式是增加大容量硬盘,或者对IO有更高要求,还可以考虑增加SSD硬盘来解决容量的问题。此方法无法解决单表数据量问题。可以对数据表历史数据进行归档,但也需要频繁进行归档操作,而且不能解决性能问题硬件上(大小)、单表容量(性能)。

(一)如何优化?有什么方式
  • 数据库的读写分离

数据库量还是很庞大,只是读和写数据的分离

  • 换mysql》oracle

免费到收费谁能接受

  • 分库分表

1、散列hash:hashmap可以很好的去解决数据热点的问题,但是扩容 短板 2、Range增量:他的库容很多好,但是他就是没法解决数据热点的问题。

(二)分库分表

shardingsphere的方式来完成分库分表,表中的一列确定分库键。

(三)分库分表难点
  • 分库分表之分布式唯一ID解决方案

Uuid

通用唯一识别码 组成部分:当前日期和时间+时钟序列+全局唯一网卡mac地址获取 执行任务数:10000 所有线程共耗时:91.292 s 并发执行完耗时:1.221 s 单任务平均耗时:9.1292 ms 单线程最小耗时:0.0 ms 单线程最大耗时:470.0 ms 优点: 代码实现简单、不占用宽带、数据迁移不影响。 缺点: 无序、无法保证趋势递增、字符存储、传输、查询慢。

Snowflke

snowflake是Twitter开源的分布式ID生成算法。 传统数据库软件开发中,主键自动生成技术是基本需求。而各个数据库对于该需求也提供了相应的支持,比如MySQL的自增键,Oracle的自增序列等。 数据分片后,不同数据节点生成全局唯一主键是非常棘手的问题。同一个逻辑表内的不同实际表之间的自增键由于无法互相感知而产生重复主键。 虽然可通过约束自增主键初始值和步长的方式避免碰撞,但需引入额外的运维规则,使解决方案缺乏完整性和可扩展性。 io.shardingsphere.core.keygen.DefaultKeyGenerator

执行任务数:10000 所有线程共耗时:15.111 s 并发执行完耗时:217.0 ms 单任务平均耗时:1.5111 ms 单线程最小耗时:0.0 ms 单线程最大耗时:97.0 ms 优点: 不占用宽带、本地生成、高位是毫秒,低位递增。 缺点: 强依赖时钟,如果时间回拨,数据递增不安全。

Mysql

利用数据库的步长来做的。 CREATE TABLE bit_table (id varchar(255) NOT NULL,//字符 PRIMARY KEY ( id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE bit_num (id bigint(11) NOT NULL AUTOINCREMENT, KEY ( id) USING BTREE ) ENGINE=InnoDB autoincrement=1 DEFAULT CHARSET=utf8; SET global autoincrementoffset=1; --初始化 SET global autoincrementincrement=100; --初始步长 show global variables; 缺点: 受限数据库、单点故障、扩展麻烦。 优点: 性能可以、可读性强、数字排序。

Redis

redis原子性:对存储在指定key的数值执行原子的加1操作。如果指定的key不存在,那么在执行incr操作之前,会先将它的值设定为0 组成部分:年份+当天当年第多少天+天数+小时+redis 自增 执行任务数:10000 所有线程共耗时:746.767 s 并发执行完耗时:9.381 s 单任务平均耗时:74.6767 ms 单线程最小耗时:0.0 ms 单线程最大耗时:4.119 s 优点: 有序递增、可读性强、符合刚才我们那个扩容方案的id。 缺点: 占用宽带(网络)、依赖第三方、redis。

  • 场景

名称

场景

适用指数

Uuid

Token、图片id

★★

Snowflake

ELK、MQ、业务系统

★★★★

数据库

非大型电商系统

★★★

Redis

大型系统

★★★★★

PS:分库分表对于大型系统必须考虑,提前使用第三方工具来完成,如果使用shardsphere来完成比较好,也可以使用mycat。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)如何优化?有什么方式
  • (二)分库分表
  • (三)分库分表难点
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档