問題:
使用下列指令將鍵/值條目中的字串編碼到磁碟由於不必要的開銷,encoding/gob 會導致過度膨脹。所需的輸出格式省略了類型定義,僅包含原始位元組和字串長度。
分析:
encoding/gob 中的初始膨脹源自於包含型別編碼流中的定義。一旦這些定義被傳輸,相同類型的後續值只會產生最小的開銷,從而可以有效地編碼多個值。
解:
消除不必要的膨脹,不應使用encoding/gob 套件。相反,請考慮以下選項:
示範:
下表比較了每個條目的編碼大小使用不同的方法:
Method | Encoded Size (Bytes) | Compression Ratio |
---|---|---|
Naked Output | 16.04 | 100% |
Flate | 4.12 | 26% |
Zlib | 4.13 | 26% |
Gzip | 4.14 | 26% |
Bzip2 | 2.04 | 12.7% |
建議:
在大多數實際場景中,使用compress/gzip 或compress/zlib 可以在壓縮比和效能之間提供良好的平衡。但是,如果磁碟空間限制非常緊張,請考慮使用 bzip2,因為它具有卓越的壓縮功能,但代價是效率略有降低。
以上是如何優化 Go 結構序列化到磁碟以獲得最小大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!