最佳方法:使用Java 8在MySQL中檢索、加密和更新數百萬筆記錄
P粉211600174
P粉211600174 2023-08-27 00:17:18
0
1
642
<p>我們有一個需求,需要從MySQL資料庫讀取大約1000萬筆記錄,對這些記錄進行加密,並將加密後的值更新回字段中。 如何以最有效率的方式實現這個需求。 </p> <p><strong>1</strong>:使用AES_ENCRYPT從MySQL資料庫進行字段層級的加密:據我了解,AES_ENCRYPT在varbinary上可以有效地工作,但我們的字段只是varchar類型。 因此排除了這個選項。 </p> <p><strong>2</strong>:先前在我們的一個應用程式中已經使用了Java中的Executor功能來實現批次插入。但記錄數不超過5萬筆。我們被要求使用類似的方法。因此排除了使用Spring Batch來實現。 </p> <p>我正在尋找在Java 8 / MySQL資料庫中需要考慮的可能功能。 </p> <p>Java 8:使用Executor進行多執行緒處理,使用CompletableFuture進行非同步處理,使用Streaming。 </p> <p>MySQL:建立索引...</p>
P粉211600174
P粉211600174

全部回覆(1)
P粉903052556
  • 對10M行資料進行任何操作都需要很長時間,並且可能會導致逾時。
  • 如果您正在儲存到MySQL中,您只能使用VARBINARYBLOB
  • 確保宣告的資料型別至少比來源資料大一點。 (SELECT MAX(LENGTH(col)) FROM tbl)可以給出最大長度。
  • 考慮建立一個新表,在複製資料時將其轉換為新表中的其他欄位。然後進行測試。
  • 考慮每次迭代處理1000行數據,使用PRIMARY KEY來追蹤“上次停下來的位置”,如果可行的話。 (不要使用OFFSET)。有關分塊的更多資訊:http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks
  • 是的,使用某種批次插入方式。但是將批量的總大小限制在1MB左右。 (16MB很難通過)。這可能會使您的數據量低於上面提到的1K。
  • 對整個表格進行操作所需的時間不會與一次性操作相比,每次處理1K行有很大的差異。
  • 在加密資料時,將資料壓縮也可能值得一試。這可能會使磁碟佔用空間縮小3倍。
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板