關係型資料庫在大於一定資料量的情況下效能會急劇下降。在面對網際網路海量資料的情況時,所有資料都存於一張表,顯然很容易會達到資料表可承受的資料量閾值。
單純分表雖然可以解決資料量過大導致檢索變慢的問題,但無法解決高併發情況下訪問同乙個庫,導致資料庫響應變慢的問題。所以通常水平拆分都至少要採用分庫的方式,以一併解決大資料量和高併發的問題。
但分表也有不可替代的場景。最常見的分表需求是事務問題。同乙個庫則不需要考慮分布式事務問題,善於使用同庫不同錶可有效的避免分布式事務(跨庫事物)帶來的麻煩。目前,強一致性的分布式事務由於效能問題,導致使用起來效能並不一定會比不分庫而分表快,因此採用最終一致性的分布式事務居多。
sharding-jdbc是噹噹開源的資料庫水平切分的中介軟體,其代表了客戶端類的分庫分表技術框架(這一點與mycat不同,mycat本質上是一種資料庫**)。sharding-jdbc定位為輕量級資料庫驅動,由客戶端直連資料庫,以jar包形式提供服務,未使用中間層應用**,無需額外部署,無其他依賴,業務系統開發人員與資料庫運維人員無需改變原有的開發與運維方式。因此sharding-jdbc即為增強版的jdbc驅動,可以實現舊**遷移零成本的目標。 目前社群較為活躍。目前已廣泛應用於現各大網際網路公司。通過社群得知,sharding-jdbc的作者已去京東做全職的sharding-jdbc開發,相信未來sharding-jdbc社群的發展將會更好。
sharding-jdbc目前提供4種分片演算法。
由於分片演算法和業務實現緊密相關,因此並未提供內建分片演算法,而是通過分片策略將各種場景提煉出來,提供更高層級的抽象,並提供介面讓應用開發者自行實現分片演算法。
對應hintshardingalgorithm,用於處理使用hint行分片的場景。需要配合hintshardingstrategy使用。
Mycat和分庫分表
mycat是一種非常流行的分布式資料庫中間外掛程式,mycat的作用為滿足資料庫的大量儲存,提高了查詢效能,從架構的角度來理解就是前端使用者可以把mycat看作是乙個資料庫的 核心功能是分庫分表,即將乙個大表水平分割為n個小表。mycat的原理是攔截了使用者傳送過來的sql語句,首先對sql語句做一...
mysql分表分庫實現 MySql分表分庫思路
一.資料庫瓶頸 1.1io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時會產生大量的io 分庫和垂直分表 第二種 網路io瓶頸,請求的資料太多,網路頻寬不夠 分庫 1.2cpu瓶頸 第一種 sql問題,如sql中包含join,group by,order by,非索引字段條...
MySQL範圍分表分庫 mysql 分表分庫策略
唯一id的生成 下面列舉幾種常見的唯一id生成方案,需要滿足兩大核心需求 1.全域性唯一 2趨勢有序 1.用資料庫的auto increment 自增id 來生成,每次通過寫入資料庫一條記錄,利用資料庫id自增的特性獲取唯一,有序的id。優點 使用資料庫原有的功能,相對簡單 能夠保證唯一 能夠保證遞...