All Products
Search
Document Center

Simple Log Service:Kompresi data

Last Updated:Jun 26, 2025

LZ4 adalah algoritma kompresi data tanpa kehilangan informasi yang digunakan untuk mengompres dan mendekompres data secara efisien. Beberapa operasi API dari Simple Log Service mendukung LZ4. Menggunakan LZ4 untuk mengompres data dapat mengurangi lalu lintas jaringan, menurunkan biaya lalu lintas, serta meningkatkan kecepatan akses API Simple Log Service.

Kompres badan permintaan HTTP

Saat memanggil operasi API berikut, badan permintaan HTTP dapat dikompres menggunakan LZ4:

  • PutLogs (PutLogStoreLogs)

  • PutWebtracking

Untuk menggunakan LZ4 dalam mengompres badan permintaan HTTP, ikuti langkah-langkah berikut:

  1. Tambahkan x-log-compresstype: lz4 ke header permintaan HTTP.

  2. Gunakan LZ4 untuk mengompres badan permintaan HTTP.

  3. Atur parameter x-log-bodyrawsize di header permintaan HTTP menjadi ukuran asli badan permintaan.

  4. Atur parameter Content-Length di header permintaan HTTP menjadi ukuran kompresi badan permintaan.

Kompres respons

Saat memanggil operasi PullLogs, respons dapat dikompres menggunakan LZ4.

Metode:

  • Atur parameter Accept-Encoding menjadi lz4 di header permintaan. Kemudian, sisi server akan mengembalikan respons yang telah dikompres menggunakan LZ4.

  • Parameter x-log-bodyrawsize di header permintaan yang dikembalikan menentukan ukuran asli badan permintaan. Gunakan parameter ini saat mendekompres badan permintaan.

Contoh

  • Log Mentah

    Ambil file log-sample.json sebagai contoh. Contoh berikut hanya untuk referensi. Informasi yang terkandung dalam permintaan dan respons bervariasi sesuai dengan struktur data aktual log mentah saat Anda memanggil operasi API Simple Log Service:

    {
      "__tags__": {},
      "__topic__": "",
      "__source__": "47.100.XX.XX",
      "__logs__": [
        {
          "__time__": "03/22 08:51:01",
          "content": "*************** RSVP Agent started ***************",
          "method": "main",
          "level": "INFO"
        },
        {
          "__time__": "03/22 08:51:01",
          "content": "Specified configuration file: /u/user10/rsvpd1.conf",
          "method": "locate_configFile",
          "level": "INFO"
        },
        {
          "__time__": "03/22 08:51:01",
          "content": "Using log level 511",
          "method": "main",
          "level": "INFO"
        },
        {
          "__time__": "03/22 08:51:01",
          "content": "Get TCP images rc - EDC8112I Operation not supported on socket",
          "method": "settcpimage",
          "level": "INFO"
        },
        {
          "__time__": "03/22 08:51:01",
          "content": "Associate with TCP/IP image name = TCPCS",
          "method": "settcpimage",
          "level": "INFO"
        },
        {
          "__time__": "03/22 08:51:02",
          "content": "registering process with the system",
          "method": "reg_process",
          "level": "INFO"
        },
        {
          "__time__": "03/22 08:51:02",
          "content": "attempt OS/390 registration",
          "method": "reg_process",
          "level": "INFO"
        },
        {
          "__time__": "03/22 08:51:02",
          "content": "return from registration rc=0",
          "method": "reg_process",
          "level": "INFO"
        }
      ]
    }
  • Prosedur Pengujian

    Kode Python berikut menunjukkan prosedur kompresi data:

    from lz4 import block
    with open('log-sample.json', 'rb') as f:
        data = f.read()
        compressed=block.compress (data, store_size=False) # Kompres data:
        print(f'out/in: {len(compressed)}/{len(data)} Bytes')
        print(f'Rasio kompresi: {len(compressed)/len(data):.2%}')
  • Hasil

    Hasil kompresi file log-sample.json dikembalikan. Rasio kompresi adalah 39,30%. Rasio kompresi bergantung pada isi data. Jika data berisi banyak konten berulang, rasio kompresi akan lebih tinggi:

    out/in: 542/1379 Bytes
    Rasio kompresi: 39,30%

