page bulk export が中断され、それを再開する場合に、zip の作成を途中から行うことが可能なのかを調査する。

そもそも可能なの?

zip の構造について: https://en.wikipedia.org/wiki/ZIP_(file_format) external_link のstructure の欄参照

zip の末尾には central directory というものがあり、これから zip 全体のファイル構造 (ファイルデータまでの offset など) を読み取ることができる。これを使えば、圧縮されたままファイルを追加することが可能とのこと。

考えられる手法

multipart upload でアップロードする part をファイルが成り立つ単位で区切り (part 内の最後のページデータが中途半端な状態で終われない)、central directory を別で保存しておけば、再開するときに central directory を更新しつつデータを追加することができる? central directory は最後にアップロードを行う。

しかし、以下の解決できるかわからない問題がある

  • GCS へのアップロードする part は256KBの倍数である必要がある(溢れる部分はアップロードから省略される)。そうするとページが成り立つように part を区切ることは難しい。

node の zip ライブラリに central directory を操作する機能はあるのか

調べた限りは見つからず。

おまけ

既存 zip に append する機能があるかについて

まとめ

  • central directory を元に zip を操作する必要があり、難易度は高そう
  • central directory を操作できる zip ライブラリは無く、自前実装する必要がありそう
  • そもそも GCS は part size の制約的に難しいかもしれない