계층적 데이터 형식
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
계층적 데이터 형식(HDF)은 과학적 데이터를 저장하고 관리하기 위한 파일 형식이다. 1987년 미국 국립 슈퍼컴퓨터 응용 연구소에서 시작된 HDF는, NASA의 지구 관측 시스템 프로젝트를 거쳐 표준 데이터 및 정보 시스템으로 채택되었다. HDF4와 HDF5 두 가지 주요 버전이 있으며, HDF5는 HDF4의 제약 사항을 개선하여 다차원 배열, 그룹, 속성 등을 포함하는 계층적 구조를 지원한다. 다양한 프로그래밍 언어에서 HDF5를 사용할 수 있도록 공식 API와 타사 바인딩이 제공되며, 데이터를 시각화하고 분석하기 위한 여러 도구들이 개발되어 있다.
1987년, 미국 국립 슈퍼컴퓨팅 응용 센터(NCSA)의 그래픽스 재단 태스크 포스(GFTF)는 휴대용 과학 데이터 형식을 찾기 시작했으며, 처음에는 AEHOO(All Encompassing Hierarchical Object Oriented format, 모든 것을 포괄하는 계층적 객체 지향 형식)라고 불렸다.[2] 1990년과 1992년에 NSF의 지원금은 이 프로젝트에 큰 도움이 되었다.[2] 이 시기에 NASA는 지구 관측 시스템(EOS) 프로젝트에 사용할 15가지 파일 형식을 검토했고, 2년간의 검토 후 HDF를 표준 데이터 및 정보 시스템으로 선택했다.[2]
계층적 데이터 형식(HDF)은 다양한 프로그래밍 언어에서 사용할 수 있도록 인터페이스를 제공한다. 크게 HDF 그룹에서 공식적으로 지원하는 API와 타사 개발자들이 제공하는 비공식 API로 나뉜다.
2. 역사
HDF4는 이 형식의 초기 버전이지만, The HDF Group에서 여전히 지원하고 있다. HDF4는 다차원 배열, 래스터 이미지, 테이블 등 다양한 데이터 모델을 지원한다.[2] 각 모델은 특정 데이터 유형을 정의하고, 데이터와 메타데이터를 다루기 위한 API를 제공한다. HDF 개발자나 사용자가 새로운 데이터 모델을 추가할 수도 있다. HDF는 자체 설명형이어서, 외부 정보 없이도 응용 프로그램이 파일 구조와 내용을 이해할 수 있다. 하나의 HDF 파일은 관련된 객체들을 포함할 수 있으며, 그룹이나 개별 객체로 접근할 수 있다. 사용자는 "vgroup"이라는 자체 그룹 구조를 만들 수도 있다.
HDF4 형식은 몇 가지 제약이 있었다.[3][4] 명확한 객체 모델이 없어 지속적인 지원과 개선이 어려웠고, 다양한 인터페이스 스타일(이미지, 테이블, 배열)을 지원하여 API가 복잡해졌다. 메타데이터 지원은 인터페이스에 따라 달랐다. ''SD''(과학 데이터 세트) 객체는 임의의 명명된 속성을 지원했지만, 다른 유형은 미리 정의된 메타데이터만 지원했다. 32비트 부호 있는 정수를 사용하여 주소를 지정하므로 HDF4 파일 크기가 최대 2GB로 제한되어, 현대 과학 응용 프로그램에서는 부족할 수 있었다.
HDF5 형식은 HDF4의 한계를 극복하고 현대 시스템과 애플리케이션의 요구를 충족시키기 위해 설계되었다. 2002년에는 R&D 100 어워드를 수상했다.[5] HDF5는 파일 구조를 단순화하여 데이터 세트(유형이 지정된 다차원 배열)와 그룹(데이터 세트 및 기타 그룹을 포함할 수 있는 컨테이너 구조) 두 가지 주요 객체 유형만 포함한다. 이는 진정한 계층적 파일 시스템과 유사한 데이터 형식을 만든다. HDF5 파일의 리소스는 POSIX와 유사한 ''/path/to/resource'' 구문을 사용하여 접근할 수 있다. 메타데이터는 사용자 정의 명명된 속성 형태로 그룹 및 데이터 세트에 첨부된다. 이미지와 테이블을 표현하는 더 복잡한 저장 API는 데이터 세트, 그룹 및 속성을 사용하여 구축할 수 있다. HDF5는 개선된 유형 시스템과 데이터 공간 객체(데이터 세트 영역 선택)를 포함하며, API는 객체 지향적이다. NetCDF의 최신 버전인 버전 4는 HDF5를 기반으로 한다.
HDF5는 B-tree를 사용하여 테이블 객체를 색인하므로 시계열 데이터에 적합하다. 대부분의 데이터는 SQL 데이터베이스의 행보다 빠르게 접근 가능한 단순 배열(테이블 객체)로 들어가지만, 비 배열 데이터에는 B-tree 접근을 사용할 수 있다. HDF5 데이터 저장 메커니즘은 SQL 스타 스키마보다 간단하고 빠를 수 있다.
HDF5에 대한 비판은 단일 설계와 긴 사양에서 비롯된다. HDF5는 UTF-8 사용을 강제하지 않아 클라이언트 애플리케이션은 대부분 ASCII를 예상할 수 있다. 또한 외부 도구(h5repack)를 사용해야 파일 내 데이터 세트 데이터를 해제할 수 있다.[6]
2. 1. 초기 역사
1987년, 미국 국립 슈퍼컴퓨팅 응용 센터(NCSA)의 그래픽스 재단 태스크 포스(GFTF)는 휴대용 과학 데이터 형식에 대한 탐구를 시작했으며, 이는 원래 AEHOO(All Encompassing Hierarchical Object Oriented format, 모든 것을 포괄하는 계층적 객체 지향 형식)로 불렸다.[2] 1990년과 1992년에 NSF에서 받은 보조금은 이 프로젝트에 중요했다.[2] 이 무렵 NASA는 지구 관측 시스템(EOS) 프로젝트에 사용할 15가지 다른 파일 형식을 조사했으며, 2년간의 검토 과정을 거쳐 HDF가 표준 데이터 및 정보 시스템으로 선정되었다.[2]
2. 2. HDF4
HDF4는 이 형식의 이전 버전이지만, The HDF Group에서 여전히 활발히 지원하고 있다. HDF4는 다차원 배열, 래스터 이미지, 테이블을 포함한 다양한 데이터 모델을 지원한다.[2] 각 모델은 특정 집계 데이터 유형을 정의하고 데이터 및 메타데이터를 읽고, 쓰고, 구성하기 위한 API를 제공한다. 새로운 데이터 모델은 HDF 개발자 또는 사용자가 추가할 수 있다.
HDF는 자체 설명형으로, 외부 정보 없이도 응용 프로그램이 파일의 구조와 내용을 해석할 수 있다. 하나의 HDF 파일은 관련 객체의 혼합을 담을 수 있으며, 이를 그룹 또는 개별 객체로 접근할 수 있다. 사용자는 "vgroup"이라고 하는 자체 그룹화 구조를 만들 수 있다.
HDF4 형식에는 많은 제약이 있다.[3][4] 명확한 객체 모델이 없어 지속적인 지원과 개선이 어렵다. 다양한 인터페이스 스타일(이미지, 테이블, 배열)을 지원하면 복잡한 API가 된다. 메타데이터 지원은 어떤 인터페이스를 사용하는지에 따라 다릅니다. ''SD''(과학 데이터 세트) 객체는 임의의 명명된 속성을 지원하는 반면, 다른 유형은 미리 정의된 메타데이터만 지원한다. 아마도 가장 중요한 점은 주소 지정에 32비트 부호 있는 정수를 사용하면 HDF4 파일이 최대 2GB로 제한된다는 것으로, 이는 많은 현대 과학 응용 프로그램에서 허용될 수 없다.
2. 3. HDF5
HDF5 형식은 HDF4 라이브러리의 몇 가지 제한 사항을 해결하고 현대 시스템과 애플리케이션의 현재 및 예상 요구 사항을 충족하도록 설계되었다. 2002년에는 R&D 100 어워드를 수상했다.[5]
HDF5는 파일 구조를 단순화하여 다음 두 가지 주요 유형의 객체만 포함한다.
이로 인해 진정한 계층적 파일 시스템과 유사한 데이터 형식이 만들어진다. 실제로 HDF5 파일의 리소스는 POSIX와 유사한 구문 ''/path/to/resource''를 사용하여 접근할 수 있다. 메타데이터는 그룹 및 데이터 세트에 첨부된 사용자 정의 명명된 속성 형태로 저장된다. 그런 다음 데이터 세트, 그룹 및 속성을 사용하여 이미지와 테이블을 나타내는 더 복잡한 저장 API를 구축할 수 있다.
HDF5는 이러한 파일 형식의 발전 외에도 개선된 유형 시스템과 데이터 세트 영역에 대한 선택을 나타내는 데이터 공간 객체를 포함한다. 또한 API는 데이터 세트, 그룹, 속성, 유형, 데이터 공간 및 속성 목록과 관련하여 객체 지향적이다.
NetCDF의 최신 버전인 버전 4는 HDF5를 기반으로 한다.
HDF5는 B-tree를 사용하여 테이블 객체를 색인하므로 주가 계열, 네트워크 모니터링 데이터 및 3D 기상 데이터와 같은 시계열 데이터에 적합하다. 대부분의 데이터는 SQL 데이터베이스의 행보다 훨씬 빠르게 접근할 수 있는 간단한 배열(테이블 객체)로 들어가지만 B-tree 접근은 비 배열 데이터에 사용할 수 있다. HDF5 데이터 저장 메커니즘은 SQL 스타 스키마보다 더 간단하고 빠를 수 있다.
HDF5에 대한 비판은 단일 설계와 긴 사양에서 비롯된다.3. 인터페이스
(하위 섹션의 내용과 겹치므로 내용은 작성하지 않는다.)
3. 1. 공식 지원 API
HDF 그룹은 다양한 프로그래밍 언어에서 HDF5를 사용할 수 있도록 공식 API를 제공한다.
지원 언어 | 주요 라이브러리 및 인터페이스 |
---|---|
C | HDF5 Lite (H5LT), HDF5 Image (H5IM), HDF5 Table (H5TB), HDF5 Packet Table (H5PT), HDF5 Dimension Scale (H5DS) |
C++ | HDF5 Packet Table (H5PT) |
자바 | |
포트란 90 | |
파이썬 | Premier 패키지 |
R | Premier 패키지 |
CLI (.NET) |
3. 2. 비공식 API (타사 바인딩)
공식 API 외에도 다양한 개발자들이 HDF5를 위한 비공식 API (타사 바인딩)를 제공하고 있다. 다음은 그 목록이다.프로그래밍 언어 | 설명 |
---|---|
D | [https://github.com/Laeeth/d_hdf5 C API에 대한 바인딩]을 제공하며, 고수준 h5py 스타일의 D 래퍼가 개발 중이다. |
Erlang, Elixir, LFE | [https://github.com/RomanShestakov/erlhdf5 BEAM 언어용 바인딩]을 사용할 수 있다. |
Go | [https://github.com/gonum gonum]의 [https://github.com/gonum/hdf5 hdf5] 패키지를 제공한다. |
Haskell | [https://hackage.haskell.org/package/hdf5 C API에 대한 바인딩]을 제공한다. |
Julia | [https://github.com/JuliaIO/HDF5.jl HDF5] 및 [https://github.com/JuliaIO/JLD2.jl JLD2] 패키지를 통해 HDF5를 지원한다. |
Lua | [http://colberg.org/lua-hdf5 lua-hdf5] 라이브러리를 통해 HDF5를 지원한다. |
Perl | HDF5를 지원한다.[9] |
파이썬 | [http://www.h5py.org/ HDF5 for Python] ([http://www.h5py.org h5py]) 및 [https://pytables.github.io/index.html PyTables]를 통해 HDF5를 지원한다. pandas 라이브러리는 PyTables를 통해 HDF5 데이터를 쉽게 처리할 수 있다. |
R | [http://bioconductor.org/packages/release/bioc/html/rhdf5.html rhdf5] 및 [https://CRAN.R-project.org/package=hdf5r hdf5r] 패키지에서 HDF5 지원을 제공한다. |
Rust | [https://crates.io/crates/hdf5 hdf5]와 같은 타사 라이브러리를 통해 HDF 지원을 얻을 수 있다. |
CGNS | HDF5를 기본 저장소로 사용한다. |
Common Lisp | [https://github.com/HDFGroup/hdf5-cffi hdf5-cffi] 라이브러리를 제공한다. |
Dymola | Dymola 2016 FD01 릴리스부터 SDF(Scientific Data Format) 구현을 통해 HDF5 내보내기를 지원한다. |
GNU Data Language | HDF5를 지원한다. |
HDFql | C, C++, Java, Python, C#, Fortran 및 R에서 고수준 언어(SQL과 유사)를 통해 HDF5 파일을 관리할 수 있게 한다. |
Huygens Software | 버전 3.5부터 HDF5를 기본 저장 형식으로 사용한다. |
IDL | HDF5를 지원한다. |
IGOR Pro | [http://www.wavemetrics.com/products/igorpro/dataaccess/hdf5.htm HDF5] 파일을 완벽하게 지원한다. |
JHDF5[7] | 일부 사용자가 더 간단하다고 생각하는 공식 HDF5 Java 바인딩과 다른 접근 방식을 사용하는 Java 바인딩이다. |
jHDF | HDF5 파일에 대한 읽기 쓰기 액세스를 제공하는 순수 Java 구현이다. |
JSON | [http://hdf5-json.readthedocs.org hdf5-json]을 통해 HDF5를 지원한다. |
LabVIEW | [http://h5labview.sourceforge.net/ h5labview] 및 [http://www.upvi.net/main/index.php/products/lvhdf5 lvhdf5]와 같은 타사 라이브러리를 통해 HDF 지원을 얻을 수 있다. |
MATLAB, Scilab, Octave | 최신 릴리스에서 HDF5를 기본 저장 형식으로 사용한다. |
Mathematica[8] | HDF 및 HDF5 데이터의 즉각적인 분석을 제공한다. |
4. 도구
HDF 데이터를 시각화하고 분석하기 위한 다양한 도구들이 개발되어 있다. 이러한 도구를 활용하여 HDF 데이터를 효율적으로 관리하고 분석할 수 있다.
도구 | 설명 |
---|---|
Apache Spark HDF5 Connector | 아파치 스파크용 HDF5 커넥터 |
Apache Drill HDF5 Plugin | 아파치 드릴용 HDF5 플러그인. HDF5 파일을 대상으로 SQL 쿼리를 수행할 수 있게 해준다. |
[https://wiki.earthdata.nasa.gov/display/HPD/HDF+Product+Designer/ HDF Product Designer] | 상호 운용 가능한 HDF5 데이터 제품 생성 GUI 도구 (현재는 사용할 수 없음) |
[http://www.space-research.org/ HDF Explorer] | HDF, HDF5 및 netCDF 데이터 파일 형식을 읽는 데이터 시각화 프로그램 |
[http://www.hdfgroup.org/hdf-java-html/hdfview/ HDFView] | HDF 파일용 브라우저 및 편집기 |
[http://www.vitables.org/ ViTables] | 파이썬으로 작성된 HDF5 및 PyTables 파일용 브라우저 및 편집기 |
[https://www.giss.nasa.gov/tools/panoply/ Panoply] | netCDF, HDF 및 GRIB 데이터 뷰어 |
[https://github.com/silx-kit/silx silx] | 싱크로트론 X선 데이터를 위한 HDF 파일 브라우저 |
[https://github.com/silx-kit/h5web h5web] | 브라우저 또는 비주얼 스튜디오 코드에서 HDF 파일을 보기 위한 도구 |
참조
[1]
웹사이트
Java-based HDF Viewer (HDFView)
http://www.hdfgroup.[...]
[2]
웹사이트
History of HDF Group
http://www.hdfgroup.[...]
2014-07-15
[3]
웹사이트
How is HDF5 different from HDF4?
http://www.hdfgroup.[...]
2009-03-30
[4]
웹사이트
Are there limitations to HDF4 files?
https://web.archive.[...]
2009-03-29
[5]
웹사이트
R&D 100 Awards Archives
http://www.rdmag.com[...]
2011-01-04
[6]
웹사이트
Moving away from HDF5
http://cyrille.rossa[...]
2016-04-21
[7]
웹사이트
JHDF5 library
https://web.archive.[...]
2009-06-10
[8]
문서
HDF Import and Export
http://reference.wol[...]
Mathematica documentation
[9]
웹사이트
PDL::IO::HDF5
https://metacpan.org[...]
[10]
웹사이트
HDF5 version 1.10.7 released on 2020-09-16
https://support.hdfg[...]
2020-09-16
[11]
웹사이트
Java-based HDF Viewer (HDFView)
http://www.hdfgroup.[...]
[12]
웹사이트
History of HDF Group
http://www.hdfgroup.[...]
2014-07-15
[13]
웹사이트
How is HDF5 different from HDF4?
http://www.hdfgroup.[...]
2009-03-30
[14]
웹사이트
Are there limitations to HDF4 files?
http://www.hdfgroup.[...]
2009-03-29
[15]
웹사이트
R&D 100 Awards Archives
http://www.rdmag.com[...]
2011-01-04
[16]
웹사이트
Moving away from HDF5
http://cyrille.rossa[...]
2016-04-21
[17]
웹사이트
JHDF5 library
https://wiki-bsse.et[...]
[18]
문서
HDF Import and Export
http://reference.wol[...]
Mathematica documentation
[19]
웹사이트
PDL::IO::HDF5
https://metacpan.org[...]
[20]
웹인용
HDF5 version 1.10.7 released on 2020-09-16
https://support.hdfg[...]
2020-09-16
[21]
웹사이트
HDF4 Home Page
https://www.hdfgroup[...]
[22]
웹사이트
HDF5 Home Page
https://www.hdfgroup[...]
[23]
웹사이트
Why HDF?
https://www.hdfgroup[...]
[24]
웹사이트
Support Services
https://www.hdfgroup[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com