写Newline分隔Json

时间:2016-07-08 13:12:33

标签: c# json json.net google-bigquery

我正在研究如何使用Json.Net编写新行分隔的JSON。我需要这样做才能将数据导出到Google BigQuery - https://cloud.google.com/bigquery/data-formats#json_format

目前我发现这样做的唯一方法是循环访问我的集合并逐个序列化每个对象,但我想知道是否有更好的方法。

我遇到了这个previous question,但答案只解释了如何阅读换行分隔的Json,而不是如何写它

1 个答案:

答案 0 :(得分:1)

没有换行符分隔的JSON。你问的是将JSON对象存储在单独的单独行中。许多大数据和事件处理产品都使用它,包括Azure Stream Analytics,Hive,Google的Big Query等。

使用这种存储方法是因为它使并行处理 lot 更容易:

  • 在阅读时,可以逐行轻松地对单个文件进行分区,而无需实际解析整个文本,并将其分配给不同的线程或工作人员。
  • 可以独立处理行,而无需等待解析整个文本。这使您可以利用异步操作和/或Dataflow来同时读取和解析
  • 写入时,多个线程可以将数据写入不同的文件,然后所有文件可以合并为一个文件。即使您写入单个磁盘,操作系统和磁盘缓冲以及操作开销也意味着sendind X操作可以比顺序执行X操作更快地完成。
  • 每个工作人员/线程都可以直接编写新记录。解析器需要访问所有记录才能生成文件。

出于这个原因,即使解析器支持它,使用解析器生成这样的文件也不是 。单线程实现只会太慢,并会强制您在写出之前收集所有记录。

为了提高性能,您可以写入多个文件,最好是在单独的磁盘上,并在最后将所有文件合并为一个文件。您也可以在生成每个记录时编写它们,而不是在写出之前等待将所有记录加载到内存中。