MySQL每秒57万的写入,带你飞~

简介:

一、需求

一个朋友接到一个需求,从大数据平台收到一个数据写入在20亿+,需要快速地加载到MySQL中,供第二天业务展示使用。

二、实现再分析

对于单表20亿, 在MySQL运维,说真的这块目前涉及得比较少,也基本没什么经验,但对于InnoDB单表Insert 如果内存大于数据情况下,可以维持在10万-15万行写入。 但很多时间我们接受的项目还是数据超过内存的。 这里使用XeLabs TokuDB做一个测

三、XeLabs TokuDB介绍

项目地址: https://github.com/XeLabs/tokudb

相对官方TokuDB的优化:

 ●  内置了jemalloc 内存分配;
 ●  引入更多的内置的TokuDB性能指标;
 ●  支持Xtrabackup备份;
 ●  引入ZSTD压缩算法;

 ●  支持TokuDB的binlog_group_commit特性;

四、测试表

TokuDB核心配置:

558571711efc79b3f51891492b1cc31008be023f

表结构:

5063b3cb19de9b008cd98d0e3f47aa0064593a5b

利用load data写入数据:

3cbcc47f401e4cde2a88e4fa08ed2bfae948955c

计算一下每秒写入速度:

852418fa2ff14f73e52a27e24084aaf2a2c223d5

文件大小:

1f836de76c0ca6980549020118f8009ca39723e0

实际文件8.5G,写入TokuDB大小3.5G,只是接近于一半多点的压缩量。 对于20亿数据写入,实际测试在58分钟多点就可以完成。可以满足实际需求,另外对于磁盘IO比较好的机器(SSD类盘,云上的云盘),如果内存和数据差不多情况,这量级数据量测试在Innodb里需要添加自增列,可以在3个小多一点完成。 从最佳实战上来看,Innodb和TokuDB都写入同样的数据,InnoDB需要花大概是TokuDB3-4倍时间。文件大小区别,同样20亿数据:

8678afb5ad34d894573cfd7a0fdf21d5af0cd118

文件大小在5倍大小的区别。

测试结论:

利用TokuDB在某云环境中8核8G内存,500G高速云盘环境,多次测试可以轻松实现57万每秒的写入量。

另外测试几种场景也供大家参考: 如果在TokuDB中使用带自增的主键,主键无值让MySQL内部产生写入速度,下降比较明显,同样写入2亿数据,带有自建主键:

1f836de76c0ca6980549020118f8009ca39723e0

同样的数据写入在主键自增无值产生时,不能使用TokuDB的 Bulk loader data特性,相当于转换为了单条的Insert实现,所以效果上慢太多。

关于TokuDB Bulk Loader前提要求,这个表是空表,对于自增列,如自增列有值的情况下,也可以使用。 建议实际使用中,如果自增列有值的情况下,可以考虑去除自增属性,改成唯一索引,这样减少自增的一些处理逻辑,让TokuDB能跑地更快一点。 另外在Bulk Loader处理中为了追求更快速的写入,压缩方面并不是很好。

关于TokuDB Bulk Loader :

https://github.com/percona/PerconaFT/wiki/TokuFT-Bulk-Loader

五、测试环境说明

测试使用CentOS7环境,编译的XeLabs TokuDB版本百度云地址:

https://pan.baidu.com/s/1qYRyH3I 。


原文发布时间为:2018-11-21

本文作者:吴炳锡

本文来自云栖社区合作伙伴“Java后端技术”,了解相关信息可以关注“Java后端技术”。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
分布式计算 监控 数据挖掘
云上游戏数据分析实践
数据分析和游戏的生命周期与盈利息息相关,同时数据分析对游戏的运维也起到了至关重要的作用,精确的数据分析可以延长游戏的生命和帮助其盈利。本文针对游戏行业的数据特点,结合游戏数据分析的现状,对数据分析上云的技术选型、结合数加大数据计算服务MaxCompute(原ODPS)、SLS、RDS、DPC等产品和
6321 0
|
Docker 容器 Kubernetes
15分钟在笔记本上搭建 Kubernetes + Istio开发环境
11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术。很多同学来问如何上手 Kubernetes和Istio 服务网格开发。本文将帮助你利用Docker CE桌面版,15分钟在笔记本上从零搭建 Kubernetes + Istio开发环境,开启云原生之旅。
38158 0
|
存储 运维 监控
SLS:海量日志数据管理利器
日志是大规模集群管理系统中非常关键的部分,服务器上的各种日志数据可以帮助我们回答如运维、开发、运营、客服、安全等问题。SLS提供一个从日志采集、过滤、处理、聚合到在线查询的日志处理平台,满足各种日志处理分析需求。本文以用户选用SLS搭建一个端对端的日志服务为例进行详解,并解析其功能背后的技术架构。
12948 1
|
Android开发 Python Java
|
Web App开发 关系型数据库 测试技术
|
弹性计算 Java 应用服务中间件
如何使用EDAS轻量配置中心进行本地开发
轻量配置中心可以在开发者进行开发、调试、测试的过程中提供服务发现、注册和查询功能。
7645 0
|
安全 算法 Java
Android 应用防止被二次打包指南
“Android APP二次打包”则是盗版正规Android APP,破解后植入恶意代码重新打包。不管从性能、用户体验、外观它都跟正规APP一模一样但是背后它确悄悄运行着可怕的程序,它会在不知不觉中浪费手机电量、流量,恶意扣费、偷窥隐私等等行为。
5280 0
|
Kubernetes API 容器
k8s使用ServiceAccount Token的方式访问apiserver
在实际应用中经常会需要访问apiserver,下面介绍如何使用token方便访问apiserver。
7136 0
|
消息中间件 Java 数据库
SpringBoot整合RabbitMQ之典型应用场景实战二
RabbitMQ 作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、异步通信、高并发限流、超时业务、数据延迟处理等。
2674 0
|
测试技术 Linux 数据安全/隐私保护
本地测试环境搭建
为了日常更好的学习、测试,又不想付出云主机等开销,搭建一个本地测试环境无疑是个明智的选择。再结合GitHub、Jenkins、Docker等工具,进行持续集成、资源隔离,既可以快速的构建、部署自己的项目,又可以迅速的环境恢复。仔细想了一下,简直不能更好。
3214 0