2009-07-02 7 views
59

누구나 과학 데이터를 저장하는 방법으로 NetCDF 및 HDF5를 사용하여 충분한 경험을 얻었습니까?과학 데이터를 저장하기위한 NetCDF 대 HDF5에 대한 의견?

저는 HDF5를 사용했으며 Java를 통해 읽고 쓰기를 원합니다.하지만이 인터페이스는 본질적으로 혼란스러운 C 라이브러리의 래퍼이므로 NetCDF는 흥미롭게 보입니다.하지만 거의 알지 못합니다.

편집 : 내 응용 프로그램은 데이터 로깅 전용이며 따라서 자체 설명 형식의 파일을 얻습니다. 나에게 중요한 기능은 임의의 메타 데이터를 추가 할 수 있고, 바이트 배열에 추가하기위한 빠른 쓰기 권한이 있으며, 단일 쓰기/다중 판독기 동시성 (강력히 권장되지만 반드시 필요하지는 않음)을 제공 할 수 있습니다 .NetCDF 문서에는 SWMR이 있지만 돈이 없습니다 두 명의 작가가 동일한 파일을 동시에 열 수 있다는 것을 보장하는 메커니즘을지지하는지 여부에 대해서는 말하지 않습니다. 나는 HDF5의 계층 적 측면을 좋아한다. (특히 은 direct-acyclic-graph 계층을 좋아한다. "일반"파일 시스템과 같은 계층 구조보다 훨씬 융통성이있다.) NetCDF 문서를 지금 읽고있다. 파일 당 데이터 세트는 아마 저를 위해 작동하지 않을 것입니다. . NetCDF-Java가 netCDF의-4 파일에서 읽어하지만 계층 그룹을 지원하지 않는 이놈을 netCDF의-3 파일에서 기록처럼 :(

갱신 — 보인다

갱신 2009 7 월 14. : Java에서 HDF5로 인해 정말 화를 내기 시작했습니다. 사용할 수있는 라이브러리는 그리 좋지 않으며 Java 추상화 레이어 (복합 데이터 유형)와 관련하여 몇 가지 주요 걸림돌이 있습니다. C의 훌륭한 파일 형식이지만 난 잃어.> :

+2

추신 : HDF5는 PyTables가있는 Python에서 Java보다 사용하기가 훨씬 쉽습니다. –

+0

불행히도 Java 사용자의 경우 netCDF 및 HDF5는 모두 C 또는 Fortran 사용자를 위해 C로 개발됩니다. 파이썬과 같은 대부분의 다른 API는 C 계층 위에 구축되어 있습니다. –

+0

@EdwardHartnett - 저는 그 인수를 구입하지 않습니다. 확실히 그것은 당신이 멋진 Java 기능을 무료로 얻지는 못했음을 의미하지만, 사람들은 Python에서 유용한 API를 만들기 위해 급락했습니다. 누군가 Java에서 그렇게 할 수있는 이유가 없습니다. (사실, 나는 이전에이 회사에서 2009 년에이 질문을 게시했지만 그 코드에 액세스 할 수 없었습니다.) –

답변

29

NetCDF 대신 HDF5를 강력히 제안합니다. NetCDF는 평평하며 물건을 분류 할 수없는 경우 잠시 후 더러워집니다. 물론 분류도 논쟁의 여지가 있지만, 적어도 당신은이 유연성을 가지고 있습니다.

Q5Cost를 작성했을 때 HDF5 대 NetCDF의 정확한 평가를 수행했으며 최종 결과는 HDF5 손에 대한 것입니다.

+26

답이 구식입니다. netCDF가 이제 HDF5에 구축되었습니다. – Abe

+0

반드시 그렇지는 않습니다. netcdf4에는 여전히 wcpc와의 역 호환성이 있습니다. 즉, 일부 압축 옵션은 여전히 ​​NC 파일에 사용할 수 없음을 의미합니다. – badgley

+0

@badgley - netCDF-4 파일을 쓸 때 netCDF에서 누락 된 압축 옵션은 무엇입니까? –

8

몇 가지 작은 샘플 응용 프로그램을 작성보십시오 n 각각을 선택하고 경험을 비교하십시오. MPI 등을 통한 병렬 실행에 대한 코드의 향후 확장 성이 중요한 경우, HDF가 병렬 구현을 가지고 있다는 것을 알고 있습니다. 사람들은이를 개선하기 위해 끊임없이 노력하고 있습니다. NetCDF에 대해 잘 모르겠습니다.

늦은 편집 : NetCDF의 경우 Argonne의 Parallel NetCDF이 있습니다. 그것은 꽤 잘 작동하고, 개발팀은 그것을 더욱 발전 시키는데 상당히 적극적입니다.

+0

병렬 IO는 Unidata의 직접 지원을받습니다. NetCDF 라이브러리는 병렬 IO를 제공하기 위해 HDF5 또는 병렬 netcdf를 사용합니다. –

19

HDF5를 사용하는 것이 장기적으로는 훨씬 쉽다는 것을 인정해야합니다. 간단한 데이터 구조를 NetCDF 형식으로 만드는 것은 어렵지 않지만 길을 따라 조작하는 것은 쉽지 않습니다.

HDF5의 "H"는 "heirarchical"을 의미합니다.이 노드는 주변의 노드를 이동하고 다른 위치의 노드를 참조함으로써 데이터를 조작하는 정말 쉬운 방법으로 변환되었습니다.

어떤 종류의 프로젝트인가요? 저는 HPC 과학 모델링 작업에이 두 가지를 모두 사용합니다. 당신도 똑같이하고 있다고 생각할 수 있습니까? 그렇다면 내가 보는 추세는 사람들이 HDF5로 이동한다는 것이지만 특정 도메인에서 다를 수 있습니다.

하지만 결국 행운을 빕니다!

+2

afaik, NetCDF4는 이전 버전의 NetCDF에 익숙한 사람들에게 익숙하지 않도록 일종의 dumbered HDF5입니다. http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2010/msg00170.html – mdsumner

+1

하지만 더 많은 사람들이 멍청한 것보다는 구조를 강요하려고합니다. - https : //www.unidata.ucar .edu/software/netcdf/docs/netcdf_introduction.html # netcdf_4_format. – spinkus

+1

NetCDF-4는 사소한 애매한 예외를 제외하고 거의 모든 HDF5 기능을 제공합니다. –

12

NetCDF는 버전 4.0 (2008)부터 대부분의 HDF5 파일을 읽고 쓸 수 있으며 고급 데이터 모델을 통해 HDF5의 계층 구조 기능에 대한 액세스를 제공합니다.

HDF5는 기능이 풍부하고 성능이 뛰어납니다.

NetCDF는 더 간단한 API와 더 넓은 도구 기반을 제공합니다. netCDF 데이터를 처리하는 많은 도구가 있습니다.

+0

마지막으로, Java 라이브러리가 HDF5 파일 작성을 허용하지 않았 음을 확인했습니다. 어쨌든 다른 것들로 옮겨 가면서 논점이됩니다. : -/ –

+0

간결한 답변 주셔서 감사합니다. 유용한 정보입니다. 참고 자료가 있다면 더 좋을 것입니다. :) – naught101

