数据交换格式xml和json

项目中需求使用文本形式存储数据,以应对schema动态变化和实时反馈局部子数据集变化。

以下是对数据交换格式Xml和JSON的调研结果。

Xml和JSON的简单介绍

  1. Xml指可扩展标记语言(Extensible Markup Language),类似于HTML(区别是HTML用来显示数据而Xml用来结构化、存储和传输数据),需要自定义严格的闭合标签,具有自我描述性。格式统一,跨平台和语言。是标准通用标记语言 (SGML) 的子集,是w3c的推荐标准。
    • 优点:格式统一,符合标准;容易与其他系统进行远程交互,数据共享比较方便。
    • 缺点:XML文件庞大,文件格式复杂,传输占带宽。服务器端和客户端都需要花费大量代码来解析XML。
  2. JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,简洁并且层次结构清晰,结构化标记数据,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。是基于ECMAScript(w3c制定的js规范)的一个子集,是JS的原生格式。
    • 优点:数据格式简单,易于读写,格式都是压缩的,占用带宽小;适合前端用于开发。
    • 缺点:对数据的描述性比XML差。

Xml和JSON的对比

  1. 可读性方面xml好一些,因为有严格闭合的标签。
  2. 扩展性方面两者相当。都是易于扩展的跨平台数据交换格式。
  3. 编写和解析难度方面,两者都有成熟的工具包提供使用。Xml (dom, SAX, dom4j,JDOM等), json(Gson, JackJson, fastjson等)
  4. 数据体积方面,json拥有更小的体积和更快的传输速度,因为xml中包含大量冗余的标记字符。
  5. 数据格式对比
    • Xml提供了逐步解析的方法(SAX),适合于大规模的解析。而JSON只提供整体解析方案。
    • Xml也提供了整体解析方法(DOM),把一个XML看成一个DOM对象,需要把XML文件整个读入内存。但XML的解析要考虑父节点和子节点,而JSON构建基于key/value,JSON的解析难度要小很多。
  6. 索引技术方面
    • Json索引技术。Mysql5.7及SQL Server 2016开始支持json数据格式,通过创建虚拟列(用于返回要用于筛选的值)来创建索引。
    • XML索引技术。很复杂。

Xml索引技术

  1. 结构摘要类索引。将 XML 数据按照路径进行约简,要求只保存 XML 数据中不同的路径,将具有相同路径的节点集合作为约简中该路径的末端节点的内容。那么,在 XML 数据上的路径查询处理,也就能够在约简结构中得到相同的结果节点集合。比如Fix索引。
  2. 节点记录类索引。将 XML 数据分解为数据单元的记录集合,同时在记录中保存该单元在 XML 数据中的位置信息.
    • 节点序号方法。设计某种遍历策略(比如标签有向树的先序遍历、后序遍历和基于字符流模型的顺序遍历等),得到节点的序号(遍历得到由元素组成的序列,节点的标签在序列中就具有唯一的次序),将序列与某指标集(比如自然数,局部编码和素数等)建立一一映射的关系。比如Xpath索引。
    • 节点路径方法。将所有的路径表达式看成字符串并且将它们按照字典排序,然后将其作为索引项插入到相应的树型索引结构中。树的每个叶子节点都包含一个表示一个路径表达式的字符串,以及一个与该路径表达式结果相对应的id列表。索引记录的基本模式为(数据单元标识,路径信息),核心技术是字符串的模式匹配,基于Trie,Patricia trie, suffix tree等。 比如Fabric索引,VIST索引。

建议

建议直接每个类一个文件,文件名是属性的组合,文件里存记录id。检索用正则检索文件名,动态修改某个类的schema时只要重命名对应的文件名,这样处理局部数据也比较容易,不用每次schema修改都重写全部类文档。
如果一定要在Xml和JSON里二选一,推荐JSON,因为比较适合前端用,k/v的存储方式不用考虑属性之间的次序关系,而且mysql支持存储和索引json格式的数据。