-
定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?谢谢各位大侠!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个答案 按时间排序 按投票排序
-
采纳的答案
引用
这次你应该清楚了我的问题了,很高兴,表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个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
-
引用
理解我的问题有点偏差哦,不用比较目标表,我从oracle中取到新增的数据就行了,我打个比喻吧:假设我第一次读取oracle表是要全表读的,设定定时时间为1分钟,一分钟后我又要读oracle中的数据,那么第一次读的数据就不用第二次再读一遍,而是只读这一分钟内有哪些新增的数据,取得新增的数据插入到sybase表中,因为两张表数据一样,取得oracle中的新增数据也是sybase没有的数据,所以不用比较sybase中的数据,直接插入!
oracle表中增加读取标识位字段,默认为0,已经同步过的,设置标识位为1,下次oracle表再有新数据增加的话,那么只读标识位为0的就可以了。
如果不想破坏oracle表的结构,自己在oracle上新增一个临时表,来存储已经同步过的oracle数据的主键标识也行。2012年1月06日 18:16
-
引用
这两个表不是在同一个数据库的,一个在oracle,另一个在sybase,是这种情况,把oracle中的表数据存到sybase表中,在大数据量情况下要考虑性能,定时任务不要读已经拿到的数据,只要拿新增的数据,然后存到sybase中!
我还想问一个问题,重复数据是oracle表数据有重复,还是oracle表与sybase表的数据有重复?
如果是oracle表数据有重复,这个最好办,oracle的数据查询出来,使用distinct或union select * from dual一下,就能把重复数据去掉了。
如果是oracle表与sybase表的数据有重复,那么在不读取sybase表的情况下,怎么知道oracle表中哪些数据是重复数据呢?
2012年1月06日 17:36
-
引用这个操作不是在数据库中哦,是在程序中操作数据库哦,用java操作。
一样的,程序也操作数据建表,使用pl/sql程序,做集合运算等操作,我说的是大部分操作使用数据库完成,这样能显著提高效率,如果只是用java程序的话,那考虑下面两种方法:
1 源表中的数据一条一条地取出来,对比目标表,实现不重复插入;
2 两个表的数据都取出来,采用内存hash join的方式,得到源表-目标表的差集数据,然后插入到目标表中2012年1月06日 16:21
-
考虑一下几种方法:
将源表同步到目标数据库(改成一个临时表)
方法一: 两个表数据量都不大的情况下,使用union关键字去掉重复数据后,把得到的数据重建建一张表,删除以前的表,改名为目标表。
方法二: 数据量稍大,使用minus关键字,获取存在于源表但不存在于目标表的数据,然后将的到的差集一条一条地插进目标表。
方法三: 目标表建立索引,查询出源表当中不存在于目标表的数据(使用exists关键字,不要用in),然后将得到的数据一条条地插入到目标表中。
以上方法,如果是在oracle数据库中,建议使用pl/sql程序完成,速度快!2012年1月06日 15:27
相关推荐
1. 数据源管理:支持多种数据源接入,如SQL数据库、NoSQL存储、API接口等,方便用户从不同数据源获取并整合数据。 2. SQL查询与数据处理:提供强大的SQL编辑器,支持复杂的查询语句,以及数据清洗、转换等功能,...
在Android平台上,开发一款随手记记账应用是一个常见的任务,涉及到许多关键的编程技术和概念。...通过深入研究,你可以了解到如何构建一个完整的Android应用,并掌握在实际开发中处理财务数据的方法。
总的来说,通过研究这个“Android应用源码之中文天气预报程序”的源代码,开发者可以学习到如何在Android平台上构建一个完整的应用,包括网络请求、数据解析、UI设计、本地存储以及后台任务管理等多个方面的技术。...
1. **数据存储**:在Android中,通常使用SQLite数据库来存储用户消费记录。源码可能会包含如何创建数据库表,插入、查询和更新消费数据的代码。 2. **用户界面(UI)设计**:拖控件(Drag and Drop)功能是应用的一...
智慧校园考试系统程序是一个专为学校设计的在线考试平台,旨在提升教学效率,优化考试管理流程。这个程序源码的发布意味着用户可以查看、学习甚至修改代码,以便于定制适合自己学校需求的考试系统。源码通常包括前端...
另外,云同步也是便签应用的一个常见特性,这涉及到网络请求和数据序列化。 4. **内容提供者(Content Provider)**:如果应用支持与其他应用共享数据,比如导出或导入便签,那么内容提供者是一个重要的组件。源码...
一个Android应用通常由多个组件构成,如Activity(界面)、Service(后台服务)、BroadcastReceiver(广播接收器)以及ContentProvider(数据提供者)。在任务提醒源码中,Activity可能用于展示任务列表和创建新的...
在Android开发领域,备忘录应用是一个常见的学习和实践项目,它可以帮助开发者深入理解Android系统的工作原理以及如何构建用户友好的界面。这份"Android 备忘录源码.zip"资源包含了一个完整的Android备忘录应用的源...
Android是一个开源的操作系统,它的源码公开了系统的每一个细节,从核心库到用户界面,从硬件抽象层到应用程序框架。通过研究源码,开发者可以学习到如何与硬件交互,如何管理内存,以及如何设计高效、稳定的应用...
一个标准的Android应用主要由以下几个部分组成:Activity、Service、BroadcastReceiver、ContentProvider以及各种资源文件(如布局文件、图片、字符串资源等)。"网星工具箱"作为一款综合性应用,必然也遵循这样的...
源码会展示如何在Android中创建数据库表,执行SQL操作,以及如何使用SharedPreferences来存储轻量级的数据。 3. **事件处理与交互**:Android的OnClickListener、OnCheckedChangeListener等接口用于处理用户交互。...
深入研究这个项目源码,开发者可以从中学到如何处理用户输入、如何实现本地数据存储、如何设置定时任务、如何创建和管理通知,以及如何设计和实现一个用户友好的界面。此外,对于医疗相关应用,还需要考虑隐私保护和...
本项目"Android RSS阅读器的源码"提供了实现此类应用的具体代码,对于学习Android应用开发,特别是对XML解析、网络请求和UI设计感兴趣的开发者来说,这是一个宝贵的资源。 首先,让我们深入了解一下RSS。RSS是一种...
在Android应用开发中,"高仿生日管家"的源码是一个很好的学习资源,它展示了如何构建一个功能完善的日程管理应用程序。这个应用的核心目标是帮助用户有效地管理生日和其他重要日期,提供提醒服务,以及定制化的界面...
从这个标题我们可以推测,源码分析将涉及到Android开发的基本概念,包括但不限于用户界面设计、数据存储、事件处理以及提醒功能的实现。 【描述分析】 "Android应用源码之生日管家" 的描述简洁明了,没有提供额外的...
首先,从标题我们可以推断,这个项目的核心是构建一个Android应用程序,用于指导用户进行健康饮食搭配。这涉及到以下几个关键知识点: 1. **Android Studio**:作为Android开发的官方集成开发环境(IDE),Android ...
前端部分主要负责展示页面、处理用户交互,后端部分则处理数据存储、计算以及与硬件设备的通信,例如停车场的车位状态更新。开发者可以通过阅读和分析这些代码,学习到如何设计和实现类似功能的小程序,例如: 1. ...