golang mysql分表_go分库分表 主从分离例子

本文介绍了使用Go语言处理MySQL分库分表的案例,包括分区表、垂直切分、水平切分和取模切分等方法。文中提到的ImageShow项目采用主从架构,针对不同表采取不同的分库策略,如用户表利用name的CRC32值进行分库,图片表按id%4分库,评论和点赞表则根据imgid的2bit进行分库,确保事务处理和分页操作的可行性。尽管这种方法可能导致数据不均衡,但在特定场景下仍能维持事务和Join操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上有很多介绍分库分表的文章,方法很多:

```

分区表切分

垂直切分

水平切分

区间切分

取模切分

```

这里不细说

分库分表简单,但后期会带来一系列的难题:

```

事务

Join

分页

```

**数据库:**

bf3a43790d040ef108e6f3725d851cd4.png

```

master和slave是一个主从架构

imagespider_db:[ImageSpider](https://github.com/bccber/imagespider)项目采集回来的数据,不需要部署主从分离。

imageshow_db_1、imageshow_db_2、imageshow_db_3、imageshow_db_4:

四个分库的结构一模一样。(注意,分库的个数最好是2的N次方,不然基因取模算法可能会失效)

```

**t_users用户表:**

```

用户登录和注册时,需要用name来定位分库;查看用户资料时,需要用uid定位分库,

所以,把name的基因加入到uid中,uid的最后2bit为name的crc32的最后2bit,这样通过uid和name都能定位到分库。

```

**t_images图片表:**

```

按 id % 4分库,分页时采用“禁止跳页法”。

```

**t_comments评论表:**

```

id的最后2bit为imgid的2bit,保证一张图片的所有评论和图片切分到同一个数据库中。

用户评论时,t_images表的comment_count字段加1,因为是同一个数据库,仍然可以使用事务处理;

所有评论都切分到同一个数据库,分页时可以使用传统方法。

```

**t_likes点赞表:**

```

和t_comments表一样,也使用imgid最后2bit作为分库基因。

```

```

在某些场景下,使用基因切分法,把相关表都切分到同一个数据库中,在后期的操作中仍然可以使用事务,Join等操作,

但可能会导致分库数据不均衡。

ImageShow只是一个水平切分的例子,功能,代码都很简单,肯定不能涵盖分库分表的所有应用场景。

```

[github](https://github.com/bccber/imageshow)

有疑问加站长微信联系(非本文作者))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值