java - 为什么在 PostgreSQL 数据库中插入数据似乎比在 Oracle 数据库中花费更多的时间?
问题描述
我有一个带有流、步骤、读取器、处理器、写入器的春季批处理,它们将数据从一个数据库源复制到另一个数据库源(作为 Oracle 数据库)。该批次在处理数百万条数据时运行良好且快速。我现在想重用下面这个完全相同的方法在 PostgreSQL 数据库中写入相同的数据,因此getSessionFactory()
方法调用根据我的需要返回适当的会话工厂。但问题是似乎什么都没有发生,或者它只是异常地很长。
我想知道为什么会有这样的差异。我们可以与 PostgreSQL 并行执行的插入数量是否有某种限制?或者这段代码有什么问题吗?
public void myMethod(List<MyObject> list) {
SessionFactory sessionFactory = getSessionFactory();
sessionFactory.getCurrentSession().doWork(connection -> {
StringBuilder stringBuilder = new StringBuilder("INSERT INTO \"SOME_TABLE\" (\"ID\", \"SOME_COLUMN\", \"UPDATED_AT\") VALUES (?, ?, ?)");
try (PreparedStatement preparedStatement = connection.prepareStatement(stringBuilder.toString())) {
int i = 0;
for (MyObject myObject : list) {
preparedStatement.setBigDecimal(1, new BigDecimal(myObject.getId()));
preparedStatement.setBigDecimal(2, new BigDecimal(myObject.getSomeColumnValue()));
preparedStatement.setDate(3, new Date(System.currentTimeMillis()));
preparedStatement.addBatch();
if (++i % 500000 == 0 || i == list.size()) {
preparedStatement.executeBatch();
}
}
}
});
}
解决方案
推荐阅读
- python - 赋值前引用的变量,但我之前赋值过
- javascript - 为什么我的 HTML5 画布边缘的线条变得不那么不透明?
- python - 如何连接熊猫数据框中的三列,并用下划线`_`连接?
- python - 如何将单个多项式曲线拟合到散点图
- html - 在 HTML/CSS 中用矩形动态覆盖图像
- java - java.net.CookieManager put SEVERE: Invalid cookie for [URL]
- scala - 抽象类与方法之间的Scala差异
- python - 如何根据条件将数据框值附加到空列表
- python - Python输入验证函数保留旧变量
- mysql - 无法将 mariadb 服务器连接到 mysql 工作台