S1中有表A,B,C,其中两张表A,B数据记录上百万条
S2中有D,E,F,其中F也是上百万条数据,
现在要把ABCDEF一起连表查询(性能要求本地服务器访问1毫秒以内)
我是该每个数据库各自子查询再在java程序里联合(又该如何分页?),还是写一个跨服务器连表查询?
以前没做过这样子的,求大神指教!!
8 个解决方案
#1
最好不要分开查询然后用程序处理,两种方案:
1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。
2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。
一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了
1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。
2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。
一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了
#2
你好,听了你的建议
我在S2建了个中间表,把S1几个表的放进这个中间表
目前不懂得如何把S1的表同步到S2中间表的一些字段
如S1中A的name、B的tel、C的address怎么同步到S2的中间表的name、tel、address之中
我的方案是先把S1先迁移到S2中间表,定时每天凌晨3点更新同步,可这明显会有信息滞留的问题。。。 学生党,求详细解释
我在S2建了个中间表,把S1几个表的放进这个中间表
目前不懂得如何把S1的表同步到S2中间表的一些字段
如S1中A的name、B的tel、C的address怎么同步到S2的中间表的name、tel、address之中
我的方案是先把S1先迁移到S2中间表,定时每天凌晨3点更新同步,可这明显会有信息滞留的问题。。。 学生党,求详细解释
#3
人呢
#4
分表分库,水平切分,催着切分。看看mysql proxy
#5
6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询
如果要实时查的话,我觉得比较难搞
如果要实时查的话,我觉得比较难搞
#6
每个数据库各自子查询再在java程序联合 这个 肯定达不到1毫秒 后台还需要处理 分页其实可以做到; 可以横向分页;也就是在一张表的结果集上横向加字段 比如之前结果集为 name ,sex age ,将S2中的结果集加入应该是 name,sex age,color 等等;
这种方式我之前操作过,可行,不会改编数据的总列数;
跨域的没做过 ,只使用jta连接多个数据库做过查询;跟你第一种方式类似;
如果是我的话,会采用这种方式;
单表查,每天一个时间点,定时将多表查询的结果集存到本地的一张单表中,这样就会是单表查询;效率也会快很多;
这种方式我之前操作过,可行,不会改编数据的总列数;
跨域的没做过 ,只使用jta连接多个数据库做过查询;跟你第一种方式类似;
如果是我的话,会采用这种方式;
单表查,每天一个时间点,定时将多表查询的结果集存到本地的一张单表中,这样就会是单表查询;效率也会快很多;
#7
目前是定时每天凌晨3点把S1几张表联合查询插入更新到一张S1新表,再把这张表复制到S2的新表中
问题是这个复制如何操作?我看到有定时导入导出sql文件但那都是整个数据库,求单张表的java导入导出。或者有更好的建议(跨服务器查询?单表同步?)求大神指导
#8
数据库表同步这么简单的事情也要问,自己谷歌去吧
#1
最好不要分开查询然后用程序处理,两种方案:
1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。
2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。
一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了
1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。
2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。
一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了
#2
你好,听了你的建议
我在S2建了个中间表,把S1几个表的放进这个中间表
目前不懂得如何把S1的表同步到S2中间表的一些字段
如S1中A的name、B的tel、C的address怎么同步到S2的中间表的name、tel、address之中
我的方案是先把S1先迁移到S2中间表,定时每天凌晨3点更新同步,可这明显会有信息滞留的问题。。。 学生党,求详细解释
我在S2建了个中间表,把S1几个表的放进这个中间表
目前不懂得如何把S1的表同步到S2中间表的一些字段
如S1中A的name、B的tel、C的address怎么同步到S2的中间表的name、tel、address之中
我的方案是先把S1先迁移到S2中间表,定时每天凌晨3点更新同步,可这明显会有信息滞留的问题。。。 学生党,求详细解释
最好不要分开查询然后用程序处理,两种方案:
1.使用databaseLink跨域查询,比较简单,查询频繁的话效率不高,因为每次都要去查。
2.在一个库里建立中间表,用etl连两个源,先把查询结果落地在中间表,然后每次都增量存,这样查询起来就相当于在一个库里查,效率很高,而且某一个库挂了也不影响,只要中间表不挂即可。
一般多数据源都是先做数据集成,然后在去查。不然万一一个源down了,你系统不就废了
#3
人呢
#4
分表分库,水平切分,催着切分。看看mysql proxy
#5
6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询
如果要实时查的话,我觉得比较难搞
如果要实时查的话,我觉得比较难搞
#6
每个数据库各自子查询再在java程序联合 这个 肯定达不到1毫秒 后台还需要处理 分页其实可以做到; 可以横向分页;也就是在一张表的结果集上横向加字段 比如之前结果集为 name ,sex age ,将S2中的结果集加入应该是 name,sex age,color 等等;
这种方式我之前操作过,可行,不会改编数据的总列数;
跨域的没做过 ,只使用jta连接多个数据库做过查询;跟你第一种方式类似;
如果是我的话,会采用这种方式;
单表查,每天一个时间点,定时将多表查询的结果集存到本地的一张单表中,这样就会是单表查询;效率也会快很多;
这种方式我之前操作过,可行,不会改编数据的总列数;
跨域的没做过 ,只使用jta连接多个数据库做过查询;跟你第一种方式类似;
如果是我的话,会采用这种方式;
单表查,每天一个时间点,定时将多表查询的结果集存到本地的一张单表中,这样就会是单表查询;效率也会快很多;
#7
6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询
如果要实时查的话,我觉得比较难搞
目前是定时每天凌晨3点把S1几张表联合查询插入更新到一张S1新表,再把这张表复制到S2的新表中
问题是这个复制如何操作?我看到有定时导入导出sql文件但那都是整个数据库,求单张表的java导入导出。或者有更好的建议(跨服务器查询?单表同步?)求大神指导
#8
6张表要求join,我猜你的数据应该属于比较原始的数据,如果时效性不高的话,可以考虑每天半夜把当天的数据算好放在一张表里供查询
如果要实时查的话,我觉得比较难搞
目前是定时每天凌晨3点把S1几张表联合查询插入更新到一张S1新表,再把这张表复制到S2的新表中
问题是这个复制如何操作?我看到有定时导入导出sql文件但那都是整个数据库,求单张表的java导入导出。或者有更好的建议(跨服务器查询?单表同步?)求大神指导
数据库表同步这么简单的事情也要问,自己谷歌去吧