Mysql

高並發、高寫入數據庫的基礎設施

  • August 11, 2017

我的要求是:

  • 3000 個連接
  • 70-85% 寫入與讀取

目前,我們在 700 個連接時最大限度地使用高 CPU、超大型實例。所有 8 個核心都已達到最大值。我們認為這是並發連接數,因為記憶體很好。寫入本身非常簡單(驗證很慢)。要擴展到 3000,我們需要轉到多個伺服器,目前選項:

  • MySQL分片
  • MongoDB集群
  • 卡桑德拉
  • Hadoop & MySQL(Hadoop 記憶體,單一轉儲到 MySQL)
  • MongoDB & MySQL(我們使用 mongo 代替 Hadoop 進行記憶體)

要處理這個數量的連接,有幾個問題:

  1. MySQL Sharding 可以處理並發連接嗎?
  2. 任何一個主控都可以處理這些並發連接,還是像 Mongo 這樣的多頭是更好的選擇?

如果我沒有很好地描述我的問題,我深表歉意。請提問。

如果您使用 MySQL 作為主數據庫,您可能需要考慮通過 MySQL 複製使用星型拓撲。

現在,在你對 MySQL 複製說 UGHHH、ROFL 和 OMG 之前,請聽我說完。

星型拓撲允許您寫入一個 DB 伺服器(稱為 Distribution Mster

$$ DM $$) 並將 SQL 命令發送到多個數據庫伺服器。您如何設置這樣的數據庫基礎架構? 這是描述

您有 5 個數據庫伺服器(伺服器 A、B、C、D、E)

伺服器 A

  • 在 MySQL Replication 設置中,它將是 Master

  • 作為 DM 扮演特殊角色

  • 伺服器 B、C、D、E 的主人

  • 所有表都使用儲存引擎 BLACKHOLE (/dev/null)

  • 只儲存二進制日誌

  • 裸機

  • 好處

    • 非常快的寫入,因為 DM 上的所有表都使用 BLACKHOLE
    • 網路延遲不是問題,因為讀取佔數據庫活動的 15-30%
    • 所有從站都嚴格從 DM 更新

伺服器 B、C、D、E

  • A的奴隸

  • 伺服器是重型 SELECT 的基礎

  • 伺服器可以是虛擬的或裸機的

  • 對於使用者表使用儲存引擎 InnoDB 的所有伺服器

    • 它可以作為熱備用數據庫伺服器
    • 可以針對它執行非侵入式備份
  • 對於使用者表使用儲存引擎 MyISAM 的所有伺服器

    • 設置只讀選項
    • 表可以重做其行格式以加速讀取

我以前寫過這方面的文章

使 MySQL 複製保持最佳狀態

MySQL Cluster 可能是另一種分片方法。在這裡查看文章

我也是 Cassandra 的忠實粉絲,但這在很大程度上取決於您的數據模型和您想要執行的查詢。Cassandra 的寫入速度非常快,因為它們在磁碟上總是連續的。

引用自:https://dba.stackexchange.com/questions/9189