保存结构化数据的最佳平面文件格式是什么?

时间:2011-12-17 06:00:49

标签: xml json flat-file

我有5个不同字段的数据(整数,字符串和大字符串的组合),我想把它放在某种平面文件容器中。我有成千上万的这样的条目,但我不需要任何类型的数据库(根本不需要迭代数据,不需要查询)。我检查的所有格式(XML,JSON,YAML)都需要每个条目的冗余字段,即使我的数据是结构化和同质的。像CSV这样的东西会很棒,除非我不能用逗号或新行作为分隔符。有没有你想要的格式?

数据格式示例:

id |时代|短串|网址|大描述

3 个答案:

答案 0 :(得分:3)

类似于CSV的文件格式似乎很合适,当然你可以在你的文件中使用你想要的任何分隔符,你只需要“转义”所用的字符(如果它们存在于你正在存储的数据中)。 / p>

如果您不想转义单个字符,则可以使用不会输出您选择使用的任何分隔符的编码方案,例如Base64


我父亲比你强!

什么文件架构“最好”取决于很多情况。举个例子;在客户端和服务器之间发送较小的数据块时,我爱上了JSON。

虽然在平面文件架构中使用它之前我会考虑一次和两次,特别是如果有很多数据要包含在那里。

JSON在某种程度上是人类可读的,这对于调试很有用,但对于其他很多东西来说并不是那么好。

XML是一种很棒的格式,我喜欢它背后的想法虽然它太复杂了。

遵循相同想法的CSV文件或类似模式是我的5美分。


示例平面文件架构

id |时代|短串|网址|大描述

 |            -> ; (delmiter)
 id           -> matching /^[0-9]+$/
 epoch        -> matching /^[0-9]+$/ (also known as unix timestamp)
 url          -> Urls should not contain raw ';',
                 (explicitly check before input)
 short string -> Normalized
 large desc.  -> Normalized

上面标准化只是一种清理数据的方法,这样它就不会干扰我们模式的部分。

转义;\r\n是我们需要做的工作,或者只是如前所述,使用编码算法,如Base64。

您应该记住您希望以何种顺序存储数据。如果您想更频繁地解析url,那么epoch最好将其尽可能地放在行的左侧。

如果您希望轻松/快速搜索,您可以/应该将所有“大型描述”存储在单独的文件中,并且只在需要时才获取/处理该数据。

答案 1 :(得分:3)

您可以使用JSON数组而不是对象。这样可以将噪音限制在最低限度。它可以是单个数组或数组数组,具体取决于数据的格式。

它不如XML那么冗长。不知道YAML。

例如,您可以:

[
    [123, 123456789, "short string", "http://url", "large ... description"],
    [123, 123456789, "short string", "http://url", "large ... description"],
    [123, 123456789, "short string", "http://url", "large ... description"],
    [123, 123456789, "short string", "http://url", "large ... description"]
]

答案 2 :(得分:0)

您可以使用CSV并使用自己的分隔符,例如$%*,;。否则你可以逃避文本中的逗号和新行。