寻找快速,紧凑,可流式,多语言,强类型的序列化格式

时间:2009-07-28 02:17:59

标签: java php serialization strong-typing

我目前在我的Java项目中使用JSON(通过gzip压缩),我需要在磁盘上存储大量对象(数亿)。我每行有一个JSON对象,并禁止JSON对象中的换行符。通过这种方式,我可以逐行从磁盘上流式传输数据,而无需一次读取整个文件。

事实证明,解析JSON代码(使用http://www.json.org/java/)比从磁盘上提取原始数据或解压缩它(我在运行中做)更大的开销。

理想情况下我喜欢的是强类型序列化格式,我可以在其中指定“此对象字段是字符串列表”(例如),并且因为系统知道会发生什么,它可以快速反序列化。我也可以通过给别人提供“类型”来指定格式。

它还需要跨平台。我使用Java,但与使用PHP,Python和其他语言的人一起工作。

所以,回顾一下,它应该是:

  • 强类型
  • 可流式传输(即逐位读取文件而无需一次性将其全部加载到RAM中)
  • 跨平台(包括Java和PHP)
  • 快速
  • 免费(如发言)

任何指针?

3 个答案:

答案 0 :(得分:8)

您是否查看了Google协议缓冲区?:

http://code.google.com/apis/protocolbuffers/

它们是跨平台的(C ++,Java,Python),还有用于PHP的第三方绑定。它快速,相当紧凑和强类型。

这里还有各种格式之间的有用比较:

http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

您可能想要考虑Thrift或此处提到的其他一个。

答案 1 :(得分:3)

我使用Jackson

解析JSON的效果非常好

杰克逊是:

  • 流媒体(阅读,写作)
  • FAST(测得比任何其他Java json解析器和数据绑定器更快)
  • 功能强大(常见JDK类以及任何Java bean类,Collection,Map或Enum的完整数据绑定)
  • 零依赖(不依赖于JDK之外的其他包)
  • 开源(LGPL或AL)
  • 完全符合

用Java编写的JSON处理器(JSON解析器+ JSON生成器)。除了基本的JSON读/写(解析,生成)之外,它还提供完整的基于节点的树模型,以及完整的OJM(Object / Json Mapper)数据绑定功能。

与许多其他序列化选项相比,它的performance非常好。

答案 2 :(得分:2)

您可以查看YAML- http://www.yaml.org/

它是JSON的超集,因此您将熟悉数据文件结构。它支持一些额外的数据类型以及使用包含一个数据结构的一部分的引用到另一个数据结构的能力。

我不知道它是否“足够快” - 但是libyaml解析器(用C语言编写)似乎非常活泼。