0 0

定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?谢谢各位大侠!5

定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?谢谢各位大侠!

问题补充:这个操作不是在数据库中哦,是在程序中操作数据库哦,用java操作。
housen1987 写道
考虑一下几种方法:

将源表同步到目标数据库(改成一个临时表)

方法一: 两个表数据量都不大的情况下,使用union关键字去掉重复数据后,把得到的数据重建建一张表,删除以前的表,改名为目标表。
方法二: 数据量稍大,使用minus关键字,获取存在于源表但不存在于目标表的数据,然后将的到的差集一条一条地插进目标表。
方法三: 目标表建立索引,查询出源表当中不存在于目标表的数据(使用exists关键字,不要用in),然后将得到的数据一条条地插入到目标表中。

以上方法,如果是在oracle数据库中,建议使用pl/sql程序完成,速度快!


问题补充:这两个表不是在同一个数据库的,一个在oracle,另一个在sybase,是这种情况,把oracle中的表数据存到sybase表中,在大数据量情况下要考虑性能,定时任务不要读已经拿到的数据,只要拿新增的数据,然后存到sybase中!
housen1987 写道
引用
这个操作不是在数据库中哦,是在程序中操作数据库哦,用java操作。

一样的,程序也操作数据建表,使用pl/sql程序,做集合运算等操作,我说的是大部分操作使用数据库完成,这样能显著提高效率,如果只是用java程序的话,那考虑下面两种方法:

1 源表中的数据一条一条地取出来,对比目标表,实现不重复插入;

2 两个表的数据都取出来,采用内存hash join的方式,得到源表-目标表的差集数据,然后插入到目标表中


问题补充:理解我的问题有点偏差哦,不用比较目标表,我从oracle中取到新增的数据就行了,我打个比喻吧:假设我第一次读取oracle表是要全表读的,设定定时时间为1分钟,一分钟后我又要读oracle中的数据,那么第一次读的数据就不用第二次再读一遍,而是只读这一分钟内有哪些新增的数据,取得新增的数据插入到sybase表中,因为两张表数据一样,取得oracle中的新增数据也是sybase没有的数据,所以不用比较sybase中的数据,直接插入!
housen1987 写道
引用

这两个表不是在同一个数据库的,一个在oracle,另一个在sybase,是这种情况,把oracle中的表数据存到sybase表中,在大数据量情况下要考虑性能,定时任务不要读已经拿到的数据,只要拿新增的数据,然后存到sybase中!


我还想问一个问题,重复数据是oracle表数据有重复,还是oracle表与sybase表的数据有重复?

如果是oracle表数据有重复,这个最好办,oracle的数据查询出来,使用distinct或union select * from dual一下,就能把重复数据去掉了。

如果是oracle表与sybase表的数据有重复,那么在不读取sybase表的情况下,怎么知道oracle表中哪些数据是重复数据呢?


问题补充:这次你应该清楚了我的问题了,很高兴,表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗?
housen1987 写道
引用

理解我的问题有点偏差哦,不用比较目标表,我从oracle中取到新增的数据就行了,我打个比喻吧:假设我第一次读取oracle表是要全表读的,设定定时时间为1分钟,一分钟后我又要读oracle中的数据,那么第一次读的数据就不用第二次再读一遍,而是只读这一分钟内有哪些新增的数据,取得新增的数据插入到sybase表中,因为两张表数据一样,取得oracle中的新增数据也是sybase没有的数据,所以不用比较sybase中的数据,直接插入!


oracle表中增加读取标识位字段,默认为0,已经同步过的,设置标识位为1,下次oracle表再有新数据增加的话,那么只读标识位为0的就可以了。

如果不想破坏oracle表的结构,自己在oracle上新增一个临时表,来存储已经同步过的oracle数据的主键标识也行。


问题补充:嗯,非常感谢您的耐心回答,我现在的情况完全就是你假设的那种,A,B,C三个点进行数据同步,虽然问题还待一步解决,但我还是采纳您的回答!
housen1987 写道
引用

这次你应该清楚了我的问题了,很高兴,表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗?


这个真的是比较困难。

首先,你要从客户机oracle取数据,因为这1分钟间隔之内不知道用户机新增加了哪些数据(大部分情况下是用户使用别的系统插入数据,而你又没有这个系统的程序接口),所以你只能全部取出来,依靠自己的程序去同步数据。

我见过的做法是:

假设用户机是A(Oracle),你的java应用部署在B机器上,sybase数据库在C机器上。

(1)B机器上安装一个内存数据库(有一个开源的H2内存数据库)
(2)获取A(Oracle)的全部数据,如果B机器的内存不大,那么分批获取也可以,与B机器上的内存数据库中的临时储存表Temp做hash join,得到增量数据。
(3)把增量数据同步到B机器的内存数据库和C机器的sybase上。

