自制序列化 vs Java 序列化

15

我有一个POJO对象需要持久化到数据库,当前的设计将其字段指定为单个字符串列,并且添加其他字段到表中不是一个选项。

也就是说,这些对象需要以某种方式进行序列化。所以,为了基本实现,我设计了自己的对象序列化形式,这意味着将所有字段连接成一个美好的字符串,由我选择的分隔符分隔。但这样做相当丑陋,会导致问题,例如如果其中一个字段包含我的分隔符。

因此,我尝试了基本的Java序列化,但从我进行的基本测试中可以看出,这变成了一项非常昂贵的操作(构建ByteArrayOutputStream,ObjectOutputStream等,反序列化同理)。

那么我的选择是什么?在数据库中序列化对象的首选方法是什么?

编辑:这将是我的项目中非常普遍的操作,因此必须将开销保持到最小,并且性能非常重要。另外,第三方解决方案很好,但无关紧要(通常会产生我试图避免的开销)。

14个回答

0

考虑更改您的架构。即使您找到了一种快速将POJO序列化为字符串的方法,您如何处理不同版本?您如何从X -> Y迁移数据库?或者更糟糕的是从A -> D?我们遇到了存储序列化对象到BLOB字段中并且必须迁移客户端跨多个版本的问题。


0

你有没有研究过JAXB?它是一种机制,可以定义一组从XML Schema创建的Java对象。它允许你从对象层次结构编组到XML或将XML解组回到对象层次结构。


0

我赞同使用JAXB,或者可能是XStream(前者更快,后者更注重对象序列化部分)的建议。

此外,我还会进一步建议一个不错的基于JSON的替代方案,Jackson(http://jackson.codehaus.org/Tutorial),它可以完全将bean序列化/反序列化为JSON文本以存储在列中。

哦,我绝对同意不要在任何情况下使用Java二进制序列化进行长期数据存储。Protocol Buffers也是如此;两者都对此目的过于脆弱(它们更适合在紧密耦合的系统之间进行数据传输)。


0
你可以尝试使用Preon。Preon旨在成为二进制编码数据的Hibernate和JAXB到XML。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接