Go 戈朗的大档案

Go 戈朗的大档案,go,bigdata,Go,Bigdata,我正在处理一个包含数百万个非常小文件的应用程序,它正在成为一个难题。很难转移 因此,我想到了bigfiles或另一个虚拟文件系统,它可以创建一个包含所有索引数据的大文件 在golang怎么办?您有任何库可以推荐吗?推荐的解决方案取决于您未发布的要求,例如您是否需要修改文件?你需要移除它们的能力吗?您是否需要分布式存储等 如果您只需要添加您不打算更改的新文件,您可以使用(披露:我是作者)kvcache仅将所有条目存储在2个文件中(1个用于索引,1个用于数据),并将索引保存在内存中,因此查找速度尽可

我正在处理一个包含数百万个非常小文件的应用程序,它正在成为一个难题。很难转移

因此,我想到了bigfiles或另一个虚拟文件系统,它可以创建一个包含所有索引数据的大文件


在golang怎么办?您有任何库可以推荐吗?

推荐的解决方案取决于您未发布的要求,例如您是否需要修改文件?你需要移除它们的能力吗?您是否需要分布式存储等

如果您只需要添加您不打算更改的新文件,您可以使用(披露:我是作者)
kvcache
仅将所有条目存储在2个文件中(1个用于索引,1个用于数据),并将索引保存在内存中,因此查找速度尽可能快,传输文件相当于仅复制2个文件

MongoDB提供了一个类似API的文件系统,允许您存储文件元数据并进行搜索。该库还支持访问和使用GridFS,请参阅和类型

您也可以选择将文件存储在云中,有无数的服务和Go客户端库,它们都提供基本的搜索功能

另外,请务必检查服务器故障的问题和答案:


也许一个简单的ZIP存档(应该是零压缩的)适合你?它对内容(文件流)有一个自然索引,所以当您 , 每个“知道”如何定位和读取其相应的文件流。 (甚至还有一种方法可以获取文件数据的偏移量并读取它 直接绕过无操作“解压缩器”和校验和验证, 因此,如果您的测量结果符合要求,您可以探索这种可能的速度调整 显示访问数据的速度“正常方式”将是次优的。)

然后,您可以创建一个按文件名索引的映射,以便快速访问

或者更进一步,创建这样的地图的层次结构 模拟“自然”目录树。 或者在一个文件系统树中有几个ZIP归档文件



当然,如果您希望拥有的一切都是文件流blob+索引的r/o blob,那么在读写方面实现自己将是一件相当简单的事情。如果你对设计东西不太感兴趣,我会看看。

我怀疑将数百万个文件添加到zip存档中的效率。应该有人对它进行测试…@icza,当然,这也是我的疑问。但是OP明确提到这些文件“非常小”,所以我自然认为它们很小,比如说,小于1KB,这可能适合4GB的“标准ZIP”模块,也可能不适合。我还注意到,根据项目的文档,相当多的“标准”似乎可以处理1TB的数据集。还有一个经过战斗测试的,但我不确定它的大小限制。