【问题标题】:Best way to Retrieve , Encrypt and Update millions of records to MySQL using Java 8使用 Java 8 检索、加密和更新数百万条记录到 MySQL 的最佳方法
【发布时间】:2022-01-23 15:39:07
【问题描述】:

我们需要从 MySQL DB 读取大约 1000 万条记录,加密记录并使用加密值更新字段。 如何以最有效的方式实施。

1:使用 AES_ENCRPTY 从 MySQL DB 进行字段级加密:据我了解,AES_ENCRYPT 可以有效地与 varbinary 一起使用,但我们的字段仅是 varchar。 所以排除了这个选项

2:之前在我们的一个应用程序中使用 Java 中的 Executor 功能实现了批量插入。但是记录的数量不超过 50k。我们被要求使用类似的方法。排除使用 Spring Batch 实现

我正在寻找 Java 8 / MySQL DB 中需要考虑的可能特性。

Java 8:使用 Executor 的多线程,异步处理的 Completable Future,流

MySQL:创建索引……

【问题讨论】:

    标签: mysql spring-boot performance java-8 large-data


    【解决方案1】:
    • 对 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 倍。

    【讨论】:

    • 谢谢瑞克。一次迭代 1000 行有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多