답변:
아마도이 질문을 역설하는 좋은 방법은 대체 형식과 비교하여 어떤 이점이 있습니까?
주요 대안은 데이터베이스, 텍스트 파일 또는 다른 압축 / 이진 형식이라고 생각합니다.
고려해야 할 데이터베이스 옵션은 아마도 열 저장소 또는 NoSQL이거나 작은 자체 포함 된 데이터 집합 인 SQLite입니다. 데이터베이스의 주요 장점은 메모리보다 훨씬 큰 데이터로 작업하고 임의 또는 인덱스 액세스를 가지며 데이터를 빠르게 추가 / 추가 / 수정할 수 있다는 것입니다. 주요 단점은 전체 데이터 세트를 읽고 처리해야하는 문제로 인해 HDF보다 훨씬 느리다는 것입니다. 또 다른 단점은 SQLite와 같은 임베디드 스타일 데이터베이스를 제외하고 데이터베이스는 단순한 자체 포함 데이터 저장소가 아닌 시스템 (관리, 설정, 유지 관리 등이 필요함)이라는 것입니다.
텍스트 파일 형식 옵션은 XML / JSON / CSV입니다. 플랫폼 간 / 언어 / 툴킷이며 자체 설명 기능 (또는 명백한 기능)으로 인해 좋은 보관 형식입니다. 압축되지 않은 경우 크기가 크지 만 (10x-100x HDF) 압축 된 경우 공간 효율적일 수 있습니다 (압축 된 XML은 HDF와 거의 동일 함). 여기서 가장 큰 단점은 다시 속도입니다. 텍스트 구문 분석이 HDF보다 훨씬 느립니다.
다른 바이너리 형식 (npy / npz numpy 파일, blz blaze 파일, 프로토콜 버퍼, Avro 등)은 HDF와 매우 유사한 속성을 갖습니다. 특정한 다른 제한이 있습니다. 그들은 일반적으로 강력한 이점을 제공하지 않습니다.
HDF는 데이터베이스를 보완하기에 적합합니다. 쿼리를 실행하여 대략 메모리 크기의 데이터 집합을 생성 한 다음 동일한 데이터가 두 번 이상 사용되는 경우이를 HDF에 캐시하는 것이 좋습니다. 고정되고 일반적으로 전체로 처리되는 데이터 집합이있는 경우 적절한 크기의 HDF 파일 모음으로 저장하는 것은 나쁜 옵션이 아닙니다. 자주 업데이트되는 데이터 집합이있는 경우 일부 데이터를 정기적으로 HDF 파일로 준비하면 도움이 될 수 있습니다.
요약하면, HDF는 일반적으로 전체적으로 읽거나 쓰는 데이터에 적합한 형식입니다. 광범위한 지원 및 호환성, 아카이 벌 형식으로 적합하고 매우 빠르기 때문에 많은 응용 프로그램에서 링구아 프랑카 또는 공통 / 기본 교환 형식입니다.
추신이 실제적인 맥락을 제공하기 위해 HDF를 대안과 비교 한 가장 최근의 경험으로, 특정 작은 (메모리 크기보다 훨씬 작은) 데이터 세트가 HDF로 읽는 데 2 초가 걸렸습니다 (대부분 팬더의 오버 헤드 일 것입니다). JSON에서 읽는 데 ~ 1 분; 데이터베이스에 쓰는 데 1 시간이 걸립니다 . 확실히 데이터베이스 쓰기 속도가 빨라질 수 있지만 DBA가 더 좋습니다. 이것이 바로 작동 방식입니다.
C, Java, Perl, Python 및 R에는 모두 HDF5 바인딩이 있습니다.
또 다른 이점은 속도입니다. 나는 그것이 벤치 마크 된 것을 보지 못했지만 HDF는 SQL 데이터베이스보다 빠릅니다.
네트워크 모니터링, 사용량 추적 등 많은 과학 데이터 및 시계열 데이터 세트와 함께 사용하면 매우 유용하다는 것을 알고 있습니다.
나는 HDF 파일의 크기 제한이 있다고 생각하지 않습니다 (OS 제한이 여전히 적용되지만).
덧붙여서 ASDF , 특히 그들의 논문 ASDF를 확인하십시오 : 천문학을위한 새로운 데이터 형식 ; ASDF는 HDF5를 개선하려고 시도하고이 논문은 HDF5 형식의 몇 가지 단점을 설명합니다.