分庫分表的目的是爲了解決兩個問題:算法
第一,是數據量太大查詢慢的問題。這裏面咱們講的「查詢」其實主要是事務中的查詢和更新操做,由於只讀的查詢能夠經過緩存和主從分離來解決,這個咱們在以前的「MySQL 如何應對高併發」的兩節課中都講過。那咱們上節課也講到過,解決查詢慢,只要減小每次查詢的數據總量就能夠了,也就是說,分表就能夠解決問題。數據庫
第二,是爲了應對高併發的問題。應對高併發的思想咱們以前也說過,一個數據庫實例撐不住,就把併發請求分散到多個實例中去,因此,解決高併發的問題是須要分庫的。緩存
簡單地說,數據量大,就分表;併發高,就分庫。併發
對於海量原始數據的存儲系統,咱們要求的是超高的寫入和讀取性能,和近乎無限的容量,對於數據的查詢能力要求不高。生產上,能夠選擇 Kafka 或者是 HDFS,Kafka 的優勢是讀寫性能更好,單節點能支持更高的吞吐量。而 HDFS 則能提供真正無限的存儲容量,而且對查詢更友好。 分佈式
一類是分佈式流數據存儲,比較活躍的項目有Pravega和 Pulsar 的存儲引擎Apache BookKeeper。這些分佈式流數據存儲系統,走的是相似 Kafka 這種流存儲的路線,在高吞吐量的基礎上,提供真正無限的擴容能力,更好的查詢能力。高併發
還有一類是時序數據庫(Time Series Databases),比較活躍的項目有InfluxDB和OpenTSDB等。這些時序數據庫,不只有很是好的讀寫性能,還提供很方便的查詢和聚合數據的能力。可是,它們不是什麼數據均可以存的,它們專一於相似監控數據這樣,有時間特徵而且數據內容都是數值的數據。若是你有存儲海量監控數據的需求,能夠關注一下這些項目。性能