ホームページ データベース 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

ビジュアル Web 開発ツール

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 配列をマージおよび分割する方法と、これらの操作を実装するためのヒントと例について説明します。

MySQL のデータテーブル圧縮テクノロジー MySQL のデータテーブル圧縮テクノロジー Jun 16, 2023 am 08:16 AM

MySQL は、多くの Web サイトやアプリケーションの中核コンポーネントである一般的なリレーショナル データベースです。データの量がますます大きくなるにつれて、MySQL のパフォーマンスを最適化する方法が特に重要になります。重要な領域の 1 つはデータ テーブルの圧縮です。この記事では、MySQL のデータ テーブル圧縮テクノロジを紹介します。圧縮テーブルと非圧縮テーブル MySQL には、圧縮テーブルと非圧縮テーブルの 2 種類のデータ テーブルがあります。非圧縮テーブルは MySQL のデフォルトのテーブル タイプで、固定長の行形式を使用してデータを格納します。これはデータを意味します

PHP ZipArchive を使用して複数の圧縮パッケージをマージおよび分割するにはどうすればよいですか? PHP ZipArchive を使用して複数の圧縮パッケージをマージおよび分割するにはどうすればよいですか? Jul 21, 2023 am 10:17 AM

PHPZipArchive を使用して複数の圧縮パッケージを結合および分割するにはどうすればよいですか?概要: 開発プロセス中、複数の圧縮パッケージを 1 つにマージしたり、圧縮パッケージを複数のパッケージに分割したりする必要がある場合があります。 PHP は、これらの操作を簡単に完了するための ZipArchive 拡張機能を提供します。この記事では、PHPZipArchiveを使用して複数の圧縮パッケージを結合および分割する方法を紹介します。複数のアーカイブを結合する まず、新しいアーカイブを作成して開く必要があります。次に、ループトラバーサルは次のようにする必要があります。

3060グラフィックスカードの性能はどうですか? 3060グラフィックスカードの性能はどうですか? Jan 27, 2024 am 10:36 AM

多くのゲーマーはグラフィックス カード 3060 に非常に興味があり、3060 ディスプレイを購入したいと考えていますが、RTX3060 がどのレベルにあるのか知りません。実際、このグラフィックス カードも比較的主流のレベルにあります。 3060 グラフィックス カードのレベルは何ですか: 回答: メインストリーム レベル。この RTX3060 グラフィックス カードは、プレイヤーの間で非常に人気があり、セールも行われており、RTX30 シリーズの独自の利点を備え、非常にコスト効率が高く、ゲーム グラフィックスに対する要求が高いプレイヤーはこのグラフィックス カードを選択できます。 3060 グラフィックス カード拡張の紹介: フレーム レート: ほとんどのプレイヤーに愛されており、12 GB の大容量ビデオ メモリを備えており、非常に人気があります。 12 GB の大容量ビデオ メモリを搭載し、AAA の傑作を遅延なくスムーズに実行でき、フレーム レートは 60 に達することもあります。お金の価値: それ

Java クローラーの入門: その基本概念と応用方法を理解する Java クローラーの入門: その基本概念と応用方法を理解する Jan 10, 2024 pm 07:42 PM

Java クローラーに関する予備調査: その基本的な概念と使用法を理解するには、具体的なコード例が必要です インターネットの急速な発展に伴い、企業や個人にとって大量のデータの取得と処理は不可欠なタスクとなっています。クローラー(WebScraping)は自動データ取得手段として、インターネット上のデータを迅速に収集できるだけでなく、大量のデータを分析・処理することができます。クローラーは、多くのデータ マイニングおよび情報検索プロジェクトにおいて非常に重要なツールとなっています。この記事では、Java クローラーの基本的な概要を紹介します。

変更された MD5 はオリジナル コンテンツとみなされますか? 変更された MD5 はオリジナル コンテンツとみなされますか? Feb 19, 2024 pm 08:04 PM

md5 を修正した後はオリジナルとみなされますか? インターネット時代では、オリジナルのコンテンツを作成することが重要な価値とリソースになりました。ただし、その後は独創性と侵害が問われます。著作権侵害や盗作を防ぐために、多くの人がさまざまな方法を使ってオリジナルの作品を保護しようとしています。一般的な方法の 1 つは、MD5 アルゴリズムを使用して作業を変更し、「アルゴリズム保護」の効果を達成することです。 MD5 (MessageDigestAlgorithm5) は、一般的に使用されるメッセージ ダイジェスト アルゴリズムです。

Kirin 9000の性能とレベルを評価する Kirin 9000の性能とレベルを評価する Mar 18, 2024 pm 03:21 PM

今年の携帯電話市場の新星として、Kirin 9000s が大きな注目を集めています。スマートフォン市場の競争が激化する中、ファーウェイのフラッグシッププロセッサとして常に注目を集めてきたKirinシリーズ。最新のプロセッサーである Kirin 9000 はどのようなパフォーマンスを発揮するのでしょうか?そのパフォーマンスとレベルはどのようなものですか?以下では、Kirin 9000 を評価し、その長所と短所をさまざまな側面から分析します。まずパフォーマンスの観点から見ると、Kirin 9000 は高度な 5nm プロセスを使用して製造され、ARM の最新の Co

トップ10グローバルデジタル仮想通貨取引プラットフォームランキング(2025権限ランキング) トップ10グローバルデジタル仮想通貨取引プラットフォームランキング(2025権限ランキング) Mar 06, 2025 pm 04:36 PM

2025年、グローバルデジタル仮想通貨取引プラットフォームは、トランザクションのボリューム、セキュリティ、ユーザーエクスペリエンスなどの指標に基づいて、2025年に世界のトップ10のデジタル通貨取引プラットフォームを激しく競争しています。 OKXは、強力な技術的強さとグローバルな運用戦略で最初にランクされており、Binanceは高流動性と低料金に密接に続きます。 Gate.io、Coinbase、Krakenなどのプラットフォームは、それぞれの利点がある最前線にいます。このリストには、Huobi、Kucoin、Bitfinex、Crypto.com、Geminiなどの取引プラットフォームがそれぞれ独自の特徴がありますが、投資は注意する必要があります。プラットフォームを選択するには、セキュリティ、流動性、料金、ユーザーエクスペリエンス、通貨選択、規制コンプライアンスなどの要因を考慮し、合理的に投資する必要があります

See all articles