通常來說,Mysql表的數據量達到一兩千萬之后,操作起來開始有些吃力了,如果數據量達到上億,估計系統是吃不消的。
那么解決方案有哪些呢?我提幾個思路:
就用Mysql,不考慮遷移
- 分庫分表其實是比較好的方案,但是已經被題主否了,就不詳細說了;
表設計的優化:在設計表的時候,就要考慮性能問題了。例如字段盡量避免NULL,時間類型盡量使用TIMESTAMP,單表的字段不宜過多等等。
索引的優化:索引不是越多越好,也不是所有的字段都適合建立索引,使用多列索引的時候,要注意SQL中的條件順序等。
SQL的優化:有的時候查詢慢,可能是SQL寫的爛。查詢盡量用到索引,避免錯誤的寫法導致索引失效,避免使用select*查詢出來所有的列,拆分復雜的SQL語句,查詢使用分頁等等。
分區:分區表是獨立的邏輯表,底層由多個物理表組成,這些對用戶來說是透明的;如果按照分區字段查詢數據的話,就會在某一張分區表內查詢,速度回比較快;分區字段的選擇,需要根據你們實際業務來;比如你們這張表如果可以分100個分區的話,那么每張表實際只有100萬的數據;使用分區表盡量避免全表掃描;
建議考慮這種優化方式。
拋棄Mysql,遷移數據庫
如果公司有錢的話,可以直接上商業數據庫,Oracle、DB2什么的,一億的數據還是可以搞的定的,當然會也比較貴。
其他開源數據庫,有可以支持千萬級的產品,不過不建議使用,坑會比較多。
云數據庫,可以考慮把數據遷移到云上,比如阿里云,花一些錢,少操一些;不過如果是比較敏感的數據,放到云上,多少會不太放心;私有云?這個也貴。
另外,如果不遷移Mysql的話,可以加以非關系型數據庫進行輔助,例如一些數據放到Redis里面進行緩存,或者通過跑數的方式,把原始數據加工好放到Mongodb中提供查詢,總之就是減少對數據庫的訪問。