哪些数据类型是需要分库的?分库后,跨库多层联查 Join 怎么弄?如果用 Java 来搞定联查,那方式有哪些?

2019-11-25 10:37:33 +08:00
 tctc4869

这里描述的数据库产品是 Postgresql,而不是 mysql 数据库中,有些数据表,每天插入的数据相对其他的表多,会做查询,删除和更改的情况极少。这类型的数据一般都是日志数据(不是指系统日志,而是指用户日志或其他非系统类型的日志,需要在页面显示),当然还有其他类型的数据,

那么日志数据是否有必要独立出去建一个分库?查询的时候通过日志数据的外键 id 进行一对多的 in 查询,除了日志数据,还有哪些数据类型是需要独立分库的?

如果分库了,那么跨库多对多查询怎么解决,只用 in 的话,我记得有资料说 mysql 用 in 查询的数据范围处于千位级以上时效率比较低。阿里巴巴提倡 mysql 数据库的 join 查询规范控制在三表之内,但是万一有超过三层的查询怎么办,而且是夸库。如果是用 java 解决的话,java 有哪些方式呢?

3437 次点击
所在节点    Java
4 条回复
optional
2019-11-25 10:44:43 +08:00
PG 分库后不能 join, 如果有需求隔离模块可以用 schema,原则上应该避免跨 schema join。
甚至除非是固定的 join 数据,否则,应该用 1+N 代替 join。
micean
2019-11-25 10:58:25 +08:00
日志数据的应用层需求本来应该就得简单,如果时间跨度很大可以考虑按年份范围分库出去,同时应用层做相应变化。
chengyiqun
2019-11-25 23:00:10 +08:00
固定的数据也一般在多个库维持副本, 只更新主本表, 副本同步过去.
TommyStandard
2019-11-26 11:30:09 +08:00
冗余数据减少 SQL JOIN。
实在不行就只能跨库应用层 JOIN,
可以试试 APIJSON,后端不用写代码,对副表自动生成 id IN(1,2,3...) 的语句来优化性能

https://github.com/APIJSON/APIJSON

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/622812

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX