Java 通过ETL过程更新数据库的有效方法?
我有一个从源代码(例如,源代码repo)提取组件的工作流。然后将它们与数据库中的持久化组件进行比较,并传播任何添加、修改和删除。我有以下算法:Java 通过ETL过程更新数据库的有效方法?,java,database,performance,Java,Database,Performance,我有一个从源代码(例如,源代码repo)提取组件的工作流。然后将它们与数据库中的持久化组件进行比较,并传播任何添加、修改和删除。我有以下算法: propagate(components) { // Bulk replace for (component in components) { componentName = component.getName(); if !componentPersistence.get(componentName).eq
propagate(components) {
// Bulk replace
for (component in components) {
componentName = component.getName();
if !componentPersistence.get(componentName).equals(componentName)
componentPersistence.update(component);
else
componentPersistence.add(component);
}
componentPersistence.deleteAllExcept(components);
}
什么是该计划更有效的实施方式?我认为有一种方法是这样的:
如果您使用的是oracle,则可以通过合并操作进行插入和更新。为什么用java标记?
delete from components c
where not exists (select 1 from temp_components t where t.name =
c.name)
update components c
set field = (select t.field from temp_components t where t.name = c.name)
where exists (
select 1 from temp_components t where t.name = c.name
)
insert into components (name, field)
select t.name, t.field
from temp_compoments t
where not exists (
select 1 from component c where c.name = t.name
)