데이터 베이스 MySQL 튜토리얼 [原创]数据表的水平拆分(1) 初探分库分表

[原创]数据表的水平拆分(1) 初探分库分表

Jun 07, 2016 pm 04:32 PM
지점 도서관 하위 테이블 예비 탐사 원래의 나뉘다 데이터 시트 수준

当一个数据表数据量非常大的时候,查询会变得非常慢。 一般来说MySQL达到千万条以后(视情况而定,查询较少的表可能会稍好一点), 所以就要尝试分库分表, 就是所谓的数据库水平拆分。 水平拆分最重要的一点是按照什么 分表 .先不说理论,先看下边实例 用户

          当一个数据表数据量非常大的时候,查询会变得非常慢。 一般来说MySQL达到千万条以后(视情况而定,查询较少的表可能会稍好一点), 所以就要尝试分库分表, 就是所谓的数据库水平拆分。
水平拆分最重要的一点是按照什么分表. 先不说理论,先看下边实例

用户表 user( uname-用户名,唯一 upwd- 密码 unickname-昵称)
用户信息表 user_info (uname-用户名,外键 tel-电话 email-邮箱 ......)

          假设我们有好多好多数据, 有可能上亿条,甚至十亿 百亿(绝对是史上最大的用户表了),我们怎么分这个数据表?
          按照什么分表? 当然 uname 是最佳的选择。 不为什么,就因为我们查询的时候最有可能用到这个字段做为唯一查询条件: select * from user where uname='XXX';
          方案1:
                按照用户名的最后两位来分表。用户名 hello 的用户就存在 user_lo 里边 , 用户名是world 的就存在 user_ld 里, 这样做的好处是:
                       1. 按照用户名有这样一个散列规则,如果知道用户名的话, 经过我们的散列规则算法一下就确定了数据保存在那张数据表中, 不需要再搜索
                       2. 数据表中的数据也基本的平均, 理论上边每个组合的用户名后两位是平均分布的(事实上是有差别的, 如果是自增的数字ID的话是基本上平均的),达到了我们分库分表的初衷
                但是这种算法也是有缺点的:
                      1. 数据表的组合从user_aa 到 user_zz (假如全由字母组成, 不区分大小写), 有 26*26张数据表, 数据表个数是固定的, 如果后期发现有些数据表的数据又比较多了, 要扩展的话就比较难了。
                      2. 统计起来比较困难。 要查询某一个时间段注册的用户, 这样的就比较困难了,这样的话就必须查询每一张数据表然后把结果合并起来。

             再来看另外一个例子: 订单。 大家可以发现京东上边是这样做的, 京东上边默认查询的是当月的订单, 然后所有的订单是另外查询的(卓越亚马逊等其他网站也有好多这么做的)。他们的分表应该是这样的, 数据肯定是要按月分的,你所有的订单他就让你再点一下才可以查到。我们模拟一下:
             因为用户只能查到自己的订单, 所以按照用户分表还是必要的, 对于京东来说,按照用户来分还不足以应付这么多的数据量, 所以我们就用一个更复杂一点的散列规则, 按照用户名和日期组合分表:
             order_date_name date 表示日期, name 表示用户名的后两位, 比如我这个月订单的数据表就存在 order_201103_ng, 根据我的名字 查询我当月的订单就去这帐数据表中查询, 查询我的所有订单就去 show tables like 'order_%_ng'; 我把的名字后缀的表先取出来, 然后再去 查询这些数据表, 最后合并结果。
             当然你可能会问, 后台统计的时候是不是太麻烦了, 我可以很负责地告诉你: 是! 这个没办法, 后台取统计数据的话可以延迟个几分钟, 老板不会说你, 但是如果让前台用户等级分钟老板绝对饶不了你!
             总之数据拆分的精髓就在于,根据实际情况将数据按照最合适的规则存储在不同的数据表中,尽量避免多个数据表的数据合并
             更多数据拆分的东西我们以后再讨论, 敬请继续关注我的博客,谢谢!

声明: 本文采用 CC BY-NC-SA 3.0 协议进行授权

转载请注明来源:小景的博客

本文链接地址:http://www.phpv5.com/blog/archives/109/

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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)

빠르게 시작하기: Java의 JSON 배열 병합 및 분할 기술. 빠르게 시작하기: Java의 JSON 배열 병합 및 분할 기술. Sep 06, 2023 am 10:21 AM

빠르게 시작하기: Java의 JSON 배열 병합 및 분할 기술 현대 소프트웨어 개발에서는 데이터 형식과 전송이 점점 더 중요해지고 있습니다. 그중 JSON(JavaScriptObjectNotation)은 일반적으로 사용되는 데이터 형식으로 특히 프런트엔드 및 백엔드 상호 작용과 데이터 저장에 적합합니다. Java 개발에서는 JSON 객체와 JSON 배열을 처리해야 하는 경우가 많습니다. 이 문서에서는 Java에서 JSON 배열을 병합하고 분할하는 방법과 이러한 작업을 구현하기 위한 팁 및 예제를 설명합니다.

3060 그래픽카드 성능은 어떤가요? 3060 그래픽카드 성능은 어떤가요? Jan 27, 2024 am 10:36 AM