这里,说明一下,需要同步的表是每隔一段时间会重新建立的,比如天表、月表等,所以一个表不会超级大,达到内存无法消化的地步,所以这个内存数据库的临时表也是有一定的容量的。

可能还有更好的方式,不过,中间表或中间文件记录应该还是要的。

 
2012年1月06日 15:14

5个答案 按时间排序 按投票排序

0 0

采纳的答案

引用

这次你应该清楚了我的问题了,很高兴,表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗?


这个真的是比较困难。

首先,你要从客户机oracle取数据,因为这1分钟间隔之内不知道用户机新增加了哪些数据(大部分情况下是用户使用别的系统插入数据,而你又没有这个系统的程序接口),所以你只能全部取出来,依靠自己的程序去同步数据。

我见过的做法是:

假设用户机是A(Oracle),你的java应用部署在B机器上,sybase数据库在C机器上。

(1)B机器上安装一个内存数据库(有一个开源的H2内存数据库)
(2)获取A(Oracle)的全部数据,如果B机器的内存不大,那么分批获取也可以,与B机器上的内存数据库中的临时储存表Temp做hash join,得到增量数据。
(3)把增量数据同步到B机器的内存数据库和C机器的sybase上。

这里,说明一下,需要同步的表是每隔一段时间会重新建立的,比如天表、月表等,所以一个表不会超级大,达到内存无法消化的地步,所以这个内存数据库的临时表也是有一定的容量的。

可能还有更好的方式,不过,中间表或中间文件记录应该还是要的。

2012年1月06日 20:13
0 0

引用

理解我的问题有点偏差哦,不用比较目标表,我从oracle中取到新增的数据就行了,我打个比喻吧:假设我第一次读取oracle表是要全表读的,设定定时时间为1分钟,一分钟后我又要读oracle中的数据,那么第一次读的数据就不用第二次再读一遍,而是只读这一分钟内有哪些新增的数据,取得新增的数据插入到sybase表中,因为两张表数据一样,取得oracle中的新增数据也是sybase没有的数据,所以不用比较sybase中的数据,直接插入!


oracle表中增加读取标识位字段,默认为0,已经同步过的,设置标识位为1,下次oracle表再有新数据增加的话,那么只读标识位为0的就可以了。

如果不想破坏oracle表的结构,自己在oracle上新增一个临时表,来存储已经同步过的oracle数据的主键标识也行。

2012年1月06日 18:16
0 0

引用

这两个表不是在同一个数据库的,一个在oracle,另一个在sybase,是这种情况,把oracle中的表数据存到sybase表中,在大数据量情况下要考虑性能,定时任务不要读已经拿到的数据,只要拿新增的数据,然后存到sybase中!


我还想问一个问题,重复数据是oracle表数据有重复,还是oracle表与sybase表的数据有重复?

如果是oracle表数据有重复,这个最好办,oracle的数据查询出来,使用distinct或union select * from dual一下,就能把重复数据去掉了。

如果是oracle表与sybase表的数据有重复,那么在不读取sybase表的情况下,怎么知道oracle表中哪些数据是重复数据呢?

2012年1月06日 17:36
0 0

引用
这个操作不是在数据库中哦,是在程序中操作数据库哦,用java操作。

一样的,程序也操作数据建表,使用pl/sql程序,做集合运算等操作,我说的是大部分操作使用数据库完成,这样能显著提高效率,如果只是用java程序的话,那考虑下面两种方法:

1 源表中的数据一条一条地取出来,对比目标表,实现不重复插入;

2 两个表的数据都取出来,采用内存hash join的方式,得到源表-目标表的差集数据,然后插入到目标表中

2012年1月06日 16:21
0 0

考虑一下几种方法:

将源表同步到目标数据库(改成一个临时表)

方法一: 两个表数据量都不大的情况下,使用union关键字去掉重复数据后,把得到的数据重建建一张表,删除以前的表,改名为目标表。
方法二: 数据量稍大,使用minus关键字,获取存在于源表但不存在于目标表的数据,然后将的到的差集一条一条地插进目标表。
方法三: 目标表建立索引,查询出源表当中不存在于目标表的数据(使用exists关键字,不要用in),然后将得到的数据一条条地插入到目标表中。

以上方法,如果是在oracle数据库中,建议使用pl/sql程序完成,速度快!

2012年1月06日 15:27

