Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mensiri Struktur Go dengan Cekap ke Cakera dengan Saiz Fail Minimum?
Pensirilan Go yang Cekap bagi Struktur ke Cakera: Mencapai Kembung Minimum
Walaupun keluaran membuak-buak yang dihasilkan oleh siri gob, analisis yang lebih mendalam mendedahkan bahawa seterusnya entri daripada jenis yang sama hanya dikenakan overhed 12 bait. Overhed ini mewakili saiz minimum yang diperlukan untuk mengekod dua rentetan panjang 4 bait (termasuk awalan panjang).
Untuk mengurangkan saiz fail keseluruhan, pertimbangkan strategi berikut:
Kod Demonstrasi:
Kod Go berikut menunjukkan pelbagai pendekatan yang dibincangkan:
package main import ( "bytes" "compress/bzip2" "compress/flate" "compress/gzip" "compress/zlib" "encoding/gob" "fmt" "io" ) type Entry struct { Key string Val string } func main() { // Create test data entries := make([]Entry, 1000) for i := 0; i < 1000; i++ { entries[i].Key = fmt.Sprintf("k%03d", i) entries[i].Val = fmt.Sprintf("v%03d", i) } // Test different encoding/compression techniques for _, name := range []string{"Naked", "flate", "zlib", "gzip", "bzip2"} { buf := &bytes.Buffer{} 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) } enc := gob.NewEncoder(out) for _, e := range entries { enc.Encode(e) } if c, ok := out.(io.Closer); ok { c.Close() } fmt.Printf("[%5s] Length: %5d, average: %5.2f / Entry\n", name, buf.Len(), float64(buf.Len())/1000) } }
Output:
[Naked] Length: 16053, average: 16.05 / Entry [flate] Length: 3988, average: 3.99 / Entry [ zlib] Length: 3994, average: 3.99 / Entry [ gzip] Length: 4006, average: 4.01 / Entry [bzip2] Length: 1977, average: 1.98 / Entry
Seperti yang terbukti daripada output, menggunakan teknik pemampatan dengan ketara mengurangkan saiz fail, dengan bzip2 mencapai 1.98 bait/Entri.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Struktur Go dengan Cekap ke Cakera dengan Saiz Fail Minimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!