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



我有5个不同字段的数据(整数,字符串和大字符串的组合),我想把它保存在某种平面文件容器中。我有成千上万这样的条目,但我不需要任何类型的数据库(根本,只需要遍历数据,不需要查询)。我研究过的所有格式(XML、JSON、YAML)都要求每个条目都有冗余字段,即使我的数据是结构化和同构的。像CSV这样的东西会很好,但我不能使用逗号或新行作为分隔符。你有什么推荐的格式吗?

数据格式示例:

id | epoch |短字符串| url |大描述

您可以使用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"]
]

类似CSV的文件格式似乎很合适,当然您可以在文件中使用任何分隔符,您只需要"转义"所使用的字符,如果它们出现在您正在存储的数据中。

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


我爸爸比你爸爸强壮!

什么文件模式是"最好的"取决于很多情况。举个例子;当涉及到在客户端和服务器之间发送较小的数据块时,我喜欢JSON。

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

JSON在某种程度上是人类可读的,这对于调试是很好的,尽管在其他方面不是很好。

XML是一种很棒的格式,我喜欢它背后的思想,尽管它太复杂了。

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


平面文件模式示例

id | epoch |短字符串| url |大描述

 |            -> ; (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

上面的规范化只是指一种对数据进行消毒的方法,这样它就不会干扰我们模式的某些部分。

转义;rn是我们需要的工作,或者,正如前面提到的,使用编码算法,如Base64。

你应该记住以什么顺序存储你的数据。如果您想更频繁地解析url而不是epoch,那么将其放在行左侧尽可能远的地方可能是一个好主意。

如果你想有简单/快速的搜索,你可以/应该存储在一个单独的文件中所有的"大型描述",只有在需要的时候才能获取/处理这些数据

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

最新更新