百万级海量数据内存数据库和数据库的性能对比
最近公司准备把内存数据库和数据库换成国产的数蚕数据库。老大让我来测试一下性能。周末正好加个小班小试了一下。
环境准备:
官方提供的包括的linux和windows平台专业版各一套。我这里测试是windows平台使用Windows 10系统。
开发机器:CPU i7 8700, 内存 16G, 256G固态盘。
数据准备:
使用100000,1000000条包含整数类型,浮点类型,日期类型,字符串类型的数据,其中name,date,value含有重复值。构造的数据表为id,name,date,value的字段表。
内存数据库
测试内容包含:插入,查询
插入分别使用insert, sql文件和import功能。
这个数据库的sql和标准有一些不太一致的地方,还好在线文档写得很清晰,过了一遍就大概齐了解区别了。
运行sct_local_mem.exe,或者运行sct_s_mem.exe再运行sct_c_mem.exe连接服务端。
以下测试在sct_local_mem.exe上,经测试通过网络速度对这部分插入测试几乎没有影响。
首先构造数据表
create table test(id u32(false), name string(true), date date(true), value float(true));
insert使用数据库序列函数seq可以直接生成序列。
insert into test (id, name, date, value) select seq(100000), constants("张三",100000), constants (date(),100000), seq(100000)+1.0;
执行时间:
execute time: 743390 us 134518条每秒
使用
select "insert into test (id,name,date,value) values(" + x2str(id) + ",\"" + name + "\",\"" + x2str(date) + "\"," + x2str(value) + ");" as sql from test export as csv path="test.sql";
生成sql文件。去除第一行
Sql文件内容为100000行
insert into test(id, name, date, value) values(0,"张三","2020-11-12",1.000000);insert into test(id, name, date, value) values(1,"张三","2020-11-12",2.000000);insert into test(id, name, date, value) values(2,"张三","2020-11-12",3.000000);insert into test(id, name, date, value) values(3,"张三","2020-11-12",4.000000);
…
使用exec 执行sql文件
exec "test.sql"
执行时间:
execute time: 12597752 us 7938条每秒
使用import加载csv时间
select * from test export as csv path="test.csv";import test from csv path="test.csv";
执行时间:
execute time: 875321 us 114285条每秒
对应百万结果:
insert select 时间: execute time: 7906557 us 126422 条每秒
exec 时间: execute time: 125150944 us 7990条每秒
import time: execute time: 9379922 us 106610 条每秒
大体上可以看出时间上是亚线性关系稳定的增加。
查询测试(仅在1000000数据下):
select id,date from test where first 100;
execute time: 447 us
select id,date from test where first 10000;
execute time: 7067 us
select id,date from test where id==10000;
execute time: 345 us
查询速度可以媲美nosql数据库
硬盘数据库
构造表
create table test(id u32(false), name string16(true), date date(true), value float(true));
insert插入数据
insert into test (id, name, date, value) select seq(100000), constants(“张三”,100000), constants (date(),100000), seq(100000)+1.0;
执行时间:
execute time: 247098217 us 平均404条每秒
exec sql执行时间:
exec "test.sql";
execute time: 274124784 us 平均364条每秒
数据无import命令使用load命令替代
load test from csv path="test.csv";
load执行时间:
execute time: 2055357 us 平均48543 条每秒
百万insert和exec时间比较长就没有测试,只测试load
load执行时间:
execute time: 18544048 us 平均54054条每秒
查询测试(仅在1000000数据下):
select id,date from test where first 100;
execute time: 1256 us
select id,date from test where first 10000;
execute time: 59253 us
select id,date from test where id==10000;
execute time: 465 us
结论
整体看对比内存数据库硬盘直接insert语句插入速度慢了20倍左右。
load/import导入数据比内存数据库只慢了一倍左右。
查询速度少量查询慢了约一倍,查询越多速度慢的越多。
内存数据库速度上优势很明显,数据库产品整体上性能比较稳定,查询性能非常出色。适合多读少写的业务场景。
更新一下:
后来技术服务人员告诉我们说插入是默认不启用写缓存的,启用写缓存后我又测试了一下插入速度,大约提升了四倍左右性能,2000条左右每秒,和其它数据库性能差不多。
百万级海量数据内存数据库和数据库的性能对比相关推荐
- OPPO百万级高并发MongoDB集群性能数十倍提升优化实践
点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 1. 背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低), ...
- 百万excel导入mysql_百万级xlsx表格导入数据库的实现方案
需求是这样的,供应商给到一份 xlsx 表格(144MB),里面刚好有 100w 行数据(11列).我需要把它们稍作处理后写入到 mysql 数据库 项目基于 Laravel,既然需要稍作处理,那我首 ...
- mongodb每秒写入量_OPPO百万级高并发MongoDB集群性能数十倍提升优化实践
本文是"我和MongoDB的故事"MongoDB征文比赛的一等奖文章,杨亚洲也到2019年MongoDB中文社区年终盛会进行了现场分享.接下来我们一起来欣赏下完整版内容. 1 背景 ...
- php beego,MixPHP 2.2 / Beego 1.12 数据库查询性能对比
质疑的点 本次主要质疑的是:测试没有数据库查询:大家觉得加上 db 查询会很不一样,但是我认为基准测试 hello world 代表天花板,还是有一些意义的,db 查询性能方便我猜测 mix 与 be ...
- 一台mysql并发能力_mysql怎么支撑百万级并发-对于同一个表,MySQL支持多少个并发操作...
到服务器的SQL最大并发连接数为16384.mysql百万级数据查询. 受服务器配置和网络环境的限制,实际服务器支持的并发连接数量会更小. MySQL流量大,并发问题高 因为mysql是一个线程的连接 ...
- 百万级数据量,千万级数据量是多少,海量数据的优化方案
百万级数据量,千万级数据量是多少? 这里的百万级,千万级,针对数据库,指的是表的数据条数.有时也指并发事务量. 海量数据的优化方案 Note: 具体优化要结合自身的业务特性 百万级: 这个数据量 ...
- 千万级并发架构下如何提高数据库存储性能
如图所示,表示发起一个请求时,涉及到数据库的相关操作,在前面的文章中我们说过,如果服务端要提升整体的吞吐量,就必须要减少每一次请求的处理时长,那么在当前这个场景中,数据库层面哪些因素会影响到性能呢? ...
- mysql 百万级数据库优化方案【转】
一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断 ...
- 总结:如何使用redis缓存加索引处理数据库百万级并发
前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...
最新文章
- 计算机无法搜索本地文件,电脑本地磁盘无法搜索文件。怎么处理?
- opengl微发展理解
- 信息学奥赛一本通(1220:单词接龙)
- Android笔记 simpleAdapter demo
- java hibernate 多对多_hibernate 多对多映射配置详解
- Delphi实现带有格式的Excel导出功能
- elementui的表格在使用v-if之后列的顺序错乱问题
- 【Java爬虫】接口模拟微信公众号登录,搜索公众号,获取公众号文章,java实现
- Chrome扩展之书签
- 吴恩达深度学习环境配置
- minecraft服务器stats文件夹,《我的世界》文件夹目录作用讲述
- wps/excel 正则表达式 提取数字
- 年薪50万的Python工程师曝光公司面试题
- JAVA打印简易版日历
- 如何开始用Python编程
- 学WEB前端开发,自学还是培训靠谱
- 标准化和归一化,请勿混为一谈,透彻理解数据变换
- 生成化学表达式下标、上标数字
- centos7防火墙端口设置
- 微信小程序 - (广告、优惠券)弹出与关闭