gpt4 book ai didi

java - 提高此场景性能的方法

转载 作者:行者123 更新时间:2023-12-02 06:58:39 24 4
gpt4 key购买 nike

我有一张 map ,其中填充了大量数据(大约 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循环中执行上述操作会导致性能问题。

更新:

场景是。我正在迭代一个包含大量数据的 map ,

在迭代它时,我得到了用户 ID,我必须计算用户 ID。例如,考虑 userid+some constants,这应该在数据库表中更新。

并且还应该与我的 map 中的列表值一起添加到电子邮件内容中

所以我认为批量更新是不可能的,我的理解是否正确?

我应该采用这种方法吗?或采用任何其他想法

最佳答案

for 循环耗时有两个原因。 1) 个人电子邮件通过更少的传输连接进行改进
2)个人 promise 通过

改进它

所以理想的是同时处理这两者,我建议批量处理 1000 个,然后玩数字

例子

int BATCH_SIZE = 1000
conn = DriverManager.getConnection("username","password");
conn.setAutoCommit(false);
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
int count = 0;

Map<String, String> emails_map = new HashMap(BATCH_SIZE)<String, String>;
for (Map.Entry<String, List<ClassOBj>> entry : testMap
.entrySet()) {
String email = get_useremail();
String const_val = do_magic(); // this is how you are computing some constant
String body = construct_body();

count++;
String SQL = "YOUR UPDATE STATEMENT";
stmt.executeUpdate(SQL);
emails_map.put(email, body); // can create
if (count % BATCH_SIZE == 0) {
//commits all transcations
conn.commit();
//bulk send emails sending
//http://stackoverflow.com/questions/13287515/how-to-send-bulk-mails-using-javax-mail-api-efficiently-can-we-use-reuse-auth

bulk_emails_send(emails_map)
}

}


public void bulk_emails_send(Map<String, String> emails_map) {
// Get the default Session object through your setting
Session session = Session.getDefaultInstance(properties);
Transport t = session.getTransport();
t.connect();
try {
for (String email_id in emails_map) {
Message m = new MimeMessage(session);
//add to, from , subject, body
m.saveChanges();
t.sendMessage(m, m.getAllRecipients());
}
} finally {
t.close();
}
}

关于java - 提高此场景性能的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com