SQL 삽입을 위해 여러 데이터베이스 연결을 설정하면 어떤 이점이 있습니까?
P粉585541766
P粉585541766 2024-03-30 08:39:46
0
1
342

대량 데이터 수집과 관련된 프로젝트를 작성 중입니다. 현재 저는 .NET Framework 4.8과 Mysql 패키지를 사용하여 연결을 시작하고 데이터베이스 서버에 데이터를 삽입하고 있습니다.

초당 약 400,000행을 삽입하게 됩니다. SQL 연결이 내 프로그램에 병목 현상을 일으킬까봐 걱정됩니다. SQL을 사용하여 다중 스레드 연결을 생성하고 소비자 대기열을 사용하여 데이터를 삽입하는지 알고 싶습니다. 더 빠르고 가치가 있습니까(장단점)?

내 직감으로는 더 빠를 것 같지만 스레드 오버헤드 측면에서 얼마나 많은 성능을 제공할지는 잘 모르겠습니다. 저는 SQL 전문가가 아니기 때문에 누군가가 여러 스레드에서 SQL에 대한 여러 연결을 여는 것의 장단점을 설명할 수 있다면 좋을 것입니다.

P粉585541766
P粉585541766

모든 응답(1)
P粉373596828

루머, 의견, 소문, 사실, 버전 관련 벤치마크, 개인적인 경험 등...

다중 스레드는 처리량을 향상시킬 수 있지만 다음과 같은 제한 사항이 있습니다.

  • 처리량 상한은 이론상 한계의 약 절반입니다. (귀하의 "특정 비율") (이것은 멀티 스레드 패키지를 기반으로 한 벤치마크입니다. 이름은 잊어버렸습니다. 10년 전이었습니다.)
  • 여러 스레드는 뮤텍스 및 기타 필요한 잠금 메커니즘에서 서로 경쟁합니다.
  • 5.7부터 시작하면 64개 스레드가 MySQL의 멀티스레딩 제한이며, 이를 초과하면 처리량이 정체되거나 심지어 저하됩니다. (출처: 많은 Oracle 벤치마크에서는 한 버전이 이전 버전보다 훨씬 우수하다고 자랑합니다.) (한편 스레드당 대기 시간은 최고 수준입니다.)
  • 가능하다면 각 스레드는 데이터를 일괄 처리해야 합니다.

일괄 처리:

  • LOAD DATA 是一次从单个线程 INSERT 大量行的最快方法。但是,如果您包括将文件写入 LOAD 비용으로 인해 일괄 삽입보다 속도가 느려질 수 있습니다.
  • 배치 INSERT가 이어집니다. 그러나 특정 한도 또는 "수익률 감소"에 도달하면 "수백" 행으로 제한됩니다.
  • 일괄 삽입은 쿼리당 한 행을 삽입하는 것보다 10배 빠릅니다. 따라서 고속 수집에 사용(또는 LOAD DATA)할 가치가 있습니다. (출처: 많은 INSERT 查询插入一行的速度的 10 倍。因此,它(或 LOAD DATA 다양한 시간 제한 테스트.)
데이터 출처:

    일부 데이터 소스는 한 번에 한 행만 전송해야 합니다(예: N초마다 차량의 센서 데이터). 이를 위해서는 데이터를 일괄 처리하기 위한 중간 계층이 필요합니다.
  • 데이터 수집에 대한 토론:
  • http://mysql.rjweb.org/doc.php /staging_table
데이터를 로드한 후에는 어떻게 되나요? 물론 이것은 쓰기 전용 테이블은 아닙니다.

    정규화는 디스크 공간을 줄이는 데 유용하며 일괄적으로 수행하는 것이 가장 좋습니다.
  • 표준화를 참조하세요.
  • 결국 오래된 데이터를 지우는 것 외에는 거의 유용하지 않습니다. PARTITIONing파티션을 참조하세요.
  • 거대한 "사실" 테이블은 검색하기 어렵습니다. 수집할 때 요약 데이터 구축을 고려하세요.
  • 요약 테이블
  • 위 처리를 수행한 다음 원본 데이터를 버릴 수도 있습니다. 하루에 테라바이트의 데이터를 얻는 것 같습니다.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