簡體   English   中英

Java序列化Clojure數據結構的大小

[英]Size of Java serialized Clojure data structures

我在github項目prevayler-clj上打開了這個問題

https://github.com/klauswuestefeld/prevayler-clj/issues/1

因為1M短向量(例如[:a1 1] )形成了prevayler的狀態,所以使用Java writeObject逐一序列化時會導致文件大小為1GB。

可能嗎? 每個PersistentVector大約1kB? 進一步的研究表明,相同數量的向量可以在80MB的文件中序列化。 那么,prevayler序列化出了什么問題? 我在這些測試中做錯了嗎? 請參閱github問題以獲取我的測試代碼摘錄。

每個說prevLayer都沒錯。 只是java的writeObject方法沒有完全調整為寫入clojure數據。 它旨在存儲任何可序列化的Java對象的內部結構。 由於Clojure向量在幕后是相當復雜的java對象,因此我不感到驚訝的是,一個小的向量可能會寫出大約Kb的數據。

我猜想幾乎任何特定於Clojure的序列化方法都將導致文件更小。 根據經驗,標准clojure.core/pr + clojure.core/read在文件大小和速度之間取得良好的平衡,並且可以處理幾乎任何大小的數據結構。

請參閱以下頁面以了解Clojure載體的內部結構:

Prevayler顯然為每個序列化的元素啟動了一個新的ObjectOutputStream ,從而防止了它們之間類數據的任何重用。 另一方面,您的測試代碼是以“自然”的方式編寫的,允許重復使用。 尚不清楚每次迫使Prevayler重新啟動的原因,但鑒於它具有負面影響,我猶豫稱其為“功能”。 “解決方法”是更可能的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM