[英]How to prepare a large txt File to batch insert using Hibernate?
我試圖向 sql 數據庫插入超過 20 萬行,每一行代表一個卡片信息(70+ 字符串字段)。 在大型 TXT 文件中。 我(新 Java 開發人員)在這方面面臨着相當困難的時期,我的方法是:
File file = ReadFile.loadCardFile(pathName);
Stream<String> cardsStream = new BufferedReader(new InputStreamReader(new FileInputStream(file), ("UTF-8"))).lines());
cardsStream.forEach(s -> {
String[] card = Arrays.stream(s.split("\\|")).map(String::trim).toArray(String[]::new);
numberOfRows = insertCardService.setCard(card, numberOfRows);
CardService.save(Card);
使用這種方法最多需要 2 小時,這真的很長
有沒有更好的方法的建議,或者你能給我提供鏈接以更好地閱讀代碼嗎?
哦順便說一句,我想使用批量插入來顯着縮短時間,但我認為我讀取文件的方式是錯誤的! 提前致謝!!
默認情況下,hibernate 不會批量保存數據。 您可以通過設置以下參數來啟用它。
spring.jpa.properties.hibernate.jdbc.batch_size=50
spring.jpa.properties.hibernate.order_inserts=true
JPA 是這種操作的錯誤工具。 雖然可能可以使用 JPA 使其快速完成,但這樣做並不困難。 JPA 在加載一些實體、編輯一些屬性並讓 JPA 確定哪些確切更新是必要的工作流中效果最佳。 為此,JPA 進行了大量緩存,這可能會消耗大量資源。
但在這里,您似乎只想將一些相關的數據量泵入數據庫。 你不需要 JPA 來弄清楚要做什么,這都是插入。 您不需要 JPA 緩存。
我推薦 Springs JdbcTemplate
或NamedParameterJdbcTemplate
。 這可能已經大大加快了速度。
一旦成功,請考慮以下事項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.