首页 新闻 搜索 专区 学院

请教数据库分表的问题?

0
悬赏园豆:50 [已解决问题] 解决于 2021-08-02 16:35

现在公司有个项目,有一张数据表预计数据量会很大,所以想使用分表的方式减少单张表的数据量。现在有两个问题请教一下。

1:假设我一张表存100条数据,怎么保证不多不少只存一百条数据就进行分表?
2:一个用户的数据存在多张表中,如果要分页查询,这个怎么实现?

路边一草鞋的主页 路边一草鞋 | 初学一级 | 园豆:109
提问于:2021-07-24 09:24
< >
分享
最佳答案
0

建议使用数据库自带的分区表功能,或使用如MyCat之类的第三方方案,自己写太费劲。如果用此两种方案,你的问题二就不存在了

收获园豆:30
会长 | 专家六级 |园豆:10069 | 2021-07-24 11:07

我查询了一下mysql的分区方案感觉这个方案实现起来最简单,而且也能实现需要的功能。现在的方法是将N个用户的数据做分区,N个用户就分一次区。非常感谢。

路边一草鞋 | 园豆:109 (初学一级) | 2021-08-02 16:34

@路边一草鞋: 不用谢,最好搞点测试数据线测试下效果

会长 | 园豆:10069 (专家六级) | 2021-08-02 17:55
其他回答(3)
1

单纯根据数量分表并没有太大的意义,而且在大量数据的情况下,并不需要太精确的控制。
建议从业务层面考虑分表设计:

  • 如果是时序数据,比如按时间的统计数据,可以按天,周,月等分表。搜索时,到对应时间段的表中查询;
  • 如果是分类数据,比如全国数据,可以按省份分表,常用的统计数据可以定时进行汇总;
  • 最简单的是根据数量,比如达到一定数量就分表,这种查询效率会很低,每个表都要查一遍。

至于你说的分页查询,我觉得首先要从分表分库设计的时候先考虑好,否则查询的代价极高。一个用户的数据,应该放在某一个或者几个表中,而这一个或者几个表,要在查询前,根据分表策略,计算出数据在哪里存放。

收获园豆:20
。淑女范erり | 园豆:951 (小虾三级) | 2021-07-24 10:17

谢谢回答。
现在业务是这个样子,操作人员到别的系统导出excel表,然后导入我们的系统,每天都要导入。考虑到这个数据量日积月累的话会非常多,导入的这个数据是所有用户的数据,我现在还有个想法是每个用户的数据单独建立一张表来存储数据,用户的数量不会很多,问一下如果数据库有几千张表的话,会不会存在什么问题?

支持(0) 反对(0) 路边一草鞋 | 园豆:109 (初学一级) | 2021-07-24 10:49

@路边一草鞋: 讲道理是没太大问题的,不过系统要统计和维护每个表的信息,可能对性能有一些损耗。

另外你提到日积月累。这些数据都是常用的吗? 如果主要是用来保存,还不如以文档方式保存,数据库里只记录日常需要的统计汇总信息。

支持(0) 反对(0) 。淑女范erり | 园豆:951 (小虾三级) | 2021-07-24 11:04
0

先看看这些数据,最主要的功能还是用来查询,所以先看查询场景,看看常用的查询条件是什么,时间还是其他什么,比如说用户是主查询条件,确保同一个用户的数据在一个表里,不用可以每张分表的数据条数都要一样,一个表98条,一个表105条,没什么影响。
然后为这些分表建立一个索引表,其中记录下来,比如 用户 1,2,3 都存在表一中,记录下map 关系,然后每次查询前 先查map 关系,然后可能需要拼 SQL 来动态组成 sql 语句去执行查询,换作其他条件是类似的思路,先确保你的查询条件可以先通过索引表进行定位,然后再到指定的表里边做具体查询

死神的背影 | 园豆:662 (小虾三级) | 2021-07-27 11:10
0

可以这样设计:同一个用户的数据放在一个表上,我们在写入数据之前就要确定写入哪个表,这个就可以保证每张表的数据量

kingreatwill | 园豆:383 (菜鸟二级) | 2021-07-29 10:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册