将大数据集摘要写入磁盘

| 我有一个很大的数据集,从中可以得出不同层次的摘要的层次结构摘要。我想将这些摘要缓存在磁盘上的文件中,每个摘要都可以通过其偏移量从文件中检索。通过从初始数据集中获取较小的块(约256个字节)并从每个块中提取最大值来得出初始摘要。然后,通过采用前面的摘要中每对值的最大值来得出后续摘要。以下(基本)插图将有望阐明:
251 18 5 91  11 17 54 16  9 31 201 148  173 214 66 43   ;;Initial data-set (chunked)

    251           54          201            214        ;;Summary 0

           251                        214               ;;Summary 1

                         251                            ;;Summary 2
我正在尝试实现的一种方法是派生(然后缓存)这些摘要,这些摘要可扩展到大型数据集,例如4GB数量级。速度并不是特别重要的问题,但是空间是一个问题:因为对于这种大小的数据集,即使摘要可能也太大而无法在内存中处理。我一直在尝试多种方法: 天真的方法是简单地写出每一层,然后再读回去以计算下一层。显然,这是最简单的方法,但似乎不是最优雅或最有效的方法。内存映射可能会提供一些改进,但是这也可能意味着我需要预先分配文件。 计算块中的每一层-计算第一层的块,然后计算第二层,然后计算第三层,依此类推,最后以适当的偏移量将块写入文件,然后重新开始该过程。这样做的问题是,由于每个块的大小都是从中计算块的一半,因此在计算所有层之前,我们将得出0块大小。 每个摘要使用一个文件。 使用某种基于树的方法(上面的插图-如果打开它的头-就像一个堆)。也许树中的每个节点都可以表示每一层中1024个字节的块。一个父节点将有两个子节点,它们代表前一层中的连续块,并且其内容将从这些子节点计算得出。完成此操作后,可以简单地将子节点刷新到磁盘。我怀疑此过程可以完全在内存中完成(尽管我不知道它的复杂性可能是什么)。 想法/观察最欢迎。 克里斯托弗     
已邀请:
        好的,因此,在进行了更多研究之后,我最终选择了B树,将前几层缓存在主内存中。现在可以使用。 克里斯     

要回复问题请先登录注册