• 从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

  • 相关阅读:
    Linux 清理boot分区
    Linux 虚拟内存
    使用mongoskin操作MongoDB
    nodejs操作session和cookie
    nodejs接收get参数和post参数
    Tomcat--在IDEA创建Java Web项目,通过tomcat启动
    Tomcat--配置
    Mac安装Tomcat
    XML--解析
    XML--约束
  • 原文地址:https://www.cnblogs.com/si812cn/p/4042664.html
Copyright © 2020-2023  润新知