Pensirilan Go yang Cekap bagi Struct to Disk
Masalah:
Mengoptimumkan prestasi siri dengan meminimumkan mengembung dalam output apabila pengekodan struct ke cakera menggunakan gob.
Cadangan Penyelesaian:
Walaupun pakej gob menyediakan penyiaran yang cekap, ia termasuk maklumat jenis dalam pengekodan, menghasilkan overhed awal sebanyak 26 bait bagi setiap jenis unik . Untuk struktur dengan berbilang kejadian, overhed ini boleh dilunaskan merentasnya.
Alternatif:
Untuk aplikasi yang overhed ini tidak boleh diterima, pertimbangkan untuk menggunakan teknik mampatan seperti flate, zlib, gzip atau bzip2 untuk mengurangkan lagi saiz output dengan 50-80%.
Contoh:
Kod berikut menunjukkan overhed Entri tunggal menggunakan gob:
package main import ( "bytes" "encoding/gob" "fmt" ) type Entry struct { Key string Val string } func main() { var buf bytes.Buffer enc := gob.NewEncoder(&buf) e := Entry{"k1", "v1"} enc.Encode(e) fmt.Println(buf.Len()) // Prints 48 bytes }
Jika berbilang kejadian daripada Kemasukan bersiri, overhed dilunaskan:
for i := 0; i < 1000; i++ { e.Key = fmt.Sprintf("k%3d", i) e.Val = fmt.Sprintf("v%3d", i) enc.Encode(e) } fmt.Println(buf.Len()) // Prints 16036 bytes = 16.04 bytes/Entry
Untuk mencapai padat yang diingini format siri, teknik mampatan tambahan boleh digunakan:
import ( "compress/bzip2" "compress/flate" "compress/gzip" "compress/zlib" ) var out io.Writer switch name { case "Naked": out = buf case "flate": out, _ = flate.NewWriter(buf, flate.DefaultCompression) case "zlib": out, _ = zlib.NewWriterLevel(buf, zlib.DefaultCompression) case "gzip": out = gzip.NewWriter(buf) case "bzip2": out, _ = bzip2.NewWriter(buf, nil) }
Saiz output yang terhasil dengan teknik mampatan:
Technique | Output Size | Average / Entry |
---|---|---|
Naked | 16036 bytes | 16.04 bytes |
flate | 4120 bytes | 4.12 bytes |
zlib | 4126 bytes | 4.13 bytes |
gzip | 4138 bytes | 4.14 bytes |
bzip2 | 2042 bytes | 2.04 bytes |
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Struktur Go dengan Cekap ke Cakera dan Meminimumkan Saiz Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!