많은 게이머들이 그래픽 카드 3060에 대해 매우 궁금해하고 3060 디스플레이를 구입하고 싶어하지만 RTX 3060이 어느 수준인지는 사실 잘 모릅니다. 사실 이 그래픽 카드도 비교적 주류 수준입니다. 3060 그래픽 카드의 수준은 무엇입니까: 답변: 주류 수준. 이 RTX3060 그래픽 카드는 플레이어들 사이에서 매우 인기가 높으며 판매 중입니다. RTX30 시리즈의 고유한 장점을 가지고 있으며 게임 그래픽에 대한 요구 사항이 더 높은 플레이어는 이 그래픽 카드를 선택할 수 있습니다. 3060 그래픽 카드 확장 소개: 프레임 속도: 12GB의 대용량 비디오 메모리를 갖추고 있어 대다수의 플레이어에게 사랑받고 있습니다. 12GB의 대용량 비디오 메모리로 AAA 명작을 지연 없이 원활하게 실행할 수 있으며 프레임 속도는 60까지 도달할 수 있습니다. 가격 대비 가치: 이

MySQL의 데이터 테이블 압축 기술 MySQL의 데이터 테이블 압축 기술 Jun 16, 2023 am 08:16 AM

MySQL은 많은 웹사이트와 애플리케이션의 핵심 구성 요소인 공통 관계형 데이터베이스입니다. 데이터의 양이 점점 더 많아질수록 MySQL의 성능을 최적화하는 방법이 특히 중요해집니다. 핵심 영역 중 하나는 데이터 테이블 압축입니다. 이 기사에서는 MySQL의 데이터 테이블 압축 기술을 소개합니다. 압축된 테이블과 압축되지 않은 테이블 MySQL에는 압축된 테이블과 압축되지 않은 테이블이라는 두 가지 유형의 데이터 테이블이 있습니다. 압축되지 않은 테이블은 고정 길이 행 형식을 사용하여 데이터를 저장하는 MySQL의 기본 테이블 유형입니다. 이는 데이터를 의미합니다.

PHP ZipArchive를 사용하여 여러 압축 패키지를 병합하고 분할하는 방법은 무엇입니까? PHP ZipArchive를 사용하여 여러 압축 패키지를 병합하고 분할하는 방법은 무엇입니까? Jul 21, 2023 am 10:17 AM

PHPZipArchive를 사용하여 여러 압축 패키지를 병합하고 분할하는 방법은 무엇입니까? 개요: 개발 프로세스 중에 여러 압축 패키지를 하나로 병합하거나 압축 패키지를 여러 패키지로 분할해야 하는 경우가 있습니다. PHP는 이러한 작업을 쉽게 완료할 수 있도록 ZipArchive 확장을 제공합니다. 이 기사에서는 PHPZipArchive를 사용하여 여러 압축 패키지를 병합하고 분할하는 방법을 소개합니다. 여러 아카이브 병합 먼저 새 아카이브를 생성하고 열어야 합니다. 그런 다음 루프 순회는 다음과 같아야 합니다.

Java 크롤러 시작하기: 기본 개념 및 적용 방법 이해 Java 크롤러 시작하기: 기본 개념 및 적용 방법 이해 Jan 10, 2024 pm 07:42 PM

Java 크롤러에 대한 사전 연구: 기본 개념과 용도를 이해하려면 구체적인 코드 예제가 필요합니다. 인터넷의 급속한 발전으로 인해 대량의 데이터를 획득하고 처리하는 것은 기업과 개인에게 필수적인 작업이 되었습니다. 크롤러(WebScraping)는 자동화된 데이터 수집 방법으로 인터넷상의 데이터를 빠르게 수집할 수 있을 뿐만 아니라 대량의 데이터를 분석하고 처리할 수도 있습니다. 크롤러는 많은 데이터 마이닝 및 정보 검색 프로젝트에서 매우 중요한 도구가 되었습니다. 이 기사에서는 Java 크롤러의 기본 개요를 소개합니다.

수정된 MD5는 원본 콘텐츠로 간주됩니까? 수정된 MD5는 원본 콘텐츠로 간주됩니까? Feb 19, 2024 pm 08:04 PM

MD5를 수정하면 원본으로 간주되나요? 인터넷 시대에 독창적인 콘텐츠를 만드는 것은 중요한 가치이자 자원이 되었습니다. 그러나 다음은 독창성과 침해성에 대한 의문이다. 불법 복제 및 표절을 방지하기 위해 많은 사람들은 원본 저작물을 보호하기 위해 다양한 방법을 사용하려고 합니다. 일반적인 방법 중 하나는 MD5 알고리즘을 사용하여 작업을 수정하여 "알고리즘 보호" 효과를 얻는 것입니다. MD5(MessageDigestAlgorithm5)는 일반적으로 사용되는 메시지 다이제스트 알고리즘입니다.

Kirin 9000s의 성능과 수준을 평가해 보세요. Kirin 9000s의 성능과 수준을 평가해 보세요. Mar 18, 2024 pm 03:21 PM

올해 휴대폰 시장의 새로운 스타로 자리잡은 기린 9000s가 많은 주목을 받았다. 스마트폰 시장의 경쟁이 점점 치열해지면서 Huawei의 주력 프로세서인 Kirin 시리즈는 항상 많은 관심을 받아왔습니다. 최신 프로세서인 Kirin 9000s의 성능과 수준은 어떻습니까? 다음은 Kirin 9000s를 평가하고 다양한 측면에서 장점과 단점을 분석해 보겠습니다. 우선, 성능 측면에서 Kirin 9000s는 고급 5nm 공정을 사용하여 제조되었으며 ARM의 최신 Co를 통합했습니다.

숫자의 가장 큰 소인수를 찾는 C 프로그램 숫자의 가장 큰 소인수를 찾는 C 프로그램 Aug 27, 2023 am 10:09 AM

소인수−수론에서 양의 정수의 소인수는 정확히 소수로 나누어지는 소수입니다. 이 숫자를 찾는 과정을 정수 인수분해 또는 소인수분해라고 합니다. 예−288의 소인수는 다음과 같습니다: 288=2x2x2x2x2

See all articles