在生產環境中我們經常會遇到這種情況:
前端的oltp業務很繁忙,但是需要對這些運營數據進行olap,為了不影響前端正常業務,所以需要將數據庫進行讀寫分離。
這里我將幾種可以用來進行讀寫分離的方案總結一下,這里並不考慮數據庫是否高可用,只針對讀寫分離場景,方案本身並無優劣可言,只看是否適合業務使用場景,所以只把幾個方案的特點羅列出來,遇到具體的問題時按自己需求和環境綜合考慮后再進行取舍
讀寫分離方案 | 實時同步 | 副本數據是否直接可讀 | 副本數 | 最小粒度 | 副本建立索引 | 環境 | 缺點 |
鏡像 | 是 | 否(需要開啟快照,只讀) | 1 | 庫 | 否 | 域/非域(使用證書) | 在高安全模式下對主庫 性能有一定影響 |
log shipping | 否 | 是(只讀) | N | 庫 | 否 | UNC方式可訪問 | 副本庫在做resotre時會斷開已連接用戶連接/可能影響常規日志備份 |
發布訂閱 | 是 | 是(讀寫,但寫可能會產生數據不一致) | N | 表(查詢) | 是 | 域/非域 | 在主庫上有大量DML操作時,對分發服務器會有一定影響,且訂閱數據庫可能有數據同步延遲 |
always on | 是 | 是(只讀) | 4(sql 2012) 8(sql 2014) |
庫 | 否 | 域 | 非域環境無法使用 |