Skip to content

wydb项目主要是一个用于数据库相关框架学习的项目,包括分库分表框架、分布式事务框架等。

Notifications You must be signed in to change notification settings

13647227317/wydb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

前言

wydb项目主要是一个用于数据库相关框架学习的项目,包括分库分表框架、分布式事务框架等。

组织结构

wydb
├── generator -- mybatis-plus代码生成器
├── sharding-jdbc-example -- sharding-jdbc框架使用demo

└── --

数据切分策略

数据切分分为两种方式,纵向切分和水平切分 纵向切分   常见有纵向分库纵向分表两种。 1). 纵向分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库,做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与“微服务治理”的做法相似,每个微服务使用单独的一个数据库。 2). 垂直分表是基于数据库中的列进行,某个表字段较多,可以新建一张扩展表,将不经常用或者字段长度较大的字段拆出到扩展表中。在字段很多的情况下,通过大表拆小表,更便于开发与维护,也能避免跨页问题,MYSQL底层是通过数据页存储的,一条记录占用空间过大会导致跨页,造成额外的开销。另外,数据库以行为单位将数据加载到内存中,这样表中字段长度越短且访问频次较高,内存能加载更多的数据,命中率更高,减少磁盘IO,从而提升数据库的性能。 垂直切分的优点: 解决业务系统层面的耦合,业务清晰 与微服务的治理类似,也能对不同业务的数据进行分级管理,维护,监控,扩展等。 高并发场景下,垂直切分一定程度的提升IO,数据库连接数,单机硬件资源的瓶颈。 垂直切分的缺点 部分表无法join,只能通过接口聚合方式解决,提升了开发的复杂度。 分布式事处理复杂 依然存在单表数据量过大的问题。 水平切分   当一个应用难以再细粒度的垂直切分或切分后数据量行数依然巨大,存在单库读写,存储性能瓶颈,这时候需要进行水平切分。   水平切分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果。   库内分表只解决单一表数据量过大的问题,但没有将表分布到不同机器的库上,因些对于减轻mysql的压力来说帮助不是很大,大家还是竞争同一个物理机的CPU、内存、网络IO,最好通过分库分表来解决。 水平切分优点 不存在单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力。 应用端改造较小,不需要拆分业务模块。 水平切分缺点 跨分片的事务一致性难以保证 跨库的join关联查询性能较差 数据多次扩展维度和维护量极大。

sharding-jdbc框架介绍

sharding-jdbc可以用来实现水平分库、水平分表、读写分离功能,详细介绍见官网, 官网地址:https://shardingsphere.apache.org/document/current/cn/overview/

学习总结

当出现性能问题时首先考虑加缓存,然后考虑分表,只有在单台数据库实例无法满足并发要求时再考虑分库,水平分库的情况下所有库都必须有相同的表,并且每个表都会进行分库,只分表的情况下可以只对部分 大表进行分表即可。

About

wydb项目主要是一个用于数据库相关框架学习的项目,包括分库分表框架、分布式事务框架等。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages