수억 개의 기록 저장

수억 개의 기록 저장

우리 회사는 약 2억~3억 개의 레코드로 구성된 데이터세트를 보유하게 될 것입니다. 소스 자료는 csv이며 압축되지 않은 경우 약 150GB입니다. 우리는 데이터의 초기 로드를 수행한 다음 매일 약 1%의 기록을 업데이트해야 합니다. 우리는 각 기록의 기록도 유지할 수 있기를 바랍니다.

우리는 현재 MySQL을 사용하고 있으며 일부 사람들은 이 크기의 데이터베이스에 MySQL 및 PostgreSQL을 사용하고 있는 것으로 보이지만 그들의 경험에 대한 확실한 정보는 많지 않습니다.

데이터를 정규화하지 않고도 문제를 해결할 수 있으며 많은 서버에 정보를 배포하는 것을 구상할 수 있습니다. MongoDB나 기타 비전통적인 데이터 저장소는 어떻습니까?

이런 종류의 노력이 타당하다고 생각하는 사람이 있나요? 당신이 줄 수 있는 도움에 감사드립니다.

답변1

해당 크기의 데이터 세트에 대한 내 경험은 MSSQL로 제한되어 있지만 해당 크기의 데이터를 가장 확실하게 처리할 수 있습니다.

가장 먼저 걱정되는 것은 데이터의 크기입니다. 150Gb의 3억 레코드는 행당 약 500Kb이며 이는 큰 행입니다. 아주 아주 큰 행입니다. 3차 정규형으로 정규화할 수 있다면 이는 큰 도움이 될 수 있습니다(정규화할 수 있는 데이터가 있다고 가정). 정규화하지 않을 경우(단지 하나의 대규모 테이블만 있는 경우) ISAM을 지원하는 엔진은 RDBMS보다 빠르므로 ISAM 모드의 MySQL은 MSSQL보다 확실한 선택입니다(죄송합니다. Postgre 또는 Mongo에 대한 경험이 없습니다)

즉, MSSQL은 해당 크기의 테이블을 걱정 없이 처리할 수 있습니다. 서로 다른 부분이 서로 다른 디스크에 위치하도록 데이터를 분할할 수 있으므로 업데이트된 데이터의 1%를 빠른 디스크에 유지하고 예산이 문제인 경우 나머지는 느린 디스크에 보관할 수 있습니다. 선택한 DBMS가 이를 지원한다면 현명한 방법이 될 수 있습니다.

참고로 저는 단일 테이블에 약 2억 개의 행이 있는 데이터베이스를 관리했지만(테이블 크기는 20Gb에 불과했습니다) 일부 스마트 인덱싱을 사용하여 쿼리 시간은 여전히 ​​밀리초 단위로 측정되었습니다. 이는 3차 정규형으로 정규화되었기 때문에 관련 데이터를 검색하기 위한 LOJ도 많았습니다.

답변2

대부분의 데이터베이스는 이렇게 많은 양의 저장 공간을 쉽게 관리할 수 있으며, 실제로는 데이터를 로드한 후 해당 데이터로 무엇을 하려는지에 따라 달라집니다. 트랜잭션이므로 자주 쿼리되고 업데이트됩니까? 아니면 거래 시스템에서 매일 들어오는 새로운 정보를 보고하는 데 더 적합합니까?

관련 정보