Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过JdbcBatchItemWriter基于主键插入/更新。在这种情况下,oracle merge会有任何性能问题吗?_Java_Database_Spring Batch_Batch Updates - Fatal编程技术网

Java 通过JdbcBatchItemWriter基于主键插入/更新。在这种情况下,oracle merge会有任何性能问题吗?

Java 通过JdbcBatchItemWriter基于主键插入/更新。在这种情况下,oracle merge会有任何性能问题吗?,java,database,spring-batch,batch-updates,Java,Database,Spring Batch,Batch Updates,我需要根据记录是否已经存在来插入或更新记录 我正在使用JdbcBatchItemWriter编写记录。但是如果带有主键的记录已经存在,我应该更新它 因此,一个解决方案是: 要创建两个单独的列表,一个用于插入,一个用于更新(注意:每次我必须在处理器中检查记录是否已存在,从而将记录添加到列表中的一个),并且在我的writer中有两个不同的JdbcBatchItemWriter实例,例如: JdbcBatchItemWriter<insertList> insertWriter; Jdbc

我需要根据记录是否已经存在来插入或更新记录

我正在使用JdbcBatchItemWriter编写记录。但是如果带有主键的记录已经存在,我应该更新它

因此,一个解决方案是:

要创建两个单独的列表,一个用于插入,一个用于更新(注意:每次我必须在处理器中检查记录是否已存在,从而将记录添加到列表中的一个),并且在我的writer中有两个不同的JdbcBatchItemWriter实例,例如:

JdbcBatchItemWriter<insertList> insertWriter;
JdbcBatchItemWriter<updateList> updateWriter;
JdbcBatchItemWriter-insertWriter;
JdbcBatchItemWriter updateWriter;
根据批量更新时已存在的记录,是否有其他方法在writer中的查询之间切换…即。 就一个

JdbcBatchItemWriter<mylist> allWriter...and 
allWriter.write(mylistallitems);
JdbcBatchItemWriter allWriter…和
allWriter.write(mylistallitems);

我正在考虑使用合并查询……但是否存在性能问题?

有两个不同的列表可能是更好的选择,因为如果将来有不同的持久化机制,则无需重新设计应用程序。您可能希望使用单个查询从DB获取所有现有主键,将其存储在集合持有者中,并在处理器中引用它

对“Oracle Merge Performance”等进行简短搜索,可以发现由于不同的因素而导致的多个性能问题实例&可能比精心编制的insert/update SQL慢


此外,如果您再次收到完整的数据(对于更新),您可能需要考虑截断插入方法[通过添加监听器删除之前插入] < /p>可能的感谢的副本,进一步我正在考虑使用Oracle合并来进行此操作,您能告诉我使用oracle merge是否会出现性能问题吗