问题标签 [large-files]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4306 浏览

git - git 是否值得管理许多大于 500MB 的文件

我会将大量数据置于版本控制之下,即包含数百个大小约为 500Mb 的文件的目录结构(深度<=5)。

我需要的是一个可以帮助我的系统: - 检测文件是否已更改 - 检测文件是否被添加/删除 - 将整个存储库克隆到另一个位置 - 存储“检查点”并稍后恢复

我不需要 sha1 来检测变化,更快的东西是可以接受的。

git值得吗?有更好的选择吗?

0 投票
4 回答
13233 浏览

java - 使用 Java 压缩 ZIP 中的大文件

我需要通过 Java 类 ZipOutputStream 压缩一个大文件(~450 MB)。这个大维度导致我的 JVM 堆空间出现“OutOfMemory”错误的问题。发生这种情况是因为“zos.write(...)”方法在压缩之前将所有要压缩的文件内容存储在内部字节数组中。

自然的解决方案是扩大JVM的堆内存空间,但是我想知道是否有一种方法可以将这些数据以流的方式写入。我不需要高压缩率,所以我也可以更改算法。

有人知道吗?

0 投票
6 回答
4119 浏览

gcc - gcc/g++:编译大文件时出错

我有一个自动生成的 C++ 源文件,大小约为 40 MB。它主要由一些向量的 push_back 命令和应该推送的字符串常量组成。

当我尝试编译这个文件时,g++ 退出并说它无法保留足够的虚拟内存(大约 3 GB)。谷歌搜索这个问题,我发现使用命令行开关

可以解决问题。但是,它们似乎仅在打开优化时才起作用。

1)这真的是我正在寻找的解决方案吗?

2)或者是否有更快,更好(编译需要很长时间并激活这些选项)的方法来做到这一点?

最好的祝愿,

亚历山大

更新:感谢所有好主意。我尝试了其中的大多数。使用数组而不是几个 push_back() 操作减少了内存使用量,但由于我试图编译的文件太大,它仍然崩溃,只是后来才崩溃。在某种程度上,这种行为真的很有趣,因为在这样的设置中没有太多需要优化的地方——GCC 在幕后做了什么来消耗这么多内存?(我也通过停用所有优化进行编译并得到相同的结果)

我现在切换到的解决方案是从我使用原始文件创建的二进制对象文件中读取原始数据objcopy。这是我最初不想做的,因为用高级语言(在本例中为 Perl)创建数据结构比用 C++ 更方便。

但是,在 Win32 下运行它比预期的要复杂。objcopy 好像生成ELF格式的文件,手动设置输出格式为pe-i386. 目标文件中的符号按照文件名的标准命名,例如转换文件inbuilt_training_data.bin将产生这两个符号:binary_inbuilt_training_data_bin_start 和 binary_inbuilt_training_data_bin_end。我在网上找到了一些教程,声称这些符号应该声明为extern char _binary_inbuilt_training_data_bin_start;,但这似乎不对——只extern char binary_inbuilt_training_data_bin_start;对我有用。

0 投票
3 回答
476 浏览

performance - 以恒定空间使用率从磁盘流式传输数据的最有效习惯用法是什么?

问题描述

我需要从磁盘流式传输大文件。假设文件大于内存容量。此外,假设我正在对数据进行一些计算并且结果足够小以适合内存。作为一个假设的例子,假设我需要计算一个 200GB 文件的 md5sum,并且我需要保证将使用多少内存。

总之:

  • 需要恒定的空间
  • 尽可能快
  • 假设非常大的文件
  • 结果适合记忆

问题

使用常量空间从文件中读取/流式传输数据的最快方法是什么?

我有过的想法

如果文件足够小以适合内存,那么mmap在 POSIX 系统上会非常快,不幸的是这里不是这种情况。mmap使用较小的缓冲区大小来缓冲文件的连续块是否有任何性能优势?将缓冲区向下移动文件的系统调用开销会mmap占主导地位吗?或者我应该使用我读入的固定缓冲区fread吗?

0 投票
0 回答
1089 浏览

.net - 如何从安全位置 .NET 创建大型可恢复下载

我需要先声明一下,我根本不是 .NET 编码器,但为了获得部分功能,我修改了一个 technet chunkedfilefetch.aspx 脚本,该脚本使用分块数据读取和写入流式传输方法进行文件传输,让我中途受益。

这适用于高达 2GB 的文件,并且现在可以正常运行。但只有一个问题它不允许恢复。

我采用了名为 fetch.aspx 的原始代码,并通过 URL 传递了一个 orderNUM。fetch.aspx&ordernum=xxxxxxx 然后它根据订单号从数据库中读取文件名/位置,并将其从不在 webroot 下的安全位置分块。

我需要一种方法来使这种恢复,由于互联网和大文件的性质,人们总是会断开连接并希望从中断的地方恢复。但是我读过的任何可恢复的文章,假设文件在 webroot 中.. 即。http://www.devx.com/dotnet/Article/22533/1954很棒的文章,效果很好,但我需要从安全的位置流式传输。

我根本不是 .NET 编码器,充其量我可以做一些冷融合,如果有人可以帮助我修改处理程序来做到这一点,我将非常感激。

