使用HDFSM数据存储在HDFSI文件中。在
通常情况下,数据一次只附加一个样本,而不是长批次。在
我注意到文件增长得相当快,我可以通过ptrepack大大减少它们。在
下面是一个小文件的例子。我的应用程序(使用zlib和complevel9)生成的文件有6.7mb大。在
/ (RootGroup) ''
/test (Group) ''
/test/table (Table(1042,), shuffle, zlib(1)) ''
description := {
"index": Int64Col(shape=(), dflt=0, pos=0),
"values_block_0": Float64Col(shape=(2,), dflt=0.0, pos=1),
"values_block_1": Int64Col(shape=(1,), dflt=0, pos=2)}
byteorder := 'little'
chunkshape := (2048,)
autoindex := True
colindexes := {
"index": Index(6, medium, shuffle, zlib(1)).is_csi=False}
如果我不带选项重新打包,它会变得更小(71K):
^{pr2}$当使用--complevel=1
或--complevel=9
时,我得到一个19K文件。在
这些文件都很小,但我想说的是,只要重新打包,我就可以将整个35GB的数据库缩小到几百MB。在
一定是写得不对。在
我知道"hdf5 does not reclaim space" warning。正常的用例不涉及删除数据,或者可能是少量删除数据。在
为了附加新数据,我使用
store.append(data_id, data_dataframe)
所以我只附加。我不会删除/写入全部数据。在
我注意到上面的垃圾堆有点不同
autoindex := True
colindexes := {
"index": Index(6, medium, shuffle, zlib(1)).is_csi=False}
但我不知道该怎么办。在
我怀疑尺寸问题可能是因为一次只添加一个样本。但我不明白为什么这会成为一个问题。即使添加了少量数据,也应压缩整个数据块。在
或者是因为每次修改块时,它都会写入另一个空间,而旧的块空间会丢失?在
在这种情况下,我想我的选择是:
修改应用程序,以便批量写入数据。也许通过添加一个缓存层。几乎不可能。我还不如更改底层数据库。
选择一个更小的块大小。但这也有缺点。
设置脚本以定期ptrepack数据。
目前没有回答
相关问题 更多 >
编程相关推荐