문제

현재 탐색 중입니다. HDF5."라는 스레드에서 흥미로운 댓글을 읽었습니다.HDF5 평가" 그리고 HDF5가 데이터 저장을 위해 선택한 솔루션이라는 것을 알고 있지만 어떻게 해야 합니까? 질문 그것 ?예를 들어, 몇 가지 식별자가 포함된 큰 파일이 있다고 가정해 보겠습니다.특정 식별자가 파일에 존재하는지 빠르게 알 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

나는 대답이 "직접적이지 않다"고 생각합니다.

다음은 기능을 달성 할 수 있다고 생각하는 몇 가지 방법입니다.

그룹 사용 :

그룹의 계층 구조는 라디습니다 데이터를 저장합니다. 이것은 아마도 너무 잘 확장되지 않을 것입니다.

인덱스 데이터 세트 사용 :

HDF에는 별도의 인덱스 테이블에서 메인 테이블에 링크하는 데 사용할 수있는 참조 유형이 있습니다. 기본 데이터를 작성한 후 참조와 함께 다른 키에 정렬 된 다른 데이터 세트를 사용할 수 있습니다. 예를 들어:

MainDataset (sorted on identifier)
0: { A, "C", 2 }
1: { B, "B", 1 }
2: { C, "A", 3 }

StringIndex
0: { "A", Reference ("MainDataset", 2) }
1: { "B", Reference ("MainDataset", 1) }
2: { "C", Reference ("MainDataset", 0) }

IntIndex
0: { 1, Reference ("MainDataset", 1) }
1: { 2, Reference ("MainDataset", 0) }
2: { 3, Reference ("MainDataset", 2) }

위의 바이너리 검색을 사용하려면 인덱스 테이블에서 필드를 찾을 때 이진 검색을 작성해야합니다.

메모리 색인 :

데이터 세트의 크기에 따라 "roost :: serialize"와 같은 것을 사용하여 자체 데이터 세트에 읽거나 쓰는 메모리 인덱스를 사용하기 쉽습니다.

HDF5-FASTQUERY :

이것 종이 (그리고 이것도 이것 페이지) HDF 데이터 세트를 통해 복잡한 쿼리를 수행하기 위해 비트 맵 지수를 사용하는 것을 설명하십시오. 나는 이것을 시도하지 않았다.

다른 팁

h5lexists hdf5 1.8.0에서 이것을 소개했습니다.

http://www.hdfgroup.org/hdf5/doc/rm/rm_h5l.html#link-exists

HDF5 파일에있는 것들을 반복 할 수도 있습니다. H5LETRATE:

http://www.hdfgroup.org/hdf5/doc/rm/rm_h5l.html#link-iterate

그러나 데이터 세트를 열려고 시도하여 이전 버전을 수동으로 확인할 수도 있습니다. 우리는 이와 같은 코드를 사용하여 모든 버전의 HDF5를 처리합니다.

bool DoesDatasetExist(const std::string& rDatasetName)
{
#if H5_VERS_MAJOR>=1 && H5_VERS_MINOR>=8
    // This is a nice method for testing existence, introduced in HDF5 1.8.0
    htri_t dataset_status = H5Lexists(mFileId, rDatasetName.c_str(), H5P_DEFAULT);
    return (dataset_status>0);
#else
    bool result=false;
    // This is not a nice way of doing it because the error stack produces a load of 'HDF failed' output.
    // The "TRY" macros are a convenient way to temporarily turn the error stack off.
    H5E_BEGIN_TRY
    {
        hid_t dataset_id = H5Dopen(mFileId, rDatasetName.c_str());
        if (dataset_id>0)
        {
            H5Dclose(dataset_id);
            result = true;
        }
    }
    H5E_END_TRY;
    return result;
#endif
}

아마도 이 문서가 당신에게 매우 도움이 될 것입니다.http://www.cse.ohio-state.edu/~wayi/papers/HDF5_SQL.pdf

이것이 당신에게 필요한 것입니까?선언적 언어인 SQL을 사용하여 HDF5 데이터를 쿼리할 수 있습니다.

FastQuery와 달리 이 작업에는 인덱스가 없지만, 우리 그룹에서는 비트맵 인덱스가 포함된 오픈 소스 버전도 제공합니다.

또한 쿼리(특히 집계의 경우)를 실시간으로 완료하려면 대략적인 집계 또는 온라인 집계를 고려해야 합니다.나는 또한 HDF5에서 직접 작동하는 일부 제품을 개발했습니다.

게다가 HDF5에 대한 일부 쿼리는 관계형 데이터베이스에서 볼 수 있는 것보다 훨씬 더 복잡할 수 있습니다.일부 쿼리는 관계형 테이블 지향이 아닌 배열 지향입니다."SciQL"을 검색하면 배열 기반 데이터 모델에 대한 복잡하고 고유한 쿼리 유형을 찾을 수 있으며 이는 확실히 HDF5에 적용될 수 있습니다.그런 종류의 쿼리를 수행해야 합니까?나는 또한 그곳의 복잡한 쿼리 유형 중 일부를 지원하는 제품을 개발했습니다.

당신은 무엇을 의미합니까? 식별자 ? 당신이 의미한다면 기인하다, 확인하다 이 튜토리얼. C :

status = H5Aread(attr_id, mem_type_id, buf);
status = H5Awrite(attr_id, mem_type_id, buf);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top