+0

"대부분의 HDF5 파일을 읽고 쓸 수 있습니다." 아닙니다. NetCDF4는 응용 프로그램과 같이 HDF5를 사용하여 파일 시스템을 사용합니다. HDF5에 부과 된 특정 구조를 읽고 씁니다. 1.8 – spinkus

6

1) Netcdf-4 C 라이브러리는 HDF-5 C 라이브러리의 맨 위에있는 계층입니다. API는 HDF5 라이브러리보다 간단하지만, 결국에는 거의 동일한 기능을 제공합니다. Netcdf는 그래프를 지원하지 않지만 HDF5는 그래프를 지원합니다. 사실 HDF는 그래프의 순환을 방해하지 않습니다.

2) HDF 그룹에는 HDF-5 C 라이브러리 위에 Java API가 있습니다.

3) Unidata는 순수 자바 인 Netcdf-Java 라이브러리가 있지만 HDF-5 만 읽을 수 있습니다.

+0

HDF5가 공유 크기를 구현하지 않기 때문에, HDF5가 아닌 netCDF-4를 작성해야한다는 인수 (면책 조항 : 나에 의한)가 여기에 있습니다. http : /www.unidata.ucar.edu/blogs/developer/en/entry/dimensions_scales. –

-1

HDF5를 고유 한 데이터 모델로 변환하는 NetCDF는 외모와 효과가 뛰어납니다. until you find out that NetCDF doesn't support unsigned values! NetCDF를 사용하여 기존 HDF5 파일에서 부호없는 값을 검색하는 방법은 my question을 참조하십시오.

업데이트 : 사실, netCDF의-3 서명 값을 지원하지 않지만, netCDF의-4 부호의 결정에 대한 자바의 netCDF의 API는 a little convoluted에도 불구하고, 서명 값을 지원하는 것으로 나타났다.

+1

음 ... 귀하의 대답의 절반은 NetCDF가 * 부호없는 * 값을 지원하지 않으며 나머지 절반은 * 서명 된 * 값을 지원하지 않는다고 말합니다. 어느 쪽이 될거야? 첫 번째 링크는 NetCDF 3가 일반적으로 값이 아닌 부호없는 정수 *를 가지고 있지 않다고 말합니다. 또한 두 번째 링크는 netCDF4가 아니라 * java *를 사용하여 문제가 발생했음을 나타냅니다. 그리고 정말로, 어쨌든 그것은 무엇이 중요합니까? 색인을 생성 할 정수의 수가 절반이지만, 시스템에 따라 2^31 (= 20 억) 또는 2^63 (9 * 10^18)이 여전히 남아 있음을 의미합니다. – naught101

+0

명확히하기 위해 netCDF-4 C 라이브러리는 부호없는 정수 (8, 16, 32 및 64 비트)를 지원합니다. netCDF Java 라이브러리는 부호없는 유형을 작성할 수는 없지만 다음 더 큰 크기의 부호 유형으로이를 승격하여 부호없는 유형의 크기 8, 16 및 32 비트를 읽을 수 있습니다. (즉, netCDF 파일의 16 비트 부호없는 정수 필드는 Java에서 32 비트 부호가있는 필드처럼 보입니다.) 이는 모두 Java가 부호없는 유형을 지원하지 않기 때문입니다. –

9

나는이 글이 오래된 글이며, 원래의 포스터가 그들이 옮겼다는 것을 알았지 만 여기서 끝나는 사람은 ... netCDF-Java 라이브러리 (4.3.13 현재)에는 netCDF-4 netCDF C 라이브러리를 통해 지원을 작성하십시오. 아직 베타 버전이지만 작동하며 feedback은 분명히 인정됩니다!

자세한 내용은 netCDF-Java reference 문서를 참조하십시오.