MySQL分庫分表方案

  • 1. MySQL分庫分表方案
    • 1.1. 問題:
    • 1.2. 回答:
      • 1.2.1. 最好的切分MySQL的方式就是:除非萬不得已,否則不要去干它。
      • 1.2.2. 你的SQL語句不再是聲明式的(declarative)
      • 1.2.3. 你招致了大量的網絡延時
      • 1.2.4. 你失去了SQL的許多強大能力
      • 1.2.5. MySQL沒有API保證異步查詢返回順序結果
      • 1.2.6. 總結

MySQL分庫分表方案

翻譯一個stackoverflow上的問答,關于分庫分表的缺點的,原文鏈接:?
MySQL sharding approaches?

問題:

什么是最好的MySQL分庫分表方案?我想到的有:

  1. 應用層切分?
  2. MySQL代理層切分?
  3. 提供查找數據庫分片的中心服務?

你們知道任何這方面有趣的項目或者工具嗎?

回答:

最好的切分MySQL的方式就是:除非萬不得已,否則不要去干它。

當你寫一個應用時,你通常都想要最快的開發速度。只有必要時,你才開始優化延時,提高吞吐量,

你切分數據庫的原因無非因為數據庫的讀或者寫

  • 數據庫寫
    寫操作永久的超過了服務器的磁盤負載;太多寫入導致副本同步永遠的落后了。
  • 數據庫讀
    讀取到的數據量太大以至于稱爆內存;并且大多數讀操作開始直擊磁盤而不是從內存中讀取數據。

只有這時,你才需要考慮做數據庫切分。

當你開始切分后,你開始以下面幾種方式支付代價:

你的SQL語句不再是聲明式的(declarative)

一般的,你用SQL語句告訴數據庫你要什么數據,然后讓優化器優化SQL,并將SQL轉化成數據獲取程序。
這很棒,因為它非常靈活,而且寫這些轉化程序很無聊,嚴重影響開發速度。

分布式環境下,你將A節點的表和B節點的表進行join,甚至有些表的數據大到超過一個節點,
在A節點和B節點將數據join起來,然后將B節點和C節點join后的數據再次聚合。
你開始寫單方面的hash應用程序來解決這個問題(或者你可以再造MySQL的集群),
這表示結果你得到一大堆的非聲明式的SQL,而且讓程序以一種面向過程的方式開始工作

你招致了大量的網絡延時

一般的,一條SQL查詢語句可以本地解決并且通過優化器以最小的耗時解決這個查詢問題。

在分布式環境下,查詢語句必須要通過KV映射,訪問多個網絡節點(希望是批量訪問,
而不是每個Key都來一次網絡往返),或者將WHERE條件放在他們將被執行的節點上。

但是即使在最好的情況下,涉及到多個網絡訪問都會更加復雜。特別是MySQL的優化器完全不知道網絡延時的情況。

你失去了SQL的許多強大能力

好吧,這或許沒那么重要,但是外鍵約束,其他保證數據完整性的SQL機制,對于跨多個節點是無能為力的。

MySQL沒有API保證異步查詢返回順序結果

當相同類型的數據存放在多個節點上(比如用戶數據存放在A,B,C節點上),水平查詢需要訪問所有節點,
數據訪問時間直接因以節點數線性增長。除非多個節點是以并行方式訪問,然后再以Map-Reduce的方式聚合。

前提是需要提供異步通信的API,但這并不存在于MySQL提供的功能中。可選的方案是在子進程中增加很多的forking和連接。

總結

當你開始做數據庫分庫分表,數據結構和網絡拓撲明顯影響到應用的性能。?
為了運行良好,你的應用需要當心這些事情,所以只有應用層的切分才有意義。

如果需要自動切分,問題會更多(比如決定那個節點的那個列作為hash主鍵),或者
你想要手動進行切分,xyz用戶去這個主庫上,abc去和def去到那個主庫上。

業務功能上的切分有些好處,如果做對了,這對絕大部分開發人員是透明的。因為所有相關的表都存放在本地。?
這讓程序的透明性可以從聲明式的SQL中盡量受益,并且有更少的網絡延時,因為跨節點的網絡訪問被保持到最小化。

業務功能上的切分的缺點是:它不能準許單個表的數據膨脹過大,這需要設計者的特別注意。

業務功能切分的好處是:針對一個并沒有太多改變的代碼庫,它相對而言非常簡單。?
Booking.com在過去幾年進行過幾次業務功能上的分庫分表,并且一直工作的很好。

轉載于:https://www.cnblogs.com/405845829qq/p/7552750.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391340.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux創建sudo用戶_Linux終極指南-創建Sudo用戶

linux創建sudo用戶sudo stands for either "superuser do" or "switch user do", and sudo users can execute commands with root/administrative permissions, even malicious ones. Be careful who you grant sudo permissions to – you are quite lit…

重學TCP協議(1) TCP/IP 網絡分層以及TCP協議概述

1. TCP/IP 網絡分層 TCP/IP協議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構成互聯網基礎的網絡協議,是Internet的核心協議,通過20多年的發展已日漸成熟,并被廣泛應用于局域網和…

分節符縮寫p_p值的縮寫是什么?

分節符縮寫pp是概率嗎? (Is p for probability?) Technically, p-value stands for probability value, but since all of statistics is all about dealing with probabilistic decision-making, that’s probably the least useful name we could give it.從技術…

Spring-----AOP-----事務

xml文件中&#xff1a; 手動處理事務&#xff1a; 設置數據源 <bean id"dataSource" class"com.mchange.v2.c3p0.ComboPooledDataSource"> <property name"driverClass" value"com.mysql.jdbc.Driver"></property…

