1. 數據量
1.1 Mysql
Mysql數據主要存儲在磁盤,會有內存存放最近的buffer,主要需要評估容量的是不能打滿磁盤,磁盤打滿爆庫,數據無法更新或寫入。
但是考慮的業務的性能,談數據庫本身的最大max其實沒有太大意義,比如一張表可以存放的行數非常多,但是達到一定的行數之後性能驟降,那設計的時候一定是選擇這個性能下降的臨界值(標準值),就行完美身材和標準身材,哈哈哈。
一般單庫接近2000w行就需要做水平拆分了,查詢效率會急劇下降。
庫 | 表(per db) | 列(per table) | 行 | |
---|---|---|---|---|
max:20億個表 |
1024列 所有變長字段的長度和 不超過 |
每行的最大長度爲8092字節? 每行的最大varchar長度和爲65535 |
||
所有變長字段定義長度和 不超過65535字節 | 標準值:單錶行數超過500萬行或者單表容量超過2GB |
1.1 Redis
存儲在內存,容量受機器內存限制,單機承受合理容量是20G。
當實例需要的容量超過 20G 或要求的時,我們會使用集羣(Cluster)實例來承擔流量。集羣是通過中間件(客戶端或中間代理proxy等)將流量分散到多個 Redis 實例上的解決方案。
2 併發量(吞吐量)
能夠承受的QPS,一般通過壓測可以得出,但由於業務讀寫屬性的差距(讀多寫少,讀少寫多)會有比較大的差距,因爲讀是共享鎖,寫是互斥鎖,寫比較影響併發量。
2.1 Mysql
由於寫操作需要加鎖,所以寫操作的吞吐量要遠遠小於讀性能。下表是5.5版本的測試數據,
操作 | binlog | 索引 | InnoDB(QPS) | myisam(QPS) |
---|---|---|---|---|
寫 |
不開 |
無 | 1K | 1.5K |
開 | 無 | 0.4K | 0.6K | |
有 | 0.3K | 0.6K | ||
讀 | 2.5K | 2.4K |
查詢的性能也與 數據在不在緩衝區有關,如果在緩衝區無需讀磁盤要快,如下圖:
吞吐量也與存儲引擎有關:
2.2 Redis
由於Redis不存在併發,單進程,此處以吞吐量,單機吞吐量: 20萬 請求每秒
3 耗時
1.3.1 MySQL
插入性能與索引個數相關,由於索引樹有變動