0

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

  1. 快速阅读
  2. 最小的内存消耗
  3. 键入的数据,而不仅仅是文本

对于实现这些目标的二进制格式有什么建议吗?

4

6 回答 6

1

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

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

于 2009-09-06T20:58:52.923 回答
1

您的要求中的细节太少,无法提供好的建议。例如,您可以自由选择存储介质吗?它会是文件系统、数据库还是其他东西?

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

如果平台是 Java,我会从它的标准序列化开始,如果我对性能不满意,我会研究自定义序列化。

于 2009-09-06T21:14:04.470 回答
1

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

更多关于 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

于 2009-09-06T21:17:10.790 回答
1

您还可以将 XML 读入对象图并存储为 Google 协议缓冲区。这些设计非常有效。

于 2009-09-06T21:20:05.750 回答
1

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

如果没有更多关于数据类型的详细信息,很难给你很多建议。所以这里有一个小清单。

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

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

据说推荐的组织及其 java 和 .net sdk 可以从以下位置下载: http ://www.agiledelta.com/product_efx.html

xml 是纯文本,但可用于表示序列化对象。假设您的序列化程序正在将您的对象序列化为 xml。

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

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

于 2009-09-07T01:25:35.797 回答