-
如何高效实现批量插入数据,并去重0
现需要实现定期将项目A的数据同步到项目B中,从项目A提供了基于HTTP的接口获取数据,解析数据,并将解析到的数据批量插入到项目B的数据库中,但是有一个要求插入之前必须要判断当前数据是否存在,如果存在则不插入,有什么高效的方式实现。2014年6月14日 17:15
11个答案 按时间排序 按投票排序
-
最近刚做了一个你说的类似需求:
我的业务需求是,
从oracle数据库中获取数据,然后同步到sqlserver中。
首先是配置两个数据库之间的连接设置。
我是sqlserver 连接oracle 配置sqlserver的链路服务器就OK。
下面是存储过程的内容了:
1. 创建临时表。
通过远程连接,insert into 临时表 select 远程表 。
获取数据先到本地,。
然后用 临时表的数据,跟你本地业务表的数据进行对比。
查询不通的数据。-- (1) 远程读取NC需求计划,分组汇总数据后,插入到临时表 #tmp_pl_plan中。 set @InsertStrSQL = @InsertStrSQL+ @tmpStrSQl; print(@InsertStrSQL) ; exec(@InsertStrSQL); select @tmpCont = count(1) from #tmp_pl_plan ; -- state:0新增、1修改、2删除 -- (2) 用本地数据与临时表中的数据,进行对比,更新本地表中计划数量与临时表中不相等的记录. update t set t.plnum = a.plnum ,t.state = 1 from #tmp_pl_plan a,NC_PL_PLAN t where a.factorycode = t.factorycode and a.weldingdate = t.weldingdate and a.divisions = t.divisions and a.zzmadeline = t.zzmadeline and a.zzweldingwayCode = t.zzweldingwayCode and a.zzmadelinetypeCode = t.zzmadelinetypeCode and a.convertedcode = t.convertedcode and a.ncfprocode = t.ncfprocode and t.plnum != a.plnum and t.weldingdate >= @fbegdate and t.weldingdate <= @fenddate -- (3) 对比数据,查找本地表中存在,但是临时表中不存在的记录,然后修改本地表中的数量=0 ,state = 3 表示删除 update t set t.plnum = 0 ,t.state = 2 from NC_PL_PLAN t where t.weldingdate between @fbegdate and @fenddate and not exists ( select 1 from #tmp_pl_plan a where a.factorycode = t.factorycode and a.weldingdate = t.weldingdate and a.divisions = t.divisions and a.zzmadeline = t.zzmadeline and a.zzweldingwayCode = t.zzweldingwayCode and a.zzmadelinetypeCode = t.zzmadelinetypeCode and a.convertedcode = t.convertedcode and a.ncfprocode = t.ncfprocode ); -- (4) 对比数据,新增临时表中不存在于当前表的数据 --delete NC_PL_PLAN; insert into NC_PL_PLAN select * from #tmp_pl_plan t where t.weldingdate between @fbegdate and @fenddate and not exists ( select 1 from NC_PL_PLAN a where a.factorycode = t.factorycode and a.weldingdate = t.weldingdate and a.divisions = t.divisions and a.zzmadeline = t.zzmadeline and a.zzweldingwayCode = t.zzweldingwayCode and a.zzmadelinetypeCode = t.zzmadelinetypeCode and a.convertedcode = t.convertedcode and a.ncfprocode = t.ncfprocode and a.weldingdate >= @fbegdate and a.weldingdate<= @fenddate ) order by t.weldingdate desc ;
2014年9月18日 10:09
-
分2步骤做:
1.首先用关键字区建立2类记录,即已经存在的记录和不存在的记录;
2.对已经存在的记录进行一次批量的Update操作,不做数据的比对工作;
3.对不存在的记录进行一次批量的insert操作;
这个样的效率要高很多。至于你用什么做批量操作就要看你用的数据库了。2014年7月25日 15:42
-
你可以试试开源的Kettle ETL抽取工具,很好用。设置数据源及源库和目标库
新建转换--加入输入--更新\插入操作。效率比较高2014年7月21日 13:14
-
个人感觉,通过新建临时表,现将数据插入到临时表中,在通过sql中去重语句去掉重复的记录,然后在将临时表中的数据通过方式同步到另外的数据库中,这样相对安全和效率来说,还算可以。
2014年7月21日 10:57
-
从题主的描述来看:
1:定期同步 :说明数据实时性要求不高,只是周期性同步。
2:HTTP的接口获取数据 :用HTTP说明数据量不大。
不了解题主所说的高效指的什么:
两种可能:
高效开发,维护:即最小开发量,日后维护量也小。
高效同步数据:即数据快速同步。
可选择的方案是:文件全量同步,ftp+shell脚本+sqlloader全是配置工作,开发量最小,好维护。同时sqlloader装载速度最快,全量同步,不用考虑数据一致性问题。
如果无法做全量同步,只能增量的话,就要考虑数据重复,及一致性问题。
比较好的方案是:先装载到临时表,然后库内做merge,update.2014年7月17日 17:23
-
数据库如果是Oracle,请采用存储过程进行。
存储过程应该采用SaveorUpdate的形式。
即记录先Update,根据Update结果,决定Insert数量
以上2014年6月15日 22:33
-
数据库插入数据的话,不同的数据库产品不是有对应的操作原语吗,比如update *** if exist,insert *** if exist之类的。
2014年6月15日 12:52
相关推荐
3. **批量插入**:ThinkPHP提供了`insertAll()`方法用于批量插入数据。这个方法接收一个包含多条记录的数组,并一次性插入数据库。示例如下: ```php $result = $userModel->insertAll($data); ``` 这里的`$...
2. ORM框架:Hibernate、MyBatis等ORM框架提供了批量插入、更新、删除的功能,简化数据库操作。 3. NoSQL存储:MongoDB、Cassandra等NoSQL数据库也支持批量操作,适用于非结构化或半结构化数据。 四、性能优化 1....
为提高插入速度,可以使用批量插入,即将多条数据组合成一个批次一起插入。例如,可以创建一个存储过程,接收一个包含所有数据的表变量,然后一次性插入到目标表。 2. **使用BULK INSERT命令**: SQL Server提供了...
3. 批量导入策略:批量导入数据时,有多种方法可以提高效率,如分块导入(将大文件拆分为小块,逐块导入)、使用事务(确保所有数据要么全部导入,要么都不导入)、预处理数据(清理、格式化、去重等)。 4. 防重复...
- 数据去重:在插入数据前,检查是否已存在相同的记录,避免重复插入。 总结来说,从爬取数据到存储到MySQL数据库,涉及Python爬虫技术、HTML解析、数据库操作以及网络请求等多个方面。掌握这些技能,能让我们有效...
数据导入可以使用INSERT INTO语句,或者在大量数据情况下,考虑使用LOAD DATA INFILE语句,它能快速高效地批量插入数据。 在Windows服务程序中配置MySQL,可以使用MySQL的安装程序或“服务”管理工具。设置MySQL为...
为了提高效率,工具可能采用批量插入的方式,减少与数据库的交互次数。 5. **错误处理**:在导入过程中,可能会遇到数据格式错误、约束冲突等问题。批量导入工具会记录这些错误,允许你查看并修复后再尝试导入,而...
【标题】中的“bloomfilter-project”是一个基于布隆过滤器(Bloom Filter)实现的去重服务项目,它提供了一种服务化的解决方案,允许在客户端进行单个或批量数据的去重操作。 【描述】进一步说明了这个项目的核心...
LOAD DATA INFILE可以直接从文件中读取数据并快速插入,而bulk_insert_buffer_size可以缓存批量插入的数据,减少磁盘I/O。 7. **索引策略**: 插入大量数据时,如果表有索引,那么插入速度会受到一定影响,因为...
3. **使用临时表**:如果数据量非常大,还可以考虑先将去重后的数据存入临时表,然后再批量插入目标表,以减少频繁的磁盘I/O操作。步骤如下: - 创建临时表:`CREATE TEMPORARY TABLE temp_target LIKE t_source;` ...
- 文本去重软件"文本去重.exe"可能是基于上述的一种或多种方法实现的,它可能提供了图形用户界面,方便用户上传文件、设置参数,并显示去重结果。 - 软件可能支持批量处理,对大量文本文件进行快速去重,提高工作...
标题中的“Test_GSZ_ODBC版本2022019_145可以做到3S写入10万行数据”表明这是一个测试项目,使用了特定版本的GSZ ODBC驱动程序,能够实现高效的数据导入性能。在描述中提到了在Windows 10专业版操作系统上,利用ODBC...
此外,"04 3.4 批量数据表示与操作.pptx"、"12 第五章 输入输出处理(下).pptx"、"10 11第六章 函数与模块.pptx"和"07 第二章 算法概述(下).pptx"分别涉及批量数据处理、输入输出操作、函数与模块的使用,这些都是...
本文将详细介绍如何利用`DataTable`与`SqlBulkCopy`类实现快速的数据批量导入,使百万条数据的导入时间缩短至几秒内。 #### `DataTable`简介 `DataTable`是.NET Framework中用于存储和操作数据的一种结构,它类似...
6. **批量插入**:如果数据量非常大,可以考虑编写T-SQL脚本进行批量插入,以提高效率。但这需要对SQL语句有一定了解。 7. **定时导入**:为了定期更新数据库,可以设置计划任务或使用SSIS包来自动化这个过程。 8....
Kettle Spoon支持多种加载策略,包括批量插入、分批插入、实时流式加载等。同时,它还能处理并发和错误处理,确保数据准确无误地导入到目标系统。 ### 工作流与作业 Kettle Spoon中的工作流(Job)和转换...
为了提高效率和确保数据一致性,可以使用批量插入操作,并考虑数据去重策略。 此外,为了确保爬虫的稳定性和持久性,通常会实现错误处理机制,如try-except语句捕获异常,以及使用logging模块记录爬虫运行日志。...
8. 大量数据插入错误:数据库报错可能是由于事务过大导致的,可以使用批量插入、分批插入或事务控制来避免。另外,优化SQL语句、索引设计和硬件配置也能有效提高插入效率。 9. 数据去重算法:对于具有主键和外键...
Kettle支持多种加载方式,如直接插入、批量插入、更新或删除等,并且可以处理大量数据的高效加载。 4. **Kettle工具**:Kettle是一种Java编写的企业级ETL工具,其特点在于强大的数据处理能力、灵活的插件机制以及...
这涉及到空值处理、异常值检测、重复数据去重等操作。 3. **数据转换(Transform)**:数据转换是将抽取的数据转换为适合目标系统格式的过程。这可能包括数据类型转换、数据规约(如聚合、分组)、数据标准化、数据...