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