亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

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

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