相关推荐

    王寒松大侠的报表组件

    1. 数据源管理:支持多种数据源接入,如SQL数据库、NoSQL存储、API接口等,方便用户从不同数据源获取并整合数据。 2. SQL查询与数据处理:提供强大的SQL编辑器,支持复杂的查询语句,以及数据清洗、转换等功能,...

    Android 随手记记账应用源码.zip

    在Android平台上,开发一款随手记记账应用是一个常见的任务,涉及到许多关键的编程技术和概念。...通过深入研究,你可以了解到如何构建一个完整的Android应用,并掌握在实际开发中处理财务数据的方法。

    Android应用源码之中文天气预报程序.zip

    总的来说,通过研究这个“Android应用源码之中文天气预报程序”的源代码,开发者可以学习到如何在Android平台上构建一个完整的应用,包括网络请求、数据解析、UI设计、本地存储以及后台任务管理等多个方面的技术。...

    Android应用源码之android个人消费记录软件-拖控件作品.zip

    1. **数据存储**:在Android中,通常使用SQLite数据库来存储用户消费记录。源码可能会包含如何创建数据库表,插入、查询和更新消费数据的代码。 2. **用户界面(UI)设计**:拖控件(Drag and Drop)功能是应用的一...

    智慧校园考试系统程序.zip

    智慧校园考试系统程序是一个专为学校设计的在线考试平台,旨在提升教学效率,优化考试管理流程。这个程序源码的发布意味着用户可以查看、学习甚至修改代码,以便于定制适合自己学校需求的考试系统。源码通常包括前端...

    android应用源码仿小米便签.zip

    另外,云同步也是便签应用的一个常见特性,这涉及到网络请求和数据序列化。 4. **内容提供者(Content Provider)**:如果应用支持与其他应用共享数据,比如导出或导入便签,那么内容提供者是一个重要的组件。源码...

    Android应用源码任务提醒源码.zip

    一个Android应用通常由多个组件构成,如Activity(界面)、Service(后台服务)、BroadcastReceiver(广播接收器)以及ContentProvider(数据提供者)。在任务提醒源码中,Activity可能用于展示任务列表和创建新的...

    Android 备忘录源码.zip

    在Android开发领域,备忘录应用是一个常见的学习和实践项目,它可以帮助开发者深入理解Android系统的工作原理以及如何构建用户友好的界面。这份"Android 备忘录源码.zip"资源包含了一个完整的Android备忘录应用的源...

    Android 手机小闹钟源码.zip

    Android是一个开源的操作系统,它的源码公开了系统的每一个细节,从核心库到用户界面,从硬件抽象层到应用程序框架。通过研究源码,开发者可以学习到如何与硬件交互,如何管理内存,以及如何设计高效、稳定的应用...

    Android应用源码(精)网星工具箱.zip

    一个标准的Android应用主要由以下几个部分组成:Activity、Service、BroadcastReceiver、ContentProvider以及各种资源文件(如布局文件、图片、字符串资源等)。"网星工具箱"作为一款综合性应用,必然也遵循这样的...

    Android 小米便签源码.zip

    源码会展示如何在Android中创建数据库表,执行SQL操作,以及如何使用SharedPreferences来存储轻量级的数据。 3. **事件处理与交互**:Android的OnClickListener、OnCheckedChangeListener等接口用于处理用户交互。...

    Android应用源码之安卓家庭用药助手小项目.zip

    深入研究这个项目源码,开发者可以从中学到如何处理用户输入、如何实现本地数据存储、如何设置定时任务、如何创建和管理通知,以及如何设计和实现一个用户友好的界面。此外,对于医疗相关应用,还需要考虑隐私保护和...

    Android RSS阅读器的源码.zip

    本项目"Android RSS阅读器的源码"提供了实现此类应用的具体代码,对于学习Android应用开发,特别是对XML解析、网络请求和UI设计感兴趣的开发者来说,这是一个宝贵的资源。 首先,让我们深入了解一下RSS。RSS是一种...

    Android应用源码之高仿生日管家.zip

    在Android应用开发中,"高仿生日管家"的源码是一个很好的学习资源,它展示了如何构建一个功能完善的日程管理应用程序。这个应用的核心目标是帮助用户有效地管理生日和其他重要日期,提供提醒服务,以及定制化的界面...

    Android应用源码之生日管家.zip

    从这个标题我们可以推测,源码分析将涉及到Android开发的基本概念,包括但不限于用户界面设计、数据存储、事件处理以及提醒功能的实现。 【描述分析】 "Android应用源码之生日管家" 的描述简洁明了,没有提供额外的...

    Android 健康饮食搭配源码.zip

    首先,从标题我们可以推断,这个项目的核心是构建一个Android应用程序,用于指导用户进行健康饮食搭配。这涉及到以下几个关键知识点: 1. **Android Studio**:作为Android开发的官方集成开发环境(IDE),Android ...

    奥多停车小程序 (源码).zip

    前端部分主要负责展示页面、处理用户交互,后端部分则处理数据存储、计算以及与硬件设备的通信,例如停车场的车位状态更新。开发者可以通过阅读和分析这些代码,学习到如何设计和实现类似功能的小程序,例如: 1. ...

Global site tag (gtag.js) - Google Analytics