zoukankan      html  css  js  c++  java
  • 从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 ”,
    ‘$’, LENGTH(redis_cmd), ‘ ’,
    redis_cmd, ‘ ’,
    ‘$’, LENGTH(redis_key), ‘ ’,
    redis_key, ‘ ’,
    ‘$’, LENGTH(hkey), ‘ ’,
    hkey, ‘ ’,
    ‘$’, LENGTH(hval), ‘ ’,
    hval, ‘ ’
    )
    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

  • 相关阅读:
    截取字符串的值
    Tomcat发布项目方法
    struts标签
    正则表达式范例
    树的操作方法
    树结点动态帮定事件
    I/O 流和对象序列化
    Word中的字体大小
    script实现的日期表示
    JavaScript弹出窗口技巧
  • 原文地址:https://www.cnblogs.com/si812cn/p/4042664.html
Copyright © 2011-2022 走看看