suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Beste Möglichkeit: Mit Java 8 Millionen von Datensätzen in MySQL abrufen, verschlüsseln und aktualisieren

<p>Wir müssen etwa 10 Millionen Datensätze aus einer MySQL-Datenbank lesen, diese Datensätze verschlüsseln und die verschlüsselten Werte wieder in die Felder aktualisieren. Wie Sie diese Anforderung am effizientesten umsetzen. </p>

Diese Option scheidet daher aus. </p> <p><strong>2</strong>: Die Executor-Funktion in Java wurde bereits zuvor in einer unserer Anwendungen verwendet, um die Stapeleinfügung zu implementieren. Die Anzahl der Datensätze überschreitet jedoch nicht 50.000. Wir werden gebeten, einen ähnlichen Ansatz zu verwenden. Daher ist die Verwendung von Spring Batch ausgeschlossen. </p> <p>Ich suche nach möglichen Funktionen, die ich in Java 8/MySQL-Datenbanken berücksichtigen kann. </p> <p>Java 8: Verwenden Sie Executor für Multithreading, CompletableFuture für asynchrone Verarbeitung und Streaming. </p> <p>MySQL: Index erstellen...</p>

P粉211600174P粉211600174462 Tage vor630

Antworte allen(1)Ich werde antworten

  • P粉903052556

    P粉9030525562023-08-27 22:48:34

    • 对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倍。

    Antwort
    0
  • StornierenAntwort