mysql 垂直分表 实践记录

33 篇文章 1 订阅

一条数据中的字段太多,200多个,尝试将字段全部建在一张表内,出现错误:

Mysql [Err] 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.

尝试了网上各种办法后依然无效,无奈考虑到垂直分表,将字段分别建立在两张表内。

其中有几点值得记录:【数据持久化使用 Mybatis】

1、创建表:两张表需要有一个 取值 相同的字段 id:字段名可以相同,也可以不同,但字段值要相同;以此确定两张表中的一条数据,

2、查询时:第1 张表 Table1  左外连接(Left  Outer Join ) 第2 张表 Table2  on Table1.id = Table2.id 

3、新增时,判断字段属于哪一个表,根据字段所属表,将数据插入到对应表内。

     (1)、要插入的数据 ,全部封装在 一个  PG内(我自己代码里写的一个键值对 Map,键:字段名,值:字段值)

     (2)、在 Mapper 内明确好 每个表的表名,所包含的字段,

     (3)、拼接好 每个表 新增数据的 SQL语句

     (4)、PG 传入后,自动匹配字段,从而自动插入到不同的表

  =============================分割线==============================    

另一个需求:由于我的数据是分批上传,需要保留每一批上传数据的历史记录,因此::

1、在两个表内 都增加一个 “recordid” 字段,每一批数据一个唯一的 recordid (实质上只需要第一个表有这个字段就行,两个表数据根据相同的 ID 关联 ,我这里第二个表也存了recordid,有数据冗余,只是直觉感觉到以后会用到,具体哪里会用到还不知道)。

2、新增一个 record 表,表内至少有一个 recordid 字段,create_time 字段,  还有其他业务需要的自定义字段,保存每次上传信息。

3、查询上传记录时,首先查询  record 表,再从  record 表 内提取 recordid  去数据表内查询 该批次数据。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL分库分表是一种数据库分布式架构的实践方案,旨在解决大数据量、高并发访问等问题。在实践中,可以采取以下步骤: 1. 数据库的垂直拆分:将一个大型数据库拆分成多个功能相关的小型数据库。例如,可以将用户信息存储、商品信息存储等拆分成独立的数据库,便于管理和维护。 2. 数据库的水平拆分:将某个数据库中的按照某种规则拆分成多个分表,例如按照用户ID哈希值进行拆分。这样每个分表只负责一部分数据的存储和查询,提高查询性能。 3. 集群和分布式处理:通过数据分片策略,将数据分布在不同的数据库实例上,形成一个数据库集群。每个数据库实例可以部署在不同的服务器上,提供更高的容错性和可用性。 4. 数据同步和一致性:在分库分表架构中,需要保持数据的一致性。可以通过主从复制、双写一致性、分布式事务等机制来实现数据的同步和一致性。 5. 路由和负载均衡:在分库分表的架构中,需要通过路由器来确定每个查询应该路由到哪个数据库实例和中。同时,为了提高性能和可扩展性,可以通过负载均衡技术将查询请求均匀地分发到各个数据库节点。 总的来说,MySQL分库分表实践是一种将大型数据库拆分成小型数据库和分表,通过集群和分布式处理来提高性能和可扩展性的架构方案。在实施过程中需要注意数据的一致性和同步,以及合理的路由和负载均衡策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值