加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL亿级数据数据库优化方案测试-银行买卖营业流水记录的查询

发布时间:2019-06-06 11:18:08 所属栏目:编程 来源:逸宸a
导读:对MySQL的机能和亿级数据的处理赏罚要领思索,以及分库分表到底该怎样做,在什么场景较量吻合? 好比银行买卖营业流水记录的查询 限盐少许,上现实尝试进程,以下是在尝试的进程中做一些操纵,以及踩过的一些坑,我认为坑对付读者来讲长短常有效的。 起首:成立一
副问题[/!--empirenews.page--]

 MySQL亿级数据数据库优化方案测试-银行买卖营业流水记录的查询

对MySQL的机能和亿级数据的处理赏罚要领思索,以及分库分表到底该怎样做,在什么场景较量吻合?

好比银行买卖营业流水记录的查询

限盐少许,上现实尝试进程,以下是在尝试的进程中做一些操纵,以及踩过的一些坑,我认为坑对付读者来讲长短常有效的。

起首:成立一个现金流量表,买卖营业汗青是各个金融系统下行使率最高,汗青存留数据量最大的数据范例。现金流量表的数据搜刮,可以按照时刻范畴,和小我私人,以及金额举办搜刮。

-- 成立一张 现金流量表

  1. DROP TABLE IF EXISTS `yun_cashflow`;  
  2. CREATE TABLE `yun_cashflow` (  
  3.   `id` bigint(20) NOT NULL AUTO_INCREMENT,  
  4.   `userid` int(11) DEFAULT NULL,  
  5.   `type` int(11) DEFAULT NULL COMMENT '1、入账,2提现',  
  6.   `operatoruserid` int(11) DEFAULT NULL COMMENT '操纵员ID',  
  7.   `withdrawdepositid` bigint(20) DEFAULT NULL COMMENT '提现ID',  
  8.   `money` double DEFAULT NULL COMMENT '钱数',  
  9.   `runid` bigint(20) DEFAULT NULL COMMENT '工单ID',  
  10.   `createtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
  11.   PRIMARY KEY (`id`)  
  12. ) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8; 

然后开始造1个亿的数据进去。

-- 轮回插入

  1. drop PROCEDURE test_insert;  
  2. DELIMITER;;  
  3. CREATE PROCEDURE test_insert()  
  4. begin   
  5. declare num int;   
  6. set num=0;  
  7.         while num < 10000 do  
  8.             insert into yun_cashflow(userid,type,operatoruserid,withdrawdepositid,money) values(FLOOR(7 + (RAND() * 6))+FLOOR(22 + (RAND() * 9)),1,FLOOR(97 + (RAND()  
  9.  
  10. * 6))+FLOOR(2 + (RAND() * 9)),FLOOR(17 + (RAND() * 6))+FLOOR(2 + (RAND() * 9)),FLOOR(5 + (RAND() * 6))+FLOOR(2 + (RAND() * 9)));  
  11.             set numnum=num+1;  
  12.         end while;  
  13.   END;;  
  14. call test_insert(); 

坑一:

这个存储进程成立好了之后,发明插入数据出格的慢,一天一晚上也插入不到100万条数据,均匀每秒40~60条数据,中间我停过屡次,觉得是随机函数的题目,都酿成常数,但结果一样,照旧很慢,其时让我对这个MySQL数据库感受到气馁,事实Oracle用惯了,那插速是真的很快,不外工夫不负有意人,原本可以用其它一种写法造数据,速率很快,上代码。

  1. INSERT INTO example  
  2. (example_id, name, value, other_value)  
  3. VALUES  
  4. (100, 'Name 1', 'Value 1', 'Other 1'),  
  5. (101, 'Name 2', 'Value 2', 'Other 2'),  
  6. (102, 'Name 3', 'Value 3', 'Other 3'),  
  7. (103, 'Name 4', 'Value 4', 'Other 4'); 

就是在轮回里,用这种名目造很大都据,VALUES后头以,离隔,然后把数据写上去,我用Excel造了1万条数据,凭证语句名目粘贴了出来,就酿成每轮回一次,就1万条数据,这样没多久1亿数据就造好了。

  1. select count(*) from yun_cashflow 

我还较量好奇,8个字段1亿条数据,到底占了多大的处所,通过以下语句找到数据的路径。

  1. show global variables like "%datadir%"; 

通过查察文件,是7.78GB,看来假如字段不是许多,数据量大的话,着实不是什么题目,这着实作为架构师来讲,在估算呆板设置硬盘冗余的时辰,这是最简朴直接粗暴的换算思绪。

行了,表建完了,各类尝试开始

起首,啥前提不加看看咋样。

呵呵了,Out of memory,看来这个查询是真往内存里整,内存整冒烟了,看来7.8G的数据是往内存里放,我内存没那么大导致的。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读