Sac*_*hin 5 java oracle jdbc oracle11g batch-processing
我有一个超过100万行的用户表(Oracle 11g数据库),其中包含纯文本的所有用户密码,我试图使用SHA512算法(哈希和盐)进行哈希.从下面开始是我的Java类从用户表读取所有记录,哈希并更新回用户表.
setFetchSize(1000)
)try {
ps = con.prepareStatement("update user set password=? where ID=?");
psSel = con.prepareStatement("select ID, password from user");
psSel.setFetchSize(1000);
rs = psSel.executeQuery();
String hashPassword = null;
while (rs.next()) {
long id = rs.getLong(1);
String pwd = rs.getString(2);
hashPassword = <<CALL TO PASSWORD HASHING UTIL>>;
ps.setString(1, hashPassword);
ps.setLong(2, id);
ps.addBatch();
//Every 5000 records update and commit
if(++count % batchSize == 0) {
ps.executeBatch();
con.commit();
}
}
ps.executeBatch();
con.commit();
} catch (SQLException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
要更新100,000条记录,上述方法需要接近8分钟,我觉得这很高.
使用的数据库: Oracle 11g
Java版本: 1.6
环境: Windows 7
我不确定我是否遗漏了什么.您能建议或推荐任何处理此类散装货物的最佳方法吗?
我再看一下临时表 - 我之前创建的USER,可以看到没有向ID列添加主键约束.我继续为ID列添加PK约束并重新运行我的实用程序.现在只需36秒即可处理100,000行.
为了确保双重确定,我还创建了另一个没有PK约束的临时表USER_TMP2并运行了我的实用程序,通常需要8分钟才能完成100,000
归档时间: |
|
查看次数: |
1166 次 |
最近记录: |