데이터 베이스 MySQL 튜토리얼 从MySQL到Redis,提升数据迁移的效率

从MySQL到Redis,提升数据迁移的效率

Jun 07, 2016 pm 04:34 PM
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 
<p style="margin-top:20px;margin-left:70px;line-height:24px;border:1px solid #ccc;text-align:center;width:545px;background:#fff">
</p><p style="font-size: 16px; font-family: Verdana;background:#d20; color:#fff;float:left;margin-left:-70px; border-radius: 10px 0 10px 0; padding: 3px 12px 4px;line-height:32px;margin-top:14px;">42区 VPS</p>
<p class="42quad" style="padding: 23px; font-size:14px;font-family: Trebuchet MS;text-align;center;">
42qu.com 云主机 , 卖给创业的你 。 点击这里 , 查看详情
</p>

<p style="margin:0;padding:0;height:1px;overflow:hidden;">
    <img src="/static/imghw/default1.png" data-src="http://www.68idc.cn/help/uploads/allimg/150130/06061115c-0.png" class="lazy" alt="无觅相关文章插件,快速提升流量"   style="max-width:90%"></p>
<img  src="/static/imghw/default1.png" data-src="http://www1.feedsky.com/t1/723917543/nosqlfan/feedsky/s.gif?r=http://blog.nosqlfan.com/html/4144.html" class="lazy" border="0"    style="max-width:90%" style="position:absolute"  style="max-width:90%" alt="从MySQL到Redis,提升数据迁移的效率" >
<br>
<b>Warning</b>:  call_user_func_array() expects parameter 1 to be a valid callback, function 'embed_rssfooter' not found or invalid function name in <b>/home/b55/htdocs/blog.nosqlfan.com/wp-includes/plugin.php</b> on line <b>166</b><br>
<img  src="/static/imghw/default1.png" data-src="http://www1.feedsky.com/t1/723917543/nosqlfan/feedsky/s.gif?r=http://blog.nosqlfan.com/html/4144.html" class="lazy" border="0"    style="max-width:90%" style="position:absolute"  style="max-width:90%" alt="从MySQL到Redis,提升数据迁移的效率" >
    


로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

MySQL 및 Phpmyadmin : 핵심 기능 및 기능 MySQL 및 Phpmyadmin : 핵심 기능 및 기능 Apr 22, 2025 am 12:12 AM

MySQL 및 Phpmyadmin은 강력한 데이터베이스 관리 도구입니다. 1) MySQL은 데이터베이스 및 테이블을 작성하고 DML 및 SQL 쿼리를 실행하는 데 사용됩니다. 2) PHPMYADMIN은 데이터베이스 관리, 테이블 구조 관리, 데이터 운영 및 사용자 권한 관리에 직관적 인 인터페이스를 제공합니다.

Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Apr 19, 2025 pm 11:36 PM

Redis 캐싱 솔루션은 제품 순위 목록의 요구 사항을 어떻게 인식합니까? 개발 과정에서 우리는 종종 a ... 표시와 같은 순위의 요구 사항을 처리해야합니다.

Redis의 역할 : 데이터 저장 및 관리 기능 탐색 Redis의 역할 : 데이터 저장 및 관리 기능 탐색 Apr 22, 2025 am 12:10 AM

Redis는 데이터 저장 및 관리에서 핵심적인 역할을하며 여러 데이터 구조 및 지속 메커니즘을 통해 현대 애플리케이션의 핵심이되었습니다. 1) Redis는 문자열, 목록, 컬렉션, 주문 컬렉션 및 해시 테이블과 같은 데이터 구조를 지원하며 캐시 및 복잡한 비즈니스 로직에 적합합니다. 2) RDB와 AOF의 두 가지 지속 방법을 통해 Redis는 신뢰할 수있는 스토리지 및 데이터의 빠른 복구를 보장합니다.

MySQL에서 외국 키의 목적을 설명하십시오. MySQL에서 외국 키의 목적을 설명하십시오. Apr 25, 2025 am 12:17 AM

MySQL에서 외국 키의 기능은 테이블 간의 관계를 설정하고 데이터의 일관성과 무결성을 보장하는 것입니다. 외국 키는 참조 무결성 검사 및 계단식 작업을 통해 데이터의 효과를 유지합니다. 성능 최적화에주의를 기울이고 사용할 때 일반적인 오류를 피하십시오.

MySQL 및 Mariadb를 비교하고 대조하십시오. MySQL 및 Mariadb를 비교하고 대조하십시오. Apr 26, 2025 am 12:08 AM

MySQL과 Mariadb의 주요 차이점은 성능, 기능 및 라이센스입니다. 1. MySQL은 Oracle에 의해 개발되었으며 Mariadb는 포크입니다. 2. MariaDB는 높은 하중 환경에서 더 나은 성능을 발휘할 수 있습니다. 3. Mariadb는 더 많은 스토리지 엔진과 기능을 제공합니다. 4.MySQL은 듀얼 라이센스를 채택하고 MariaDB는 완전히 오픈 소스입니다. 선택할 때 기존 인프라, 성능 요구 사항, 기능 요구 사항 및 라이센스 비용을 고려해야합니다.

함수와 정규식이 포함 된 JavaScript 객체를 데이터베이스에 안전하게 저장하고 복원하는 방법은 무엇입니까? 함수와 정규식이 포함 된 JavaScript 객체를 데이터베이스에 안전하게 저장하고 복원하는 방법은 무엇입니까? Apr 19, 2025 pm 11:09 PM

프론트 엔드 개발에서 JSON의 기능과 정규 표현식을 안전하게 처리하면 JavaScript가 종종 필요합니다 ...

SQL vs. MySQL : 둘 사이의 관계를 명확히합니다 SQL vs. MySQL : 둘 사이의 관계를 명확히합니다 Apr 24, 2025 am 12:02 AM

SQL은 관계형 데이터베이스를 관리하는 표준 언어이며 MySQL은 SQL을 사용하는 데이터베이스 관리 시스템입니다. SQL은 CRUD 작업을 포함한 데이터베이스와 상호 작용하는 방법을 정의하는 반면 MySQL은 SQL 표준을 구현하고 저장 프로 시저 및 트리거와 같은 추가 기능을 제공합니다.

다중 노드 환경에서 Spring Boot의 @scheduled 타이밍 작업이 하나의 노드에서만 실행되는지 확인하는 방법은 무엇입니까? 다중 노드 환경에서 Spring Boot의 @scheduled 타이밍 작업이 하나의 노드에서만 실행되는지 확인하는 방법은 무엇입니까? Apr 19, 2025 pm 10:57 PM

다중 노드 환경에서 스프링 부츠 타이밍 작업을위한 최적화 솔루션이 스프링을 개발하고 있습니다 ...

See all articles