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

  • 相关阅读:
    跨浏览器的事件处理程序
    jQuery提交Form
    js 多种变量定义(对象直接量,数组直接量和函数直接量)
    Asp.net Eval 截取字符串
    sql执行顺序
    IDEA File Templates模板
    Vim快捷键大全(转)
    Rider+Unity+XLua环境配置
    一定要进行代码复查
    如何在ubuntu上面安装luasocket
  • 原文地址:https://www.cnblogs.com/si812cn/p/4042664.html
Copyright © 2011-2022 走看看