11

我打算构建一个将返回自定义文本格式的 RESTful 服务。鉴于我的数据量很大,XML/JSON 过于冗长。我正在寻找基于行的文本格式。

CSV 是一个明显的候选者。但是,我想知道那里是否没有更好的东西。我通过一些研究发现的唯一是CTXFielded Text

我正在寻找一种提供以下内容的格式:

  • 纯文本,易于阅读
  • 大多数软件平台都非常容易解析
  • 无需更改软件客户端即可更改列定义

带字段的文本看起来不错,我绝对可以自己建立一个规范,但我很想知道其他人做了什么,因为这一定是一个非常古老的问题。令人惊讶的是,没有更好的标准。

你有什么建议?

4

5 回答 5

6

我确定您已经考虑过这一点,但我是制表符分隔文件的粉丝(字段之间的 \t,每行末尾的换行符)

于 2010-10-06T16:25:55.417 回答
5

我想说,既然 CSV 是标准,而且因为每个人都可以解析它,所以使用它。

如果我处于您的情况,我会承受带宽冲击并使用 GZIP+XML,只是因为它非常易于使用。

而且,在这一点上,您始终可以要求您的用户支持 GZIP 并将其作为 XML/JSON 发送,因为这样可以很好地消除线路上的冗余。

于 2010-10-06T16:25:38.610 回答
4

您可以尝试 YAML,与 XML 或 JSON 等格式相比,它的开销相对较小。

这里的例子:http ://www.yaml.org/

令人惊讶的是,该网站的文本本身就是 YAML。

于 2010-10-06T16:25:57.250 回答
2

我一直在思考这个问题。我想出了一个简单的格式,可以很好地适用于您的用例:JTable。

 {
    "header": ["Column1", "Column2", "Column3"],
    "rows"  : [
                ["aaa", "xxx", 1],
                ["bbb", “yyy”, 2],
                ["ccc", “zzz”, 3]
              ]
  }

如果您愿意,可以找到JTable 格式的完整规范以及详细信息和资源。但这是不言自明的,任何程序员都会知道如何处理它。唯一需要的是,真的,说,这是 JSON。

于 2020-03-18T13:51:44.907 回答
1

纵观现有的答案,最让我印象深刻的是有点过时了。尤其是在“大数据”方面,值得关注的 CSV 替代方案包括:

  • ORC : 'Optimized Row Columnar' 使用行存储,在 Python/Pandas 中很有用。起源于 HIVE,由Hortonworks优化。架构在页脚中。Wikipedia 条目目前非常简洁 https://en.wikipedia.org/wiki/Apache_ORC但 Apache有很多细节

  • Parquet:类似地基于列,具有类似的压缩。通常与 Cloudera Impala 一起使用。

  • Avro:来自 Apache Hadoop。基于行,但使用 Json 模式。对 Pandas 的支持能力较差。经常出现在 Apache Kafka 集群中。

所有都是可拆分的,对人们来说都是不可理解的,都用模式描述它们的内容,并且都与 Hadoop 一起工作。在经常读取累积数据的情况下,基于列的格式被认为是最好的;对于多次写入,Avro 可能更适合。参见例如https://www.datanami.com/2018/05/16/big-data-file-formats-demystified/

列格式的压缩可以使用 SNAPPY(更快)或 GZIP(更慢但更多压缩)。

您可能还想研究 Protocol Buffers、Pickle(Python 特定)和 Feather(用于 Python 和 R 之间的快速通信)。

于 2021-10-01T07:20:00.783 回答