繁体   English   中英

一种将多个记录一起插入的方法?

A way to upsert multiple records together?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想看看是否有办法改进数据的插入和更新方式。

我正在使用 ORACLE DB 和 JDBC。

我正在做的当前方法是在检查toUpdate是否为true之后使用 FOR 循环更新(例如)客户记录。 一个示例,例如下面的示例代码,然后调用现有的 DAO update()来执行此操作。 但这不允许将多个数据一起进行 UPSERT。

但是,有没有更好的方法将多个数据一起 UPSERT?

        if (toUpdate) {
            for (Customer customerRec : customerRecList) 
                customerRecDAO.update(customerRec);
        }
1 个回复

是的,您可以使用批处理:

public <T> int saveInBatch(List<T> records, String sql, Function<T, MapSqlParameterSource> paramFn){

try{
MapSqlParameterSource[] params = records.stream().map(paramFn).toArray(MapSqlParameterSource[]::new);
int rowCount = jdbcTemplate.batchUpdate(sql, params);
return Arrays.stream(rowCount).sum();
}
catch(Exception e){
//exception handling 
}
}

paramFn是 function 的 lambda 以便您可以将 map 记录到它们的值。 例子可能是

(record)->{
return new MapSqlParameterSource("username" ,username),Integer.class);//just example
}

为什么我们使用 MapSqlParameterSource

您可以通过传递较小批次或自定义批次记录的方式调用 saveInBatch。 假设您有一百万条记录,那么您可能希望一次只更新 200-400 条记录,因此您可以执行以下操作:

private <T> int saveRecords(List<T> records, String sql, Function<T, MapSqlParameterSource> paramFn) throws Exception{

return Lists.partition(records, 300).stream().map(batch-> saveInBatch(batch, sql, paramFn)).mapToInt(Integer::intValue).sum();
}

Note:上面没有得到很好的优化,或者没有充分利用流,但这是我很久以前尝试过的工作代码:)。

1 更新查询多个记录

在MongoDB中,如何一次一次插入多个json格式的文件? 我可以使用来添加单个记录 但是,我该如何上传一个包含数百万条记录的json文件? {“名称”:“ mouli”,“公司”:“ jp morgan”,“大小”:40,“角色”:“建筑师”} {“名称”:“ siva” ...

2016-10-14 08:00:24 1 151   mongodb
2 UPSERT多记录MSSQL

我目前有一个MySQL服务器,但目前正在迁移到MS SQL Server。 我试图在C#应用程序的表中每批插入很多(2000)或记录。 我想复制MySQL的“ REPLACE INTO”(替换)(UPSERT),如果记录存在,我想更新它,如果记录不存在,我想插入它。 我目前有一个这样的 ...

3 使用MongoDb升级多个记录

我试图让MongoDB使用以下查询来追加多个记录,最终使用MongoMapper和Mongo ruby​​驱动程序。 如果所有记录都存在,则此方法可以正常工作,但不会为不存在的记录创建新记录。 以下命令具有shell所需的效果,但从ruby驱动程序可能并不理想。 我可以循环遍历 ...

5 猫鼬:有效地向上插入多个记录及其子记录

我正在构建一个Node / MongoDB / Mongoose同步服务器应用程序。 我的模式的简化版本如下所示: 当timeline属性打算是对以下实例的引用的数组时: 客户端应用程序将20个dayTimeline json字典数组传递给服务器子应用程序,每个字典都包含1 ...

6 在 PyMongo 中使用多个过滤器更新多条记录

我有一个 API 连接,它使用 output 获取各种股票的最后 3 个数据,如下所示: 我需要将所有记录更新到我的 mongodb 数据库中。 但是我不能仅基于“时间”和“符号”进行过滤,因为 API 数据有时会出现 null “价格”或“数量”,并且数据可能会不时更改。 (我应该注意到这很少见 ...

8 使用外部ID将多个记录上传到Salesforce中

我正在使用php工具套件将记录更新到salesforce中。 Salesforce在一天中最多可插入28000个插件。 因此,要避免这种情况,我想做的是将150个recor插入一个阵列中,然后将其插入Salesforce。 这样一来,150条记录将只命中一次,并且我可以将更多数据上传到Sa ...

10 MongoDB C# 插入一长串记录的最佳方法

当我在 Mongo 集合中插入多个文档时,我遇到了一个问题,因为我有很多未发布的 memory 使用。 为了执行 upsert 操作,我使用BulkWriteAsync ,当我第一次看到问题时,我确实将集合拆分为不同的块,以便我认为服务器会更好地处理它。 UPSERT function 看起来像这 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM