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

以预解析的二进制格式存储XML文档,xml,file-format,hierarchical-data,binaryfiles,binary-data,Xml,File Format,Hierarchical Data,Binaryfiles,Binary Data,我的应用程序需要存储大量类似XML的分层信息,并满足以下要求: 快速阅读 最小内存消耗 键入数据而不仅仅是文本 对于满足这些目标的二进制格式有什么建议吗?其他应用程序需要读取存储的数据,还是只读取您的数据?它是否需要是“标准”格式 满足要求(1)和(2),尽管因为它只是XML信息模型的二进制表示,所以它与XML一样没有类型。但是,如果没有任何其他内容,可能就足以满足您的需要。其他应用程序需要读取存储的数据,还是只读取您的数据?它是否需要是“标准”格式 满足要求(1)和(2),尽管因为它只是XML

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

  • 快速阅读
  • 最小内存消耗
  • 键入数据而不仅仅是文本

  • 对于满足这些目标的二进制格式有什么建议吗?

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


    满足要求(1)和(2),尽管因为它只是XML信息模型的二进制表示,所以它与XML一样没有类型。但是,如果没有任何其他内容,可能就足以满足您的需要。

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


    满足要求(1)和(2),尽管因为它只是XML信息模型的二进制表示,所以它与XML一样没有类型。但是,如果没有其他东西的话,可能就足够满足您的需求了。

    您的需求中的细节太少,无法给出好的建议。例如,您是否可以自由选择存储介质?它是文件系统、数据库还是其他什么

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


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

    您的需求中的细节太少,无法给出好的建议。例如,您是否可以自由选择存储介质?它是文件系统、数据库还是其他什么

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


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

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

    关于JSON的更多信息:


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

    关于JSON的更多信息:


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

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

    您没有指定xml是否是一种格式要求,您只说它需要像xml一样具有层次结构

    如果没有关于这类数据的更多细节,就很难给你很多建议。下面是一个小列表

    • b-树有许多库支持多种语言的b-树存储格式。它们具有快速查找功能,并且本质上是分层的
    • 谷歌的协议缓冲区。紧凑的存储优化,可通过有线传送。但不必作为存储格式进行优化。不过,它们是键入的,可能作为一种存储格式会做得很好
    • 压缩文本格式。紧凑,并且取决于所选择的格式类型和分级性质。
      • YAML(支持一些复杂的类型、层次结构、可读性)
      • JSON(更少的类型支持、快速解析、分层、可读)

    您没有指定xml是否是一种格式要求,只是说它需要像xml一样具有层次结构

    如果没有关于这类数据的更多细节,就很难给你很多建议。下面是一个小列表

    • b-树有许多库支持多种语言的b-树存储格式。它们具有快速查找功能,并且本质上是分层的
    • 谷歌的协议缓冲区。紧凑的存储优化,可通过有线传送。但不必作为存储格式进行优化。不过,它们是键入的,可能作为一种存储格式会做得很好
    • 压缩文本格式。紧凑,并且取决于所选择的格式类型和分级性质。
      • YAML(支持一些复杂的类型、层次结构、可读性)
      • JSON(更少的类型支持、快速解析、分层、可读)

      • 维基百科对此问题的解释:

        据推测,推荐的组织及其java和.net sdk可从以下网站下载:

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

        您不应该尝试将对象转换为二进制流,因为您必须解决endian()和数据表示问题。但是,如果您坚持,您将需要使用XDR()实现其数据体系结构中立性


        否则,由于库和SDK的可用性,您应该使用标准序列化程序将对象序列化为XML,然后将XML转换为二进制/压缩XML。然后通过从二进制xml反编译进行反序列化。

        维基百科对此问题的解释:

        据推测,推荐的组织及其java和.net sdk可从以下网站下载:

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

        您不应该尝试将对象转换为二进制流,因为您必须解决endian()和数据表示问题。但是,如果您坚持,您将需要使用XDR()实现其数据体系结构中立性

        否则,应该使用sta将对象序列化为XML