需要一个高效的数据容器。尽快从存储转移到内存

Sun*_*arc 7 linux

问题:我需要尽快将大块数据从远程位置复制到系统内存中。

场景:我有一个数据处理系统。该系统是通过使用从远程位置拉入的多个组件即时通过 shell 脚本构建的。

其中一个组件是作为文件组存储的大块数据。

我的要求是从远程位置检索大块数据,并尽快将其安装到系统内存中。这是一项要求,以便依赖此数据的系统可以在启动后尽快开始使用它进行处理。


问题“我的数据最有效的容器是什么?”


已经尝试/考虑的解决方案

  • ISO 文件:需要创建和读取通常不是本机的工具
  • TAR 文件:提取可能需要很多时间
  • 作为本地挂载的远程文件系统:慢,因为内容需要复制到内存中
  • LVM 快照:更多地用于备份,而不是为恢复速度而构建

注意事项

  • 数据丢失不是主要问题。
  • 远程文件传输过程不是主要问题,因为我已经有了足够的工具。
  • 该系统目前使用的是 Ubuntu Linux。

Sun*_*arc 0

我对 ISO 容器的最初研究显然是不完整的。ISO 集装箱似乎是最有效的,可以快速获取内容物。这是基于我的研究发现的,当然可能会改变。

打包在 ISO 中我能够:

  • 远程存储数据
  • 通过多部分传输非常快速地检索它
  • 将其存储在本地,直接存储到内存中
  • 快速安装

使用这个容器,我能够将整个过程缩短到 1 分钟以内,这是该项目可以接受的容忍水平。

在 Ubuntu 中使用类似于以下的命令可以轻松创建此容器:

mkisofs -o /tmp/data.iso /opt/data/
Run Code Online (Sandbox Code Playgroud)

**请注意,这需要genisoimage通过apt-get.

为了将文件直接存储到内存中,我在/tmp文件系统中创建了一个 ramdisk:

mount -t tmpfs -o size=3G tmpfs /tmp/data
Run Code Online (Sandbox Code Playgroud)

使用多部分传输实用程序可以相对快速地检索容器。我使用了一种axel这样的方式:

axel -a -n 128 -o /tmp/data/data.iso https://s3.amazonaws.com/bucket/data.iso
Run Code Online (Sandbox Code Playgroud)

最后我们将文件挂载到本地文件系统:

mount -o loop -r /tmp/data/data.iso /opt/data/
Run Code Online (Sandbox Code Playgroud)

安装过程几乎是瞬时的,这使得系统能够快速开始使用数据进行处理。