V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  Java

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

  •  1
     
  •   tctc4869 · 2019-11-25 10:37:33 +08:00 · 3437 次点击
    这是一个创建于 1810 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    https://github.com/APIJSON/APIJSON
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:52 · PVG 02:52 · LAX 10:52 · JFK 13:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.