从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  <</span> events_to_redis.sql | redis-cli --pipe 

原文地址:http://tech.it168.com/a2013/0806/1517/000001517449.shtml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值