繁体   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