要求:

  • 我有一个运行良好的 fetch.aspx 脚本,它使用上面的代码片段作为流式下载的基础。
  • 下载文件有 600MB 大,存储在 webroot 之外的安全位置。
  • 用户单击 fetch.aspx 开始下载,因此如果下载失败,将再次单击它。如果 ext 是 .ASPX 并且发送的文件是 AVI,点击它会完全绕过映射到 .AVI ext 的 IHTTP 处理程序,所以这让我很困惑
  • 据我了解,浏览器将读取并匹配 etag 值和文件修改日期以确定它们正在谈论同一个文件,然后在浏览器和 IIS 之间交换后续的接受范围。由于此对话框发生在 IIS 中,我们需要使用处理程序来拦截并做出相应的响应,但单击链接会将其发送到处理程序需要位于 AVI 字段上的 ASPX 文件。这也让我感到困惑。
  • 如果有一种方法可以将包含 etag 的初始 HTTP 请求标头、accept-range 请求到普通的 .ASPX 文件中,我可以读取这些值,如果存在 accept-range 和 etag,以某种方式开始在该字节值处分块?但我找不到传输 http 请求标头的方法,因为它们似乎在 IIS 级别丢失了。

  • 在 URL 字符串中传递的 OrderNum 是唯一的,可以用作 ETag

    /li>
  • 由于大小,文件需要可恢复和分块。

  • 文件扩展名为 .AVI,因此可以围绕它编写处理程序。
  • IIS 6.0 网络服务器

任何帮助都将不胜感激,我一直在阅读和下载代码,但是给出的示例都不符合我的情况,原始文件是从 webroot 外部流式传输的。请帮我处理这些 httphandlers :)

0 投票
4 回答
3022 浏览

linux - 远程 linux 服务器到远程 linux 服务器的大型稀疏文件复制 - 如何?

我有两台双胞胎 CentOS 5.4 服务器,每台都安装了 VMware 服务器。

假设我总是为我的 vmware 虚拟机使用稀疏文件,那么将虚拟机文件从一台服务器复制到另一台服务器的最可靠和最快速的方法是什么?

vm 的文件很难复制,因为它们非常大(50 GB),但由于它们是稀疏文件,我认为可以采取一些措施来提高复制速度。

0 投票
6 回答
57380 浏览

python - Python:如何将巨大的文本文件读入内存

我在具有 1GB RAM 的 Mac Mini 上使用 Python 2.6。我想读一个巨大的文本文件

所以文件中的每一行都包含一个由两个逗号分隔的整数值组成的元组。我想读入整个文件并根据第二列对其进行排序。我知道,我可以在不将整个文件读入内存的情况下进行排序。但我认为对于 500MB 的文件,我应该仍然能够在内存中执行它,因为我有 1GB 可用。

但是,当我尝试读取文件时,Python 分配的内存似乎比磁盘上文件所需的内存要多得多。因此,即使有 1GB 的 RAM,我也无法将 500MB 的文件读入内存。我用于读取文件并打印有关内存消耗的一些信息的 Python 代码是:

我得到的输出是:

在仅读取 500MB 文件的 25% 之后,Python 已经消耗了 500MB。因此,将文件内容存储为整数元组列表似乎不是很有效的内存。有没有更好的方法可以将 500MB 文件读入 1GB 内存?

0 投票
6 回答
8858 浏览

perl - 如何快速解析大 (>10GB) 文件?

我必须处理格式为 10-20GB 的文本文件:field1 field2 field3 field4 field5

我想将 field2 每一行的数据解析为几个文件之一;被推入的文件由 field4 中的值逐行确定。field2 中有 25 个不同的可能值,因此数据可以解析成 25 个不同的文件。

我尝试过使用 Perl(慢)和 awk(更快但仍然很慢) - 有人对替代方法有任何建议或指示吗?

仅供参考,这是我尝试使用的 awk 代码;请注意,我不得不恢复浏览大文件 25 次,因为我无法在 awk 中一次打开 25 个文件:

0 投票
3 回答
2041 浏览

haskell - 在 Haskell 中处理大文件

我有一个大文件(4+ gigs),可以说是 4 字节浮点数。我想将其视为列表,从某种意义上说,我希望能够使用 map、filter、foldl 等。但是,我不想用输出生成一个新列表,而是想将输出写回文件,因此只需将文件的一小部分加载到内存中。你可以说我是什么类型的 MutableFileList

有没有人遇到过这种情况?我没有重新发明轮子,而是想知道是否有一种 Hackish 方法来处理这个问题?

0 投票
6 回答
1668 浏览

java - 在 Java 中读取一个大文件并写入多个(数十、数百或数千)文件?

我有一个包含小消息的大型文件(4-5 GB 压缩),我希望按消息类型将其解析为大约 6,000 个文件。消息很小;根据类型,从 5 到 50 个字节不等。

每条消息都以一个固定大小的类型字段(一个 6 字节的密钥)开始。如果我读取“000001”类型的消息,我想其有效负载附加到 000001.dat 等。输入文件包含消息的混合;我想要 N 个同质输出文件,其中每个输出文件仅包含给定类型的消息。

将这些消息写入这么多单个文件的有效快速方法是什么?我想使用尽可能多的内存和处理能力来尽快完成它。我可以将压缩或未压缩的文件写入磁盘。

我正在考虑使用带有消息类型键和输出流值的哈希图,但我确信有更好的方法来做到这一点。

谢谢!