不分库只分表,请问多维度查询怎么分表?

颖辉小居 发布于 2020/09/02 13:50
阅读 1K+
收藏 0

比如有一张订单表,业务逻辑路有的根据订单号(不是主键),有的根据用户银行卡号 ,有的根据时间倒序分页查询。这种多维度的查询怎么分表呢? 

网上查了很多资料,但是都是很老的(5年以上)解决方案了,而且没有示例。现在有什么比较简单的新方案吗?

加载中
0
cevin
cevin

union?

颖辉小居
颖辉小居
我的意思是表数据太大了需要分表
0
k
kingMH

订单业务一般来说可以按时间分表,分表之后的查询要用专业中间件辅助

cevin
cevin
回复 @颖辉小居 : 像 楼下说的分布式数据库如TIDB分表都不用分
cevin
cevin
回复 @颖辉小居 : 中间件介入你不需要提前知道查哪个表。中间件在程序中无感知。中间件收到sql后分析分表字段自动转发sql请求
颖辉小居
颖辉小居
看过一些中间件大多都是只支持单维度分表和查询,解决不了我的问题。比如按照时间分表,在查表之前要知道该查哪个表。
0
君千殇520
君千殇520

分布式数据库  mycat 类似这种,都能解决你的问题

君千殇520
君千殇520
回复 @颖辉小居 : mycat 相当于一个mysql客户端,可以水平拆分表,达到存储大量数据的目的,查询什么的不受影响,该是什么样就是什么样
颖辉小居
颖辉小居
mysql分表一般只能按照单个维度查询比如 sharding-jdbc。在网上查资料都是类似这样 https://www.cnblogs.com/kelelipeng/p/10847605.html,十分复杂,而且数据大量冗余。mycat支持多维度查询吗?
0

如果是Oracle的话,可以直接上Oracle表分区,

如果是Mysql的话,要根据实际查询和统计分析的业务逻辑来确定分表规则

尽量减少出现跨表统计分析的情况出现,也就是说具有相同业务特征的数据在一张表中

分表本身就算一种用空间换时间的办法

0
倔强的萝卜1

根据订单表id分表。。然后把纬度拆分到其他表中或者放到es中。先通过纬度获取到id。然后再通过主键id去查询数据

倔强的萝卜1
回复 @颖辉小居 : 新增时根据 id分表策略 直接存到对应的表里面就好了。然后把其他维度的数据都维护上。。主要是先拿到id 然后通过id的分表策略找对应的数据
颖辉小居
颖辉小居
但是,数据新增或者修改时怎么同步数据呢?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部