涉多项改进,一步完成MySQL向Redis迁移

在把一个大表从 MySQL 迁移到 Redis 时,你可能会发现,每次提取、转换、导入一条数据是让人难以忍受的慢!这里有一个技巧,你可以通过使用管道把 MySQL 的输出直接输入到 redis-cli输入端,这可以使两个数据库都能以他们的最顶级速度来运行。

此外,子查询的性能提升也是 MySQL 5.6 的主要任务之一,5.6 中使用一种半连接(semi-joins) 和物化处理来提升子查询的执行速度,这意味着你不需要手工将包含子查询的 SQL 语句用 join 操作来替代。此外,多数修改数据结构的操作 (如 ALTER TABLE) 可在线执行,避免了数据库长时间的挂起。EXPLAIN 语句支持 UPDATE/DELETE/INSERT 语句的执行计划信息。其他关于查询的优化还包括消除在使用很小的 LIMIT 值时的表扫描。

图片 1

使用了这个技术,我把 800 万条 MySQL 数据导入到 Redis 的时间从 90 分钟缩短到了两分钟。

在复制方面,MySQL 面向行的复制支持新的 "row image control" ,只记录修改的列而不是行中所有的列,这对一些包含 BLOGs 字段的数据来说可以节省很大的处理能力,因此此项改进不仅节省了磁盘空间,同时也提升了性能。另外, "Index Condition Pushdown" 是一项新的优化措施使得查询尝试优先使用索引的字段,然后再是 WHERE 条件。

该版本的主要改进如下: 

Mysql到Redis的数据协议

MySQL 5.6 同时引入了 NoSQL 接口,提供了兼容 memcached 的 API,该特性让应用可直接访问 InnoDB 存储引擎。底层上保持着跟关系数据库引擎在维护上的统一。同时底层的 InnoDB 引擎也增强在持久化优化统计、多线程消除以及提供更多的系统表和监控数据。

mysql_upgrade改进:现在会验证编译的版本是否与服务器版本相匹配,如果不匹配则退出。可以通过--version-check 和--skip-version-checking选项来启用和禁用版本检查。

redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的。这第一步就是把Mysql查询的内容格式化成redis-cli可用的数据格式。here we go!

MySQL 的产品经理 Tomas Ulin 解释了开源社区对 Oracle 关于补丁政策的批评,他说:这是一个不断求证的过程,我们每三个月提供安全补丁,但其实大多数用户并不会这么频繁的更新。而使用社区版的用户抱怨 Oracle 没有提供发行说明中 CVE 号的详细说明,它们只是简单的指向 Oracle 内部的错误码。公司将不会发布这些详情信息。

兼容性修复:GRANT 语句如果用于一个现有的MySQL账户,可能会产生意想不到的结果。这是因为如果命名账户已经存在,则禁止使用GRANT 语句和IDENTIFIED WITH子句来创建一个新用户。

我的统计表:

MySQL 5.6 显著提高了性能和可用性,可支持下一代 Web、嵌入式和云计算应用程序。

Replication的重要变化:如果服务器使用--binlog-ignore-db参数,且SELECTDATABASE()返回null表示当前没有数据库被选择),那么以dbname.tblname格式使用完全限定表名的语句不会被写入二进制日志。

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)  ); 

MySQL Database 5.6 具备以下特性:

更多改进信息请查看英文):

准备在每行数据中执行的redis命令如下:

新增! 在线 DDL /更改数据架构支持动态应用程序和开发人员灵活性

原文地址:

HSET events_all_time [action] [count] 

新增! 复制全局事务标识可支持自我修复式集群

mysql_upgrade改进:现在会验证编译的版本是否与服务器版本相匹配,如果不匹配则退出。可以通过--version-check 和...

按照以上redis命令规则,创建一个events_to_redis.sql文件,内容是用来生成redis数据协议格式的SQL:

新增! 复制无崩溃从机可提高可用性

-- events_to_redis.sql   SELECT CONCAT(    "*4rn",    '$', LENGTH(redis_cmd), 'rn',    redis_cmd, 'rn',    '$', LENGTH(redis_key), 'rn',    redis_key, 'rn',    '$', LENGTH(hkey), 'rn',    hkey, 'rn',    '$', LENGTH(hval), 'rn',    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 

新增! 复制多线程从机可提高性能

ok, 用下面的命令执行:

新增! 对 InnoDB 进行 NoSQL 访问,可快速完成键值操作以及快速提取数据来完成大数据部署

本文由ca88手机版登录发布于亚洲城ca88手机版官网,转载请注明出处:涉多项改进,一步完成MySQL向Redis迁移

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。