首頁 資料庫 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 Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver 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的顯示,但是不知道RTX3060是在一個什麼水平,其實這款顯示卡也是在一個比較主流的水平。 3060顯示卡什麼水準:答:主流水準。這款RTX3060顯示卡非常受廣大玩家的歡迎,而且也在熱賣中,其擁有RTX30的系列特有的優點,性價比非常高,對遊戲畫面要求較高的玩家可以選擇這張顯示卡。 3060顯示卡拓展介紹:幀率:被廣大玩家喜愛,擁有12GB的大顯存,非常受歡迎。在12GB的大顯存下,能夠流暢運行起3A大作無任何卡頓,幀數甚至可達到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)是一種常用的訊息摘要演算法,它能

評測麒麟9000s的表現與水平 評測麒麟9000s的表現與水平 Mar 18, 2024 pm 03:21 PM

麒麟9000s作為今年手機市場的一顆新星,備受關注。伴隨著智慧型手機市場的競爭日益激烈,作為華為公司的旗艦處理器,麒麟系列一直以來都備受矚目。而作為最新推出的一款處理器,麒麟9000s究竟表現如何,它的效能與水準又如何呢?以下將對麒麟9000s進行評測,從各方面來剖析其優劣。首先從性能方面來看,麒麟9000s採用了先進的5nm製程製造,整合了ARM最新的Co

C程式用來求出一個數的最大質因子 C程式用來求出一個數的最大質因子 Aug 27, 2023 am 10:09 AM

質因數 - 在數論中,正整數的質因數是精確整除該整數的質因數。找出這些數字的過程稱為整數分解或質因數分解。例 - 288 的質因數是:288=2x2x2x2x2

See all articles