天天看點

輕量級Mysql Sharding中間件——Shark

輕量級Mysql Sharding中間件——Shark

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語句中出現資料庫别名;
  • 路由條件必須是整數類型;

繼續閱讀