>  Q&A  >  본문

최선의 방법: Java 8을 사용하여 MySQL에서 수백만 개의 레코드를 검색, 암호화 및 업데이트합니다.

<p>우리는 MySQL 데이터베이스에서 약 천만 개의 레코드를 읽고, 이러한 레코드를 암호화하고, 암호화된 값을 다시 필드로 업데이트해야 한다는 요구 사항이 있습니다. 가장 효율적인 방법으로 이 요구 사항을 달성하는 방법. </p>

따라서 이 옵션은 제외됩니다. </p> <p><strong>2</strong>: Java의 Executor 함수는 일괄 삽입을 구현하기 위해 이전에 우리 애플리케이션 중 하나에서 사용되었습니다. 단, 레코드 수는 50,000개를 초과할 수 없습니다. 우리는 비슷한 접근 방식을 사용하도록 요청받습니다. 따라서 Spring Batch의 사용은 제외됩니다. </p> <p>Java 8/MySQL 데이터베이스에서 고려할 수 있는 기능을 찾고 있습니다. </p> <p>Java 8: 멀티스레딩에는 Executor를, 비동기 처리에는 CompletableFuture를, 스트리밍에는 사용하세요. </p> <p>MySQL: 인덱스 생성...</p>

P粉211600174P粉211600174389일 전582

모든 응답(1)나는 대답할 것이다

  • 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배 더 작아질 수 있습니다.

    회신하다
    0
  • 취소회신하다