>  Q&A  >  본문

并发 - redis队列里每天有超过一亿条数据,使用python如何高效的将其写入sql数据库?

使用python拉redis队列里的数据,如何确保完整高效不阻塞的把每天上亿条的数据写入mysql/oracle数据库?

PHPzPHPz2741일 전845

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

  • 怪我咯

    怪我咯2017-04-17 18:03:11

    전체 프로세스는 대기열 + 소비 대기열입니다.

    나에게 일련의 아이디어를 주세요:

    1. redis 이벤트를 모니터링하려면 monitor 명령을 사용하고, redis 변경 이벤트를 모니터링하려면 redis 버전(>=2.8)을 업그레이드하세요.

    2. 여러 프로세스/스레드/코루틴이 이벤트를 처리합니다(예: 버퍼에 넣기)

    3. 버퍼 데이터는 일괄적으로 데이터베이스에 삽입됩니다. (mysql은 한 번에 최대 5,000개의 항목을 삽입할 수 있는 것 같습니다. 확실하지는 않습니다. 9999일 수도 있고 4999일 수도 있지만 상한선이 있습니다.) SQL 데이터베이스 트랜잭션 기능에 의존하여 실패하면 롤백합니다.

    산 시리즈에 대해 이야기하기:

    4. 이러한 대용량 데이터의 경우 컬럼 데이터베이스, hbase 등을 고려할 수 있습니다.

    무책임 시리즈:

    5. 주변 사람들이 테스트한 결과는 물론, 해외 및 국내를 포함하여 mongodb 데이터 볼륨 컨퍼런스에 문제가 있다고 말하는 사람들도 있는 것 같습니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 18:03:11

    어떤 데이터베이스가 사용되나요? MySQL과 SQL Server 독립형 버전의 성능은 많이 다릅니다. SQL Server / Oracle / DB2의 성능은 같은 수준입니다. 클러스터를 고려하면 postgresql이 더 좋습니다.
    그렇게 많은 양의 데이터를 데이터베이스로 옮기려면 , 고려해야 합니다
    1) 적절한 인덱스는 쓰기 성능을 크게 향상시킬 수 있습니다.
    2) 데이터베이스에 마스터-슬레이브 설계가 없으면 RAID 또는 SSD 사용을 고려하십시오. 성능은 일반 기계식 하드 드라이브보다 조금도 나쁘지 않습니다.
    3) MySQL을 예로 들어 서로 다른 데이터베이스 엔진을 사용하더라도 InnoDB와 MyISAM 간에는 여전히 성능 차이가 있습니다.
    4) 모든 기록을 커밋하지 마세요. 중앙 집중식 커밋 성능이 10배 이상 향상됩니다.
    5) 읽기와 쓰기를 분리하세요. 그렇지 않으면 데이터 쓰기가 데이터 읽기를 차단하게 됩니다.

    일일 데이터 양이 너무 많으면 SQL은 Hadoop + HBase가 적합하지 않습니다.
    실제로 어떤 데이터베이스를 사용하는지는 데이터 형식에 따라 다릅니다. 예를 들어 HDF5는 이진 및 공간 데이터에 더 친숙합니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-17 18:03:11

    이런 대용량 데이터는 mongodb를 사용하는 것이 더 빠릅니다

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 18:03:11

    Mysql은 많이 사용되지 않지만 SQL Server에는 1초에 10,000을 쉽게 넘길 수 있는 일괄 가져오기 기능이 있습니다.
    Mysql에는 일괄 삽입 기능도 있는 것 같은데, 삽입 후 후처리에서는 서브 데이터베이스와 테이블 마스터-슬레이브 방식을 고려해야 합니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 18:03:11

    매일 1억 개의 데이터를 mysql에 삽입합니다. . . 쿼리를 분석하는 것이 문제입니다. . 하지만 과거 데이터여야 합니다

    회신하다
    0
  • PHPz

    PHPz2017-04-17 18:03:11

    1. [완료]: 확인 메커니즘을 사용합니다.

    2. [효율성]: 일괄 읽기, 일괄 쓰기 또는 전용 인터페이스를 사용합니다.

    3. [차단 없음]: 전혀 차단하지 않는 것은 불가능합니다. 차단 시간은 인식을 유발하지 않고 최대한 짧게 유지될 수 있습니다. 이를 위해서는 작업 분할과 시간 공유라는 두 가지 메커니즘을 사용해야 합니다. 기계 학습을 기반으로 한 성능 곡선 추정과 실시간 로드 밸런싱이라는 두 가지 고급 처리 방법을 도입할 수도 있습니다.

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