从MySQL到Redis 提升数据迁移的效率

场景是从MySQL中将数据导入到Redis的Hash结构中。当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中。这样可能没什么错,但是速度会非常慢。而如果能够使MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可能就省事多了。
根据测试800w的数据迁移,时间从90分钟缩短到2分钟。
具体案例如下:

MySQL数据表结构:

CREATE TABLE events_all_time (
 id int(11) unsigned NOT NULL AUTO_INCREMENT,
 action varchar(255) NOT NULL,
 count int(11) NOT NULL DEFAULT 0,
 PRIMARY KEY (id),
 UNIQUE KEY uniq_action (action)
 ); 

Redis存储结构:

HSET events_all_time [action] [count] 

下面是重点,能过下面SQL语句将MySQL输出直接变更成redis-cli可接收的格式:

-- events_to_redis.sql

SELECT CONCAT(
 "*4\r\n",
 '$', LENGTH(redis_cmd), '\r\n',
 redis_cmd, '\r\n',
 '$', LENGTH(redis_key), '\r\n',
 redis_key, '\r\n',
 '$', LENGTH(hkey), '\r\n',
 hkey, '\r\n',
 '$', LENGTH(hval), '\r\n',
 hval, '\r'
 )
 FROM (
 SELECT
 'HSET' as redis_cmd,
 'events_all_time' AS redis_key,
 action AS hkey,
 count AS hval
 FROM events_all_time
 ) AS t

然后用管道符重定向输出即可:

mysql stats_db --skip-column-names --raw < events_to_redis.sql | redis-cli --pipe
时间: 2024-12-25 21:18:31

从MySQL到Redis 提升数据迁移的效率的相关文章

从MySQL到Redis,提升数据迁移的效率

做开发的同学都知道,一旦设计到底层存储优化,数据结构甚至数据库的变更,通常都会进行数据迁移的工作.如果系统运行时间过长,数据迁移的数量可能非常庞大.这时候,如何进行高效的数据迁移,实际也是上线质量的直接影响因素之一. 下面内容是转载的一个小技巧(原文),无法适用于各种变化的场景,仅供大家参考. 场景是从MySQL中将数据导入到Redis的Hash结构中.当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中.这样可能没什么错,但是速度会非常慢.而如果能够使MySQL的查询输出数据直

简述MySQL分片中快速数据迁移_Mysql

推荐阅读:MySQL 数据库跨操作系统的最快迁移方法 mysql 备份与迁移 数据同步方法 操作实践背景: travelrecord表定义为10个分片,尝试将10个分片中的2个分片转移到第二台MySQL上,并完成记录, 要求最快的数据迁移做法,中断业务时间最短 思路一利用mysqldump: 在这里我们只针对mysql innodb engine,而且配置bin-log的数据库进行分析.因为是将10个分片中的两个分片进行迁移,其实就是数据库的迁移过程,就是将10个数据库中的两个数据迁移到另外一台

从MySQL到Redis的简单数据库迁移方法_Redis

 从mysql搬一个大表到redis中,你会发现在提取.转换或是载入一行数据时,速度慢的让你难以忍受.这里我就要告诉一个让你解脱的小技巧.使用"管道输出"的方式把mysql命令行产生的内容直接传递给redis-cli,以绕过"中间件"的方式使两者在进行数据操作时达到最佳速度. 一个约八百万行数据的mysql表,原本导入到redis中需要90分钟,使用这个方法后,只需要两分钟.不管你信不信,反正我是信了. Mysql到Redis的数据协议 redis-cli命令行工具

如何基于MySQL及Redis搭建统一的kv存储服务 | 秦波

一.MySQL+Redis常用部署方式 1.1  拓扑 1.2  特点 业务层通过双写同时写MySQL及Redis.读通常在Redis,若读取不到,则从MySQL读取,然后将数据同步到Redis,Redis通常设置expire或者默认LRU进行数据淘汰. 这种使用方式会有如下问题: 1)MySQL及Redis存在数据不一致风险,尤其是长时间运行的系统 2)业务层需要处理MySQL sql schema与Redis kv数据结构上的逻辑差异 3)无统一运维 4)无法方便扩容/缩容 二.KV化的存储

惠普CEO:Moonshot服务器提升数据中心效率

[天极网服务器频道12月12日消息]近日在HP Discover大会上惠普http://www.aliyun.com/zixun/aggregation/32086.html">首席执行官梅格·惠特曼(Meg Whitman)表示惠普Moonshot微服务器在能耗和成本上能够显著提升数据中心的效率.Moonshot微服务器能够针对特定的工作负载实现高密度的服务器集群. 惠特曼称在云计算.大数据和移动互联的影响下IT技术面临前所未有的变革,到2016年,75%的IT环境将处于私有云.公有云和

老司机的 redis 数据迁移笔记

老服务器上内存一直报警,所以要把一部分redis数据迁移到新服务器上去. 迁移的方式有两种,一种是停服务器,搬迁数据:另一种通过主从同步转移. 停服务器,搬迁数据 首先在原服务器上执行redis-cli shutdown命令,该命令会触发保证写RDB文件以及将AOF文件写入磁盘,不会丢失数据. 如果是kill -9 pid就会丢失数据. 然后将RDB文件和AOF文件都拷贝到新服务器上,注意需要与redis.conf文件中指定RDB文件名和AOF文件名匹配. 最后在新服务器上启动redis服务器.

SQL Server 7.0 的数据迁移到MySQL上的一种方法

mysql|server|数据 Microsoft SQL Server 7.0 的数据迁移到MySQL上的方法 Zhbforce   想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示-,但是这只用到了Office系列产品的很少的一部分功能.据调查,绝大部分用户只用到了Office产品的20%的功能,很少有人注意到Visual Basic for Application.实际上,熟悉掌握VBA的功能可以使你的工作事半功倍,尤其对会计.金融等专业来

教你实现MySQL表数据迁移自动化

一.背景 之前我写过关于SQL Server的数据迁移自动化的文章:SQL Server 数据库迁移偏方,在上篇文章中设计了一张临时表,这个临时表记录搬迁的配置信息,用一个存储过程读取这张表进行数据的迁移,再由一个Job进行迭代调用这个存储过程. 在这次MySQL的实战中,我的数据库已经做了4个分片,分布在不同的4台机器上,每台机器上的数据量有1.7亿(1.7*4=6.8亿),占用空间260G(260*4=1040G),这次迁移的目的就是删除掉一些历史记录,减轻数据库压力,有人说这为什么不使用表

如何将SQL Server数据迁移到MySQL

一.背景 由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL:由于涉及的表比较多,所以想在MySQL中生成对应表并导入数据: 上网找了些资料,如:将ACCESS和MSSQL导入MYSQL中.MySQL Migration 实现 MSSQL 到 MySQL数据迁移,虽然不知道里面的做法是否可以成功转移,但是里面的过程比较复杂,没有去尝试,后来自己找到了方法,最重要就是简单和准确(暂时没发现明显的BUG),这里