Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BACKUP] 支援壓縮演算法 #1822

Open
chia7712 opened this issue Jun 22, 2023 · 4 comments
Open

[BACKUP] 支援壓縮演算法 #1822

chia7712 opened this issue Jun 22, 2023 · 4 comments
Assignees
Milestone

Comments

@chia7712
Copy link
Contributor

backup 工具可以幫助我們快速將 topic 資料備份到指定的檔案系統,考量資料可能非常龐大,在資料內容適合壓縮的狀態下,支援壓縮演算法可以幫助我們更有效地將資料備份出來,因此這個議題用來追蹤以下幾個功能:

  1. 可以透過參數指定“備份出來”的資料是用哪一種壓縮演算法
  2. 將“備份出來”的資料倒回去的時候,系統可以自行判讀要用哪一種”壓縮演算法“
  3. 壓縮演算法至少要支援 gzip,其他 lz4 snappy zstd 則看是否可行
@chia7712 chia7712 added this to the 0.3.0 milestone Jun 22, 2023
@Haser0305
Copy link
Collaborator

Haser0305 commented Jun 24, 2023

壓縮演算法至少要支援 gzip,其他 lz4 snappy zstd 則看是否可行

目前專案中的 RecordWriterBuilder 中可以透過 compression 建立使用 gzip 的 ourput stream,那我先完成在 exporter 中可以透過可選參數 'compression.type' 供使用者設定要使用的壓縮方法。

將“備份出來”的資料倒回去的時候,系統可以自行判讀要用哪一種”壓縮演算法“

如果是第三點的那幾種壓縮方式,透過magic number來判斷壓縮方式不知是否恰當?

@chia7712
Copy link
Contributor Author

如果是第三點的那幾種壓縮方式,透過magic number來判斷壓縮方式不知是否恰當?

Magic number比較適合用來描述「整個檔案該如何讀取 or 寫入」,壓縮的資訊只應該是該檔案 tail的一部分

換句話說,我們的輸出檔案應該要在尾巴押上metadata了

@jackyoh
Copy link

jackyoh commented Jun 28, 2023

如果只是單純知道檔案是哪種類型,應該可以使用以下的寫法:

import java.io.File;
import java.nio.file.Files;
public class Main {
    public static void main(String[] args) {
        try {
            File file = new File("/home/user1/test.gz");
            String fileType = Files.probeContentType(file.toPath());
            System.out.println(fileType);
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }
}

一個小建議,還是要看實際的需求來決定寫法。

@Haser0305
Copy link
Collaborator

非常感謝建議
我會試試看這方法的效果

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants