Shark簡介?
前身為Kratos,輕量級Mysql分庫分表(Sharding)中間件,豐富的Sharding算法支持(2類4種分片算法),能夠方便DBA實現(xiàn)庫的水平擴容和降低數(shù)據(jù)遷移成本。Shark站在巨人的肩膀上(SpringJdbc、Druid),采用與應(yīng)用集成架構(gòu),放棄通用性,只為換取更好的執(zhí)行性能與降低分布式環(huán)境下外圍系統(tǒng)的宕機風(fēng)險。
Shark的優(yōu)點
- 動態(tài)數(shù)據(jù)源的無縫切換;
- master/slave一主一從讀寫分離;
- Sql獨立配置,與邏輯代碼解耦;
- 單線程讀重試(取決于的數(shù)據(jù)庫連接池是否支持);
- 單獨且友好支持Mysql數(shù)據(jù)庫;
- 非Proxy架構(gòu),與應(yīng)用集成,應(yīng)用直連數(shù)據(jù)庫,降低外圍系統(tǒng)依賴所帶來的宕機風(fēng)險;
- 使用簡單,侵入性低,站在巨人的肩膀上,依賴于SpringJdbc、Druid;
- 基于淘寶Druid的SqlParser完成Sql解析任務(wù),解析性能高效、穩(wěn)定;
- 分庫分表路由算法支持2類4種分片模式,庫內(nèi)分片/一庫一片;
- 提供自動生成全局唯一的sequenceId的API支持;
- 提供自動生成配置文件的支持,降低配置出錯率;
- 提供內(nèi)置驗證頁面,方便開發(fā)、測試以及運維對執(zhí)行后的sql進(jìn)行驗證;
- 專注于Sharding領(lǐng)域,無需兼容通用性,因此核心代碼量少、易讀易維護(hù);
Shark的分片模型
Shark支持2類4種分片算法:
- 庫內(nèi)分片類型:
- 片名連續(xù)的庫內(nèi)分片算法;
- 非片名連續(xù)的庫內(nèi)分片算法;
- 一庫一片類型:
- 片名連續(xù)的一庫一片算法;
- 非片名連續(xù)的一庫一片算法;
Shark的使用注意事項
- 不支持強一致性的分布式事務(wù),建議在業(yè)務(wù)層采用依賴MQ、異步操作等方式實現(xiàn)事物,保證事物的最終一致性;
- 不建議、不支持多表查詢,所有多表查詢sql,務(wù)必全部打散為單條sql逐條執(zhí)行;
- sql語句的第一個參數(shù)務(wù)必是路由條件;
- 不支持sql語句中出現(xiàn)數(shù)據(jù)庫別名;
- 路由條件必須是整數(shù)類型;