Google은 수천 개의 매우 작은 CSV 파일을 저장해야하는 애플리케이션을 보유하고 있습니다. 100,000 이상이며 매년 같은 금액으로 증가합니다. 각 파일에는 약 20-80KB의 차량 추적 데이터가 들어 있습니다. 각 데이터 세트 (또는 파일)는 단일 차량 여행을 나타냅니다.서버에 100,000 개 이상의 CSV 텍스트 파일을 저장하는 가장 좋은 방법은 무엇입니까?
현재이 정보는 SQL Server에 저장되어 있지만 데이터베이스의 크기가 약간 커지고 시간이 지나면 한 파일 만 액세스 할 필요가 있습니다 (대량 쿼리 또는 다른 방식으로 쿼리해야 함). 관계형 데이터베이스에 저장하는 것은 필요하지 않습니다.) 데이터를 삽입하거나 삭제할 때 인덱스를 다시 작성하거나 업데이트하는 데 소요되는 시간 때문에 더 많은 트랙을 추가 할 때 데이터베이스 성능이 저하됩니다.
우리가 고려하고있는 3 개 가지 옵션이 있습니다 :
우리는 파일에 데이터를 외부화하는 SQL의 FILESTREAM 기능을 사용할 수 있지만 내가 전에이 기능을 사용하지했습니다. Filestream은 여전히 데이터베이스 객체 (BLOB) 당 하나의 실제 파일을 생성합니까?
또는 파일을 개별적으로 디스크에 저장할 수 있습니다. 거기에서 는 3 년 이상 지나면 50 만명을 끝낼 수 있습니다. NTFS 파일 시스템이이 양을 정상적으로 처리합니까?
많은 파일이 문제가되는 경우 데이터 세트/파일을 작은 데이터베이스 (한 명의 사용자)로 그룹화하여 각 사용자를 고려해야합니까? 파일을 저장할 수있는 SQLite와 같은 매우 가벼운 데이터베이스가 있습니까?
또 하나 요점 : 데이터는 고도로 압축 가능합니다. 파일을 압축하면 원본 크기의 10 %로 줄어 듭니다. 가능한 경우 압축을 사용하여 사용 된 디스크 공간과 백업 크기를 최소화하고 싶습니다.
'더 많은 트랙을 추가 할 때 데이터베이스의 성능이 저하됩니다 .' csv 파일로 전환하는 대신 데이터베이스에 적절한 색인을 추가하는 것을 고려 했습니까? 주된 관심사가 디스크 공간 (희귀 한 imho) 인 경우 속도가 주요 문제 인 경우 db에서 전환하면 도움이 될 수 있습니다 (영향은 미미할 것입니다) – DrCopyPaste
저는 SQL 전문가는 아니지만 수백만 행 (각각 10,000 행 CSV 파일의 한 행을 나타냄)이있는 테이블에서 적절한 삽입 성능을 얻는 것이 어렵다고 생각하십시오. 우리는 그것을 considereed했지만, 우리는 왜 이러한 특정 데이터 항목이 데이터베이스에 있어야하는지에 대해 정말로 확신하지 못합니다. – NickG
또한 데이터 양이 불필요하게 백업 크기를 부풀게하고 결코 바뀌지 않는 데이터 톤과 같은 다른 문제가 있습니다. – NickG