【发布时间】:2014-11-20 03:20:08
【问题描述】:
我有一张包含大量数据的地图(大约有 300,000 条记录)
并如下迭代,
for (Map.Entry<String, List<ClassOBj>> entry : testMap
.entrySet()) {
// send email with map keys as email'id
// email content is populated from the list
// Perform a sql update to the column with the dyanamic value generated here with the email'id
}
如上所述,我担心在for 循环内执行上述操作会导致性能问题。
更新:
场景是。我正在迭代一个包含大量数据的地图,
在迭代它时,我得到了用户 ID,我必须计算用户 ID。例如,考虑userid+some constants,这应该在数据库表中更新。
并且还应该与我的地图中的列表值一起添加到电子邮件内容中
所以我认为批量更新是不可能的,我的理解是否正确?
我应该遵循这种方法吗?或选择其他想法
【问题讨论】:
-
理想的情况是不要进行昂贵的资源调用——比如循环中的数据库调用。使用中间集合存储数据并使用批量更新/批量删除。如果是
Hibernate,则在循环后执行flush。 -
感谢您的建议。正如我已经解释了执行的操作。您可以看到批量更新无法在此处生成动态值来执行
-
使用密钥创建地图以存储电子邮件和值 - 如果您需要任何动态值。不做 SQL 更新,而是添加到 map(虽然它是动态的,但所有可以更新的值都在 map 中)。您可以考虑可以直接更新的地图值。
-
更新了我的问题。希望现在很清楚
-
循环做两件事? 1 发送电子邮件和 2 更新数据库?你能添加一些你在循环中做什么的虚拟例子吗?
标签: java performance for-loop map