我目前在探索HDF5。我讀過線程「Evaluating HDF5」的有趣評論,並且我明白HDF5是存儲數據的首選解決方案,但您如何查詢呢?例如,假設我有一個包含一些標識符的大文件:有沒有辦法快速知道給定的標識符是否存在於文件中?搜索HDF5數據集
回答
我認爲答案是「不直接」。
以下是我認爲可以實現該功能的一些方法。
使用羣體:
組的層次結構可以在Radix Tree的形式來存儲數據。儘管這可能不太好。
使用索引數據集:
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) }
爲了使用上述內容,在查找索引表中的字段時必須寫入二進制搜索。
在內存中的索引:
根據不同的數據集可能是一樣易於使用的讀/使用類似寫入自己的數據集中在內存索引的大小「的boost ::連載」。
HDF5-FastQuery:
你是什麼意思標識?如果您的意思是屬性,請檢查this tutorial。在C:
status = H5Aread(attr_id, mem_type_id, buf);
status = H5Awrite(attr_id, mem_type_id, buf);
通過標識符,我的意思是像一個唯一的名稱,一個主鍵。這個例子描述瞭如何創建一個屬性,但是它如何用於搜索呢? – Pierre 2009-11-06 13:20:03
H5Lexists介紹了這HDF5 1.8.0:
http://www.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Exists
您還可以重複,它們與H5Literate一個HDF5文件的東西:
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。你需要執行這些查詢嗎?我還開發了一種產品來支持一些複雜的查詢類型。
- 1. Chunked HDF5數據集和slabsize
- 2. 搜索大型數據集
- 3. Python搜索數據集
- 4. 全文搜索數據集
- 5. 搜索從數據集中
- 6. 使用H5PY在HDF5數據庫中搜索屬性值
- 7. 將數據集轉換爲HDF5數據集
- 8. 調整Julia的HDF5數據集
- 9. 如何存儲辭典HDF5數據集
- 10. 閱讀HDF5數據集與熊貓
- 11. R hdf5數據集寫入不正確?
- 12. 寫一個boost :: multi_array到hdf5數據集
- 13. mmap hdf5數據集在C/C++
- 14. 打開hdf5字符串數據集
- 15. HDF5數據集中事件的鏈接
- 16. 基於2D條件對大型3D HDF5數據集進行子集化索引
- 17. 如何高效地搜索子數據集的大數據集?
- 18. 如何搜索數據集建議?
- 19. 在大型數據集中搜索
- 20. 在Rails中搜索大型數據集
- 21. 從xml文件中搜索數據集
- 22. 使用Linq搜索多項數據集
- 23. 在數據子集內搜索 - Solr
- 24. ios coredata搜索大型數據集
- 25. 使用twitter搜索API收集數據
- 26. 搜索ASP.NET SQL數據集郵編
- 27. 如何搜索大型XML數據集?
- 28. 搜索數據
- 29. 搜索數據
- 30. 集成Hadoop和HDF5
Richard Corden回覆中的哪個選項您使用過? – coelhudo 2011-11-19 23:31:10
索引數據集。 – Pierre 2011-11-20 09:09:02