您好,欢迎访问一九零五行业门户网

从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.sqlselect 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
42区 vps
42qu.com 云主机 , 卖给创业的你 。 点击这里 ,
warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'embed_rssfooter' not found or invalid function name in /home/b55/htdocs/blog.nosqlfan.com/wp-includes/plugin.php on line 166

其它类似信息

推荐信息