我正在尝试使用以下方法一次插入所有数据:
userModel.setServiceData(gson.toJson(sortedResponse).getBytes());
这是因为大量数据导致内存不足。
所以我尝试使用类似的方法将数据分块添加到 postgres 数据库中:
byte[] chunkedMessage = {};
for (Iterator<Message> iterator = sortedResponse.iterator(); iterator.hasNext();) {
Message message = (Message) iterator.next();
chunkedMessage = gson.toJson(message).getBytes();
userModel.setServiceData(chunkedMessage);
}
显然,这将最终存储最后一个 block ,但不是所有 block 。
我正在使用 hibernate,所以想知道是否有任何简单的方法可以使用 hibernate 查询,或者可能像上面的代码一样简单。
最佳答案
不要使用数组(byte[]
),因为它需要为要插入数据库的完整数据分配内存并切换到流。将 userModel.serviceData
的类型从 byte[]
更改为 java.sql.Blob
,这允许从 InputStream 创建一个新的 Blob 实例或读者:
Blob blob = Hibernate.getLobCreator(session).createBlob(stream, size);
关于java - 如何将所有数据分块插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34433898/