以预解析的二进制格式存储XML文档

时间:2009-09-06 20:56:46

标签: xml file-format hierarchical-data binaryfiles binary-data

我的应用程序需要存储大量类似XML的层次结构信息,并满足以下要求:

  1. 快速阅读
  2. 最小内存消耗
  3. 键入的数据而不仅仅是文本
  4. 对满足这些目标的二进制格式有任何建议吗?

6 个答案:

答案 0 :(得分:1)

其他应用程序是否需要读取存储的数据,或者只读取您的数据?它需要是“标准”格式吗?

Fast Infoset符合要求(1)和(2),尽管因为它只是XML信息模型的二进制表示,所以它与XML一样无类型。但是,在没有任何其他目的的情况下,可能足以满足您的目的。

答案 1 :(得分:1)

您的要求中没有太多细节可以提供好的建议。例如,您可以自由选择存储介质吗?它是文件系统,数据库还是别的什么?

“最低内存消耗”是什么意思?你在受限制的平台上运行吗?您必须与其他应用程序共享资源吗?如果您的计算机有4GB内存,1GB的占用空间是否足够小?您的数据会留在内存中还是仅存在于您正在处理的部分中?

如果该平台是Java,我将从其标准序列化开始,然后如果我对性能不满意则调查自定义序列化。

答案 2 :(得分:1)

如果格式是可讨论的,我建议使用JSON,而不是XML。与标准XML相比,JSON实际上更快地加载和写入。

有关JSON的更多信息:

http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=060ca7c3-b03f-41aa-937b-c8cba5b7f986 http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=39842a17-781a-45c8-ade5-58286909226b

答案 3 :(得分:1)

您还可以将XML读入对象图并存储为Google Protocol Buffers。这些设计非常有效。

答案 4 :(得分:1)

您没有指定xml是否是格式要求,您只需说它需要像xml一样分层。

如果没有关于数据类型的更多细节,很难给出很多建议。所以这是一个小清单。

  • b-trees有许多库支持多种语言的b-tree存储格式。它们具有快速查找并且本质上是分层的。
  • 来自谷歌的协议缓冲区。紧凑型存储优化用于通过电线发送。虽然没有作为存储格式进行优化。虽然它们是打字的,但作为存储格式可能会很好。
  • 压缩文字格式。紧凑,并且取决于所选择的格式和分层性质。
    • YAML(支持一些复杂的打字,分层,人类可读)
    • JSON(更少打字支持,快速解析,分层,人类可读)

答案 5 :(得分:1)

维基百科对此问题的解释: http://en.wikipedia.org/wiki/Binary_XML

据推测,推荐的组织及其java和.net sdk可以从以下网址下载: http://www.agiledelta.com/product_efx.html

xml是纯文本,但可用于表示序列化对象。 我们假设你的序列化器将你的对象序列化为xml。

您不应该尝试将对象转换为二进制流,因为您必须解决endian(http://en.wikipedia.org/wiki/Endian)和数据表示问题。但是,如果您坚持,则需要使用XDR(http://en.wikipedia.org/wiki/External_Data_Representation)来实现其数据架构中立性。

否则,您应该使用标准序列化器将对象序列化为XML,然后将xml转换为binary / compact xml,因为库和sdks的可用性。然后通过从二进制xml中解压缩来反序列化。