最近要用java做一个在异构的数据库之间交换数据的项目,我在这里把我大概的思路说说,大家帮忙看一下,是否有更好的实现方法?
系统要求在mssql,access,oracle等数据库之间交换数据。在中间利用xml来转换,假设已经有了一个大家都公认的行业标准,即可以把它当成schema。各个数据库的结构可能不一样,但是这个行业标准是各个数据库的最小公约数,即它里面的各数据项都能在各个数据库中找到对应的。现在要做的就是做这个一个中间的转换系统。我想就是首先把源数据库的表结构取出来,然后根据schema手工映射(因为源数据库表结构和schema里定义的可能不一样,必须得映射好顺序),再生成xml,这个xml就是满足公认标准的xml了,可以用来很方便的交换,传输。同理,由xml文件倒入到数据库中就是相反的过程了。现在还处于设想的阶段,请问大家有什么看法?
但是现在想想,具体实现起来可能有以下几个难题:
1、除了手工指定,是否有更好的方法实现由已知数据源和定义好的schema生成符合schema的xml?
2、在转换的过程中,如何保证数据值的不丢失?
现在能想到的就这么多了
---------------------------------------------------------------
还有:
3、如何保持数据间的约束关系
4、如何实现事务重现
5、效率问题
6、整个体系采用什么应用接口?(API/组件/还是application?)毕竟是提供他人使用的。
7、如何从各种数据库中获得数据,如何将数据入数据库,你要了解多少数据库的访问技术?恐怕不是一俩句话就可以搞定的?
---------------------------------------------------------------
仅供参考:
1. 有一些自动工具(例如oracle、mssql都应该有),但是不一定好用;
2. 这是你编写schema和编程的问题;
3. schema来约束,用xml校验工具检验;
4. 依靠数据库的事务功能;
5. 你的目的就是数据交换,效率是次要的,如看你的程序是否为每个数据库做优化,这样就很费力没有必要;
6. 无所谓,看你的需求了;
7. 用标准sql,忽略不同数据库的特别之处。
---------------------------------------------------
这几天我大概试了一下,因为我做这个本来就是带有学习兼研究性质的,所以很多方面也没有考虑周到,很多原来的想法都是不正确的。按我原本的想法,应该是首先生成基于数据库的xml,然后再根据标准的schema直接生成标准xml文件的。但是在具体实践的时候我发现,这被证明在现在是比较难实现的。因为写成标准的schema的话,虽然可以把它当成xml文件,但是好像还不能像xml那样利用dom来遍历它。因此也就较难取到每个element的属性了(比如,描述element SaiID应该写成这样
1<xs:element name="SaiID">,但是遍历的时候好像根本找不到xs:element)。用别的方法呢?我用google找了一下,网络上有过很多这样的问题,但是没有一个标准的答案。好像大家都觉得用xsl还是比较可行的,但是网路上好像还没有找到一个成功的例子。
2
3现在的解决方法是:
41、不要把schema写成标准的形式(如上,我把它写成<element name="SaiID">),这样的schema就可以方便的来遍历了,然后就可以写类来实现每个字段的转化了。
52、要是仅仅是针对某一个确定的数据库系统来进行数据交换,我觉得可以直接再程序中针对每个确定的字段转换了,这样schema就没有什么别的用途了,仅仅是确认一下生成以后的xml文件了。
63、找到一种根据schema生成xml的方法。</element></xs:element>