mysql跨服务器查询(java)

时间:2022-02-28 06:11:51
目前有两个服务器S1,S2
S1中有表A,B,C,其中两张表A,B数据记录上百万条
S2中有D,E,F,其中F也是上百万条数据,
现在要把ABCDEF一起连表查询(性能要求本地服务器访问1毫秒以内)
我是该每个数据库各自子查询再在java程序里联合(又该如何分页?),还是写一个跨服务器连表查询?
以前没做过这样子的,求大神指教!!

8 个解决方案

#1


最好不要分开查询然后用程序处理,两种方案:

1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。

2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。

一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了

#2


你好,听了你的建议
我在S2建了个中间表,把S1几个表的放进这个中间表
目前不懂得如何把S1的表同步到S2中间表的一些字段
如S1中A的name、B的tel、C的address怎么同步到S2的中间表的name、tel、address之中
我的方案是先把S1先迁移到S2中间表,定时每天凌晨3点更新同步,可这明显会有信息滞留的问题。。。 mysql跨服务器查询(java)学生党,求详细解释


引用 1 楼 ooppookid 的回复:
最好不要分开查询然后用程序处理,两种方案:

1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。

2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。

一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了

#3


mysql跨服务器查询(java)人呢

#4


分表分库,水平切分,催着切分。看看mysql proxy

#5


6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询

如果要实时查的话,我觉得比较难搞

#6


每个数据库各自子查询再在java程序联合  这个 肯定达不到1毫秒 后台还需要处理  分页其实可以做到; 可以横向分页;也就是在一张表的结果集上横向加字段  比如之前结果集为 name ,sex age ,将S2中的结果集加入应该是 name,sex age,color 等等;
这种方式我之前操作过,可行,不会改编数据的总列数;

跨域的没做过 ,只使用jta连接多个数据库做过查询;跟你第一种方式类似;

如果是我的话,会采用这种方式;

单表查,每天一个时间点,定时将多表查询的结果集存到本地的一张单表中,这样就会是单表查询;效率也会快很多;

#7


引用 5 楼 ygycomon 的回复:
6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询

如果要实时查的话,我觉得比较难搞

目前是定时每天凌晨3点把S1几张表联合查询插入更新到一张S1新表,再把这张表复制到S2的新表中
问题是这个复制如何操作?我看到有定时导入导出sql文件但那都是整个数据库,求单张表的java导入导出。或者有更好的建议(跨服务器查询?单表同步?)求大神指导 mysql跨服务器查询(java)

#8


引用 7 楼 u011699239 的回复:
Quote: 引用 5 楼 ygycomon 的回复:

6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询

如果要实时查的话,我觉得比较难搞

目前是定时每天凌晨3点把S1几张表联合查询插入更新到一张S1新表,再把这张表复制到S2的新表中
问题是这个复制如何操作?我看到有定时导入导出sql文件但那都是整个数据库,求单张表的java导入导出。或者有更好的建议(跨服务器查询?单表同步?)求大神指导 mysql跨服务器查询(java)


数据库表同步这么简单的事情也要问,自己谷歌去吧

#1


最好不要分开查询然后用程序处理,两种方案:

1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。

2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。

一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了

#2


你好,听了你的建议
我在S2建了个中间表,把S1几个表的放进这个中间表
目前不懂得如何把S1的表同步到S2中间表的一些字段
如S1中A的name、B的tel、C的address怎么同步到S2的中间表的name、tel、address之中
我的方案是先把S1先迁移到S2中间表,定时每天凌晨3点更新同步,可这明显会有信息滞留的问题。。。 mysql跨服务器查询(java)学生党,求详细解释


引用 1 楼 ooppookid 的回复:
最好不要分开查询然后用程序处理,两种方案:

1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。

2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。

一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了

#3


mysql跨服务器查询(java)人呢

#4


分表分库,水平切分,催着切分。看看mysql proxy

#5


6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询

如果要实时查的话,我觉得比较难搞

#6


每个数据库各自子查询再在java程序联合  这个 肯定达不到1毫秒 后台还需要处理  分页其实可以做到; 可以横向分页;也就是在一张表的结果集上横向加字段  比如之前结果集为 name ,sex age ,将S2中的结果集加入应该是 name,sex age,color 等等;
这种方式我之前操作过,可行,不会改编数据的总列数;

跨域的没做过 ,只使用jta连接多个数据库做过查询;跟你第一种方式类似;

如果是我的话,会采用这种方式;

单表查,每天一个时间点,定时将多表查询的结果集存到本地的一张单表中,这样就会是单表查询;效率也会快很多;

#7


引用 5 楼 ygycomon 的回复:
6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询

如果要实时查的话,我觉得比较难搞

目前是定时每天凌晨3点把S1几张表联合查询插入更新到一张S1新表,再把这张表复制到S2的新表中
问题是这个复制如何操作?我看到有定时导入导出sql文件但那都是整个数据库,求单张表的java导入导出。或者有更好的建议(跨服务器查询?单表同步?)求大神指导 mysql跨服务器查询(java)

#8


引用 7 楼 u011699239 的回复:
Quote: 引用 5 楼 ygycomon 的回复:

6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询

如果要实时查的话,我觉得比较难搞

目前是定时每天凌晨3点把S1几张表联合查询插入更新到一张S1新表,再把这张表复制到S2的新表中
问题是这个复制如何操作?我看到有定时导入导出sql文件但那都是整个数据库,求单张表的java导入导出。或者有更好的建议(跨服务器查询?单表同步?)求大神指导 mysql跨服务器查询(java)


数据库表同步这么简单的事情也要问,自己谷歌去吧