[測試題]打地鼠

Description 小明聽說打地鼠是一件很好玩的游戲&#xff0c;于是他也開始打地鼠。地鼠只有一只&#xff0c;而且一共有N個洞&#xff0c;編號為1到N排成一排&#xff0c;兩邊是墻壁&#xff0c;小明當然不可能百分百打到&#xff0c;因為他不知道地鼠在哪個洞。小明只能在白天打…

在PHP服務器上使用JavaScript進行緩慢的Loris攻擊[及其預防措施!]

Forget the post for a minute, lets begin with what this title is about! This is a web security-based article which will get into the basics about how HTTP works. Well also look at a simple attack which exploits the way the HTTP protocol works.暫時忘掉這個帖…

三星為什么要賣芯片?手機干不過華為小米,半導體好掙錢!

據外媒DigiTimes報道&#xff0c;三星有意向其他手機廠商出售自家的Exynos芯片以擴大市場份額。知情人士透露&#xff0c;三星出售自家芯片旨在提高硅晶圓工廠的利用率&#xff0c;同時提高它們在全球手機處理器市場的份額&#xff0c;尤其是中端市場。 三星為什么要賣芯片&…

重學TCP協議(2) TCP 報文首部

1. TCP 報文首部 1.1 源端口和目標端口 每個TCP段都包含源端和目的端的端口號&#xff0c;用于尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接 端口號分類 熟知端口號&#xff08;well-known port&#xff09;已登記的端口&am…

linux:vim中全選復制

全選&#xff08;高亮顯示&#xff09;&#xff1a;按esc后&#xff0c;然后ggvG或者ggVG 全部復制&#xff1a;按esc后&#xff0c;然后ggyG 全部刪除&#xff1a;按esc后&#xff0c;然后dG 解析&#xff1a; gg&#xff1a;是讓光標移到首行&#xff0c;在vim才有效&#xf…

機器學習 預測模型_使用機器學習模型預測心力衰竭的生存時間-第一部分

機器學習 預測模型數據科學 &#xff0c; 機器學習 (Data Science, Machine Learning) 前言 (Preface) Cardiovascular diseases are diseases of the heart and blood vessels and they typically include heart attacks, strokes, and heart failures [1]. According to the …

程序2:word count

本程序改變自&#xff1a;http://blog.csdn.net/zhixi1050/article/details/72718638 語言&#xff1a;C 編譯環境&#xff1a;visual studio 2015 運行環境&#xff1a;Win10 做出修改的地方&#xff1a;在原碼基礎上修改了記錄行數的功能&#xff0c;刪去了不完整行數的記錄&…

重學TCP協議(3) 端口號及MTU、MSS

1. 端口相關的命令 1.1 查看端口是否打開 使用 nc 和 telnet 這兩個命令可以非常方便的查看到對方端口是否打開或者網絡是否可達。如果對端端口沒有打開&#xff0c;使用 telnet 和 nc 命令會出現 “Connection refused” 錯誤 1.2 查看監聽端口的進程 使用 netstat sudo …

Diffie Hellman密鑰交換

In short, the Diffie Hellman is a widely used technique for securely sending a symmetric encryption key to another party. Before proceeding, let’s discuss why we’d want to use something like the Diffie Hellman in the first place. When transmitting data o…

高效能程序猿的修煉

下載地址&#xff1a;http://download.csdn.net/detail/xiaole0313/8931785 高效能程序猿的修煉 《高效能程序猿的修煉是人民郵電出版社出版的圖書。本書是coding horror博客中精華文章的集合。全書分為12章。涉及邁入職業門檻、高效能編程、應聘和招聘、團隊協作、高效工作環境…

Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean

Spring和Hibernate整合的時候我們經常會有如下的配置代碼 1&#xff0c;非JPA支持的配置 <!-- 配置 Hibernate 的 SessionFactory 實例: 通過 Spring 提供的 LocalSessionFactoryBean 進行配置 --> <!-- FacotryBean 配置的時候返回的不是本身而是返回的FactoryBean 的…

如何通過建造餐廳來了解Scala差異

I understand that type variance is not fundamental to writing Scala code. Its been more or less a year since Ive been using Scala for my day-to-day job, and honestly, Ive never had to worry much about it. 我了解類型差異并不是編寫Scala代碼的基礎。 自從我在日…

linux的/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow

1./etc/passwd 存儲用戶信息 [rootoldboy ~]# head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 一行記錄對應著一個用戶&#xff0c;每行記錄被冒號:分隔為7個字段&#xff0c;這7個字段的具體含…

組織在召喚:如何免費獲取一個js.org的二級域名

之前我是使用wangduanduan.github.io作為我的博客地址&#xff0c;后來覺得麻煩&#xff0c;有把博客關了。最近有想去折騰折騰。先看效果&#xff1a;wdd.js.org 如果你不了解js.org可以看看我的這篇文章:一個值得所有前端開發者關注的網站js.org 前提 已經有了github pages的…

linkedin爬蟲_您應該在LinkedIn上關注的8個人

linkedin爬蟲Finding great mentors are hard to come by these days. With so much information and so many opinions flooding the internet, finding an authority in a specific field can be quite tough.這些天很難找到優秀的導師。 互聯網上充斥著如此眾多的信息和眾多…

重學TCP協議(4) 三次握手

1. 三次握手 請求端&#xff08;通常稱為客戶&#xff09;發送一個 S Y N段指明客戶打算連接的服務器的端口&#xff0c;以及初始序號。這個S Y N段為報文段1。服務器發回包含服務器的初始序號的 S Y N報文段&#xff08;報文段2&#xff09;作為應答。同時&#xff0c;將確認序…