访问 Google 云存储上大文件中的随机行
Access random line in large file on Google Cloud Storage
我正在尝试从存储在 public 云存储桶中的大文件中随机读取一行。
我的理解是我无法使用 gsutil 执行此操作并且已经研究了 FUSE 但不确定它是否会满足我的用例:
https://cloud.google.com/storage/docs/gcs-fuse
有很多文件,每个大约 50GB -- 总共有几个 TB。如果可能的话,我想避免下载这些文件。它们都是纯文本文件——您可以在这里看到它们:
https://console.cloud.google.com/storage/browser/genomics-public-data/linkage-disequilibrium/1000-genomes-phase-3/ldCutoff0.4_window1MB
如果我可以简单地使用 FUSE 获得一个文件系统句柄,这样我就可以将数据直接放入其他脚本中,那就太好了——但我可以接受重新编写它们以逐行读取,如果那样的话什么是必要的。关键是——在任何情况下,界面都不应该下载整个文件。
Range header 允许您使用 XML API.
从文件中下载特定的字节偏移量
没有直接的方法来检索特定的 行 ,因为 GCS 不知道文件中任何给定行 begins/ends 的位置。查找特定行的工具通常读取整个文件以计算换行符以找到所需的行。
如果文件中有行号,那么您可以进行二进制搜索以查找所需的行。您会请求小块,检查行号,然后根据它尝试不同的位置,直到找到所需的行。
如果文件没有行号,您可以进行预处理以使其成为可能。在初始文件上传之前,您可以扫描文件并记录每个第 N 行的字节位置。然后要获得所需的行,您可以在该索引中查找字节位置,并可以为相关部分提出范围请求。
我正在尝试从存储在 public 云存储桶中的大文件中随机读取一行。
我的理解是我无法使用 gsutil 执行此操作并且已经研究了 FUSE 但不确定它是否会满足我的用例: https://cloud.google.com/storage/docs/gcs-fuse
有很多文件,每个大约 50GB -- 总共有几个 TB。如果可能的话,我想避免下载这些文件。它们都是纯文本文件——您可以在这里看到它们: https://console.cloud.google.com/storage/browser/genomics-public-data/linkage-disequilibrium/1000-genomes-phase-3/ldCutoff0.4_window1MB
如果我可以简单地使用 FUSE 获得一个文件系统句柄,这样我就可以将数据直接放入其他脚本中,那就太好了——但我可以接受重新编写它们以逐行读取,如果那样的话什么是必要的。关键是——在任何情况下,界面都不应该下载整个文件。
Range header 允许您使用 XML API.
从文件中下载特定的字节偏移量没有直接的方法来检索特定的 行 ,因为 GCS 不知道文件中任何给定行 begins/ends 的位置。查找特定行的工具通常读取整个文件以计算换行符以找到所需的行。
如果文件中有行号,那么您可以进行二进制搜索以查找所需的行。您会请求小块,检查行号,然后根据它尝试不同的位置,直到找到所需的行。
如果文件没有行号,您可以进行预处理以使其成为可能。在初始文件上传之前,您可以扫描文件并记录每个第 N 行的字节位置。然后要获得所需的行,您可以在该索引中查找字节位置,并可以为相关部分提出范围请求。