表VS xml / json / yaml - 如果数据相关,表需要较少的存储空间吗?比压缩效率更高

时间:2014-04-09 00:59:40

标签: sql xml json relational-database yaml

要向XML对象添加字段,需要使用fieldname +的长度 3个字符(嵌套时为7个字符)和JSON 4(嵌套时为6个字符)

<xml>xml</xml>       xml="xml"    
{"json":json,}       "json": json,       

假设平均值为4且字段名称平均值为11 - 为了证明在使用存储的表中使用XML / JSON,每个字段平均只出现在少于1/15的对象中,换句话说必须是整个相关对象组中不同字段的~15倍,而不是一个对象的平均值。 (然而,当这个比率更高且存储量更大时,表格可以很好地允许更快的计算)我还没有看到使用具有非常高比率的XML / JSON。

Aren最真实的XML / JSON强制和低效? 不应该在关系(表格)中存储和查询相关数据吗? 我缺少什么?

将XML转换为表

的示例

Object1

<aaaaahlongfieldname>1</aaaaahlongfieldname>
<b>B
  <c>C</c> 
</b>

Object2的

<aaaaahlongfieldname>2</aaaaahlongfieldname>    
<b><c><d>D</d></c></b>
<ba>BA</ba>
<ba "xyz~">BA</ba>
<c>C</c> 

两者都转换为类似csv的表(分隔符声明,head,line1,line2)

delimiter=,   
aaaaahlongfieldname,b,b/c,b/c/d,ba,ba-xyz~,c
,B,C,,,,
,,,D,BA,BA,C
  • /和 - 值中的符号只需在头部转义

  • 但是,,,, 也可以连续 \ 4 转义分隔符数量(当声明转义符号或字符串时 - 值得大数字空字段)和,因为当转义字符和分隔符出现在值中时,它们需要被转义,它们可以自动被声明为罕见的符号,通常几乎不会出现

    escape=~   
    delimiter=°  
    aaaaahlongfieldname°b°b/c°b/c/d°ba°ba-xyz~~°c
    °B°C~4
    °°°D°BA°BA°C
    

验证/附加信息:XML / json错过了所有空字段,因此缺少&#34;&#34;字段中的字段无法被注意到。只有在字段数正确且必须注意(错误)行时,表的一行才有效。但是通过具有不同数据类型的列,通常可以很容易地修复分隔符。

编辑: 关于readablity / editablity:好的当然,第一次阅读xml和json它可能是selfexplanatory已经读过html和js但是那都是? - 大部分时间是机器阅读它,有时候是开发人员,这两种情况都可能不会受到详细程度的影响

2 个答案:

答案 0 :(得分:1)

您的示例中的CSV使用8位编码非常低效。你甚至几乎不使用5位熵,显然浪费了3位。为什么不压缩它?

所有这些问题的答案都是人们犯错误,而且更强的打字会提高安全效率。机器或人类不可能识别CSV流中的转置列,但JSON和XML会自动处理它,并且(假设没有越过层次结构边界)一切都会起作用。 30年前,当存储空间稀缺时每秒的指令有时是每秒100秒测量,在协议中使用最少量的装饰是有意义的。如今,即使是嵌入式系统也具有相对大量的功率和功率。存储,因此更容易做出一点额外安全的权衡。

对于严格控制的数据传输,比如我的开发团队正在处理的模块之间,JSON工作得很好。但是当数据需要在不同的组之间进行时,我非常喜欢XML,因为它有助于双方理解正在发生的事情。如果数据需要通过“慢”管道,压缩将删除98%的XML“开销”。

答案 1 :(得分:1)

XML的设计者很清楚表示中存在高度冗余,他们认为这是一件好事(我不是说他们是对的)。基本上(a)如果使用数据压缩,冗余成本没有,(b)冗余(在限制范围内)有助于人类可读性,(c)冗余使得检测和诊断错误变得更加容易,尤其是在手工编写XML时。 / p>