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