go - Golang 中的大文件

标签 go bigdata

我正在处理一个包含数百万个非常小的文件的应用程序,这变得很痛苦。很难转移。

所以,我想到了大文件或其他虚拟文件系统,它们可以创建一个大文件,包含我所有的索引数据。

在 golang 中如何处理这个问题?你有什么库可以推荐吗?

最佳答案

也许一个简单的 ZIP 存档(假设为零压缩)适合您?它有一个内容(文件流)的自然索引,所以当你 open it using archive/zip , 你回来 a slice of "file info blocks" , 每个都“知道”如何定位和读取其相应的文件流。 (甚至有一种方法可以获取文件数据的偏移量,并读取它 直接——绕过空操作“解压缩器”和校验和验证, 所以你可以探索这种可能的速度调整,如果你的测量会 显示访问该数据的速度“正常方式”将是次优的。)

然后您可以创建一个由文件名索引的 map 以便快速访问。

或者更进一步,创建此类 map 的层次结构 模拟“自然”目录树。 或者可能在文件系统树中有多个 ZIP 存档。


自然地,如果您想要的一切都是文件流 blob 的 r/o blob + 索引,那么您自己实现这将是一件相当简单的事情——无论是对于读取还是写入。如果你不太喜欢设计东西,我会看看 format of the Git "pack files" .

关于go - Golang 中的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47918487/

相关文章:

Go 中的 MongoDB 聚合查找 (mgo.v2)

json - 如何将具有两种不同数据类型的 JSON 数组解析为 Golang 中的结构

linux - HADOOP_HOME 如何引用 hadoop 命令

c++ - 在 cgo 库中链接第 3 方静态库

go - 最大限度地减少 map 上的锁定 - 而是尽快锁定单个项目

hadoop - 在文件中查找哪种数据类型的最快方法

tensorflow - 在大数据上运行 Tensorflow

hadoop - 创建具有固定记录长度的HIVE表

r - 在有约束的情况下扩展电网(或电源组)

go - 如何从 Go 中的结构中的接口(interface)实例获取属性