Kode contoh

  • Go

    • Instal pustaka dependen:

      go get github.com/pierrec/lz4
    • Kode contoh:

      import (
          "fmt"
          "log"
      
          lz4 "github.com/cloudflare/golz4"
      )
      
      func main() {
          data := []byte("hello world, hello golang")
          // Kompres data.
          compressed := make([]byte, lz4.CompressBound(data))
          compressedSize, err := lz4.Compress(data, compressed)
          if err != nil {
              log.Fatal(err)
          }
          compressed = compressed[:compressedSize]
      
          // Dekompres data.
          bodyRawSize := len(data) // Anda dapat menggunakan parameter x-log-bodyrawsize di header permintaan HTTP yang dikembalikan untuk mendekompres data. 
          decompressed := make([]byte, bodyRawSize)
          err = lz4.Uncompress(compressed, decompressed)
          if err != nil {
              log.Fatal(err)
          }
          decompressed = decompressed[:bodyRawSize]
      }
  • Python

    • Instal pustaka dependen:

      python3 -m pip install lz4
    • Kode contoh:

      from lz4 import block
      
      data = b'hello world, hello sls'
      # Kompres data.
      compressed = block.compress(data, store_size=False)
      
      # Dekompres data.
      body_raw_size=len(data) # Anda dapat menggunakan parameter x-log-bodyrawsize di header permintaan HTTP yang dikembalikan untuk mendekompres data. 
      decompressed = block.decompress(compressed, uncompressed_size=body_raw_size)
  • Java

    • Tambahkan dependensi Maven:

      <dependency>
        <groupId>net.jpountz.lz4</groupId>
        <artifactId>lz4</artifactId>
        <version>1.3.0</version>
      </dependency>
    • Kode contoh:

      package sample;
      
      import net.jpountz.lz4.LZ4Compressor;
      import net.jpountz.lz4.LZ4Factory;
      import net.jpountz.lz4.LZ4FastDecompressor;
      
      import java.io.File;
      import java.io.IOException;
      import java.nio.file.Files;
      
      public class Sample {
          public static void main(String[] args) throws IOException {
              byte[] data = "hello world, hello sls".getBytes();
              // Kompres data.
              LZ4Compressor compressor = LZ4Factory.fastestInstance().fastCompressor();
              int maxLen = compressor.maxCompressedLength(data.length);
              byte[] buffer = new byte[maxLen];
              int compressedSize = compressor.compress(data, 0, data.length, buffer, 0, maxLen);
              // Salin buffer ke parameter kompresi. 
              byte[] compressed = new byte[compressedSize];
              System.arraycopy(buffer, 0, compressed, 0, compressedSize);
      
              // Dekompres data.
              int bodyRawSize = data.length; // Anda dapat menggunakan parameter x-log-bodyrawsize di header permintaan HTTP yang dikembalikan untuk mendekompres data. 
              LZ4FastDecompressor decompressor = LZ4Factory.fastestInstance().fastDecompressor();
              byte[] decompressed = new byte[bodyRawSize];
              decompressor.decompress(compressed, 0, decompressed, 0, bodyRawSize);
          }
      }
  • JavaScript

    • Gunakan npm atau Yarn untuk menginstal pustaka dependensi buffer dan lz4:

      npm install buffer lz4
    • Kode contoh:

      import lz4 from 'lz4'
      import { Buffer } from 'buffer'
      
      // Kompres data.
      const data = 'hello world, hello sls'
      const output = Buffer.alloc(lz4.encodeBound(data.length))
      const compressedSize = lz4.encodeBlock(Buffer.from(data), output)
      const compressed = Uint8Array.prototype.slice.call(output, 0, compressedSize)
      
      // Dekompres data.
      const bodyRawSize = data.length; // Anda dapat menggunakan parameter x-log-bodyrawsize di header permintaan HTTP yang dikembalikan untuk mendekompres data. 
      const decompressed = Buffer.alloc(bodyRawSize)
      lz4.decodeBlock(Buffer.from(compressed), decompressed)
      const result = decompressed.toString()
  • C++

    • Salin direktori lz4 dan lib dari direktori root proyek SDK C++ ke direktori tujuan. Saat mengompilasi kode, tambahkan parameter kompilasi serta jalur dan tautan pustaka dependensi lz4. Sebagai contoh, Anda dapat menambahkan jalur -L./lib dan tautan -llz4. Untuk informasi lebih lanjut, lihat Instal Simple Log Service SDK untuk C++:

      g++ -o your_progame your_progame.cpp -std=gnu++11 -llz4 -L./lib/
    • Kode contoh:

      #include "lz4/lz4.h"
      #include <string>
      #include <iostream>
      using namespace std;
      
      int main()
      {
          string data = "hello sls, hello lz4";
          // Kompres data.
          string compressed;
          compressed.resize(LZ4_compressBound(data.size()));
          int compressed_size = LZ4_compress(data.c_str(), &compressed[0], data.size());
          compressed.resize(compressed_size);
      
          // Dekompres data.
          string decompressed;
          int bodyRawSize = data.size();
          decompressed.resize(bodyRawSize);
          LZ4_decompress_safe(compressed.c_str(), &decompressed[0], compressed.size(), bodyRawSize);
          cout << decompressed << endl;
          return 0;
      }