论坛首页 Java企业应用论坛

来个头脑风暴^ - ^一个技术层面的挑战:异构数据库之间的联合查询

浏览 24141 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-07-03  
抛出异常的爱 写道
kimmking 写道
xuranpaoche 写道
evanzzy 写道
这个东西应该是有现成的,淘宝有一个TDDL项目,http://rdc.taobao.com/team/jm/archives/1645

以前看过几眼这个东西,不知道好不好用,我也没试过。LZ看看能不能用上吧

下载看了一下,是不错的东东,也开源了,不过现在只能支持到mysql和oracle,其他的暂不支持,再细看下代码



这个事儿不引入中间数据源,真没法操作。tddl处理不了。

etl、数据仓库不就是为了解决这些问题的么?

teiid貌似能做到,这有个例子,但是没有看到例子中有join条件:
https://docs.jboss.org/author/display/teiid80final/Portfolio+Example+Explained

仿照tddl原理,,我臆想一下可能的方式:
中间层的虚拟库里定义了不同数据源的schemas,
通过teiid的 driver或datasource 执行的sql,
先被解析为不同数据库上的sql,
然后分别获取数据,并求交集。


有没有可能把索引同步到一台机器中?

考虑到不同数据库的差异性,这是一个大工程。。。



注意到teiid不仅支持跨源的join,还有优化策略:
https://docs.jboss.org/author/display/teiid80final/Federated+Optimizations#FederatedOptimizations-DependentJoins
0 请登录后投票
   发表时间:2012-07-03  
teiid大概就是这么个策略:
1、cursor+批量
使用cursor每次从多个源获取一批数据处理,
2、缓存+临时数据源
每次获取到的数据,在内存或磁盘缓存,可以作为一个中间的临时数据源。
缓存数据在session结束时清除。
0 请登录后投票
   发表时间:2012-07-03   最后修改:2012-07-03
kimmking 写道
xuranpaoche 写道
evanzzy 写道
这个东西应该是有现成的,淘宝有一个TDDL项目,http://rdc.taobao.com/team/jm/archives/1645

以前看过几眼这个东西,不知道好不好用,我也没试过。LZ看看能不能用上吧

下载看了一下,是不错的东东,也开源了,不过现在只能支持到mysql和oracle,其他的暂不支持,再细看下代码



这个事儿不引入中间数据源,真没法操作。tddl处理不了。

etl、数据仓库不就是为了解决这些问题的么?

teiid貌似能做到,这有个例子,但是没有看到例子中有join条件:
https://docs.jboss.org/author/display/teiid80final/Portfolio+Example+Explained

仿照tddl原理,,我臆想一下可能的方式:
中间层的虚拟库里定义了不同数据源的schemas,
通过teiid的 driver或datasource 执行的sql,
先被解析为不同数据库上的sql,
然后分别获取数据,并求交集。


对,原理上应该就是这样的,“然后分别获取数据,并求交集。”不同的实现方式效率上差别很大
0 请登录后投票
   发表时间:2012-07-03  
这个貌似是一个很浩大的工程,如果在特定的表数据上是比较容易实现的,如果表、数据、库不定的话几乎是一个不能实现的工作,有没有考虑一下数据汇总?将数据汇总到一个库中做查询?

或者看看抛哥的建议分析库、表结构,按需建立数据库连接,查询?
0 请登录后投票
   发表时间:2012-07-03  
jinyanhui2008 写道
这个貌似是一个很浩大的工程,如果在特定的表数据上是比较容易实现的,如果表、数据、库不定的话几乎是一个不能实现的工作,有没有考虑一下数据汇总?将数据汇总到一个库中做查询?

或者看看抛哥的建议分析库、表结构,按需建立数据库连接,查询?

抛哥提到了MapReduce ,我不明白他是建议使用hadoop吗  其实这个需求主要是为了抛开中间库,是数据仓库数据中心的另一种实现(虚拟存储)关键点在于数据拿上来以后,怎么做关联,在服务器不被搞死的前提下性能稍微低下可以忍受
0 请登录后投票
   发表时间:2012-07-03  
既然是异构系统,何不面向服务,一定要在数据层面做集成么。
0 请登录后投票
   发表时间:2012-07-03  
kimmking 写道
teiid大概就是这么个策略:
1、cursor+批量
使用cursor每次从多个源获取一批数据处理,
2、缓存+临时数据源
每次获取到的数据,在内存或磁盘缓存,可以作为一个中间的临时数据源。
缓存数据在session结束时清除。

teiid 貌似可以,我在看文档,多谢
0 请登录后投票
   发表时间:2012-07-03  
写自己的中间件,写自己sql解析器。
0 请登录后投票
   发表时间:2012-07-03  
能偷懒吗?DB2的联邦查询搞定了。
0 请登录后投票
   发表时间:2012-07-03   最后修改:2012-07-03
http://www.hgsql.com/hgsql.asp
有兴趣看看,纯java虚拟数据库
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics