Shark簡介
前身為Kratos,輕量級Mysql分庫分表(Sharding)中間件,豐富的Sharding算法支援(2類4種分片算法),能夠友善DBA實作庫的水準擴容和降低資料遷移成本。Shark站在巨人的肩膀上(SpringJdbc、Druid),采用與應用內建架構,放棄通用性,隻為換取更好的執行性能與降低分布式環境下外圍系統的當機風險。
- 中文手冊
- 常見問題
Shark的優點
- 動态資料源的無縫切換;
- master/slave一主一從讀寫分離;
- Sql獨立配置,與邏輯代碼解耦;
- 單線程讀重試(取決于的資料庫連接配接池是否支援);
- 單獨且友好支援Mysql資料庫;
- 非Proxy架構,與應用內建,應用直連資料庫,降低外圍系統依賴所帶來的當機風險;
- 使用簡單,侵入性低,站在巨人的肩膀上,依賴于SpringJdbc、Druid;
- 基于淘寶Druid的SqlParser完成Sql解析任務,解析性能高效、穩定;
- 分庫分表路由算法支援2類4種分片模式,庫内分片/一庫一片;
- 提供自動生成全局唯一的sequenceId的API支援;
- 提供自動生成配置檔案的支援,降低配置出錯率;
- 提供内置驗證頁面,友善開發、測試以及運維對執行後的sql進行驗證;
- 專注于Sharding領域,無需相容通用性,是以核心代碼量少、易讀易維護;
Shark的分片模型
Shark支援2類4種分片算法:
- 庫内分片類型:
- 片名連續的庫内分片算法;
- 非片名連續的庫内分片算法;
- 一庫一片類型:
- 片名連續的一庫一片算法;
- 非片名連續的一庫一片算法;
Shark的使用注意事項
- 不支援強一緻性的分布式事務,建議在業務層采用依賴MQ、異步操作等方式實作事物,保證事物的最終一緻性;
- 不建議、不支援多表查詢,所有多表查詢sql,務必全部打散為單條sql逐條執行;
- sql語句的第一個參數務必是路由條件;
- 不支援sql語句中出現資料庫别名;
- 路由條件必須是整數類型;