JSON作为数据库导出格式

时间:2009-01-27 15:14:21

标签: xml json

问题。我们将事物记录到数据库中。为了保持磁盘空间使用上限,我们从数据库导出到可以复制的文件,或者仅删除平面。我之上的一些力量希望将其视为JSON。

我将单个JSON文件视为单个对象。因此,在这种情况下,我们将创建一个包含日志消息列表的对象。问题是,这个文件可能有几百万个日志项,我想这会扼杀大多数解析器。因此,我认为唯一的方法就是让每个日志项都有自己的JSON对象。

这意味着JSON解析器无法处理该文件。但我们可以编写一个行解析器来读取文件并通过JSON解析器推送每一行。

这听起来不错吗?

我相信XML会有同样的问题,但至少我们有SAX ..或者我们可以将它作为一堆minidocs来做所有前缀都是它们的长度。

感谢。

4 个答案:

答案 0 :(得分:5)

JSON的整个想法并不完全与在文件中存储数百万个条目共存......

JSON的重点是消除XML引起的开销。如果您将每条记录编写为JSON对象,那么您将返回存储没有意义的开销位。下一个合乎逻辑的步骤是写出一个常规的CSV文件,其中包含一个标题记录,表明地球上的所有内容都了解如何导入。

如果由于某种原因,您有子记录,那么您应该看看常规EDI的工作原理。

答案 1 :(得分:4)

这是正确的,我一直无法找到一个json解析器,它不需要整个内存一次在内存中,至少在进程的某些部分(我有一个json格式的数据库转储,我需要解析......这是一场噩梦。)

目前常用的方法是使用对象样式或csv样式

对象样式:

{"name":"bob","position":"ceo","start_date":"2007-08-10"}
{"name":"tom","position":"cfo","start_date":"2007-08-11"}

,等等。

csv风格:

["name","position","start_date"]
["bob","ceo","2007-08-10"]
["tom","cfo","2007-08-11"]

您使用对象样式浪费了大量磁盘空间,但每行都是自包含的。

使用csv样式节省磁盘空间,但您的数据与格式紧密耦合,除非您需要嵌套数据结构,如:

["bill","cto","2007-08-12",{"projects":["foo","bar","baz"]}]

您也可以使用CSV格式。

答案 2 :(得分:3)

您的策略听起来很正确:在JSON中使用单个对象并使用标准JSON工具生成/解析它们,并在JSON之外自行处理分组问题。

除了将所有数据转储到一个文件中之外,您可能还需要考虑其他策略。例如,您可以将每个对象保存在单独的文件中,或者(如果这说明您有数百万个对象,那么将它们分组)在合理的组中的文件中批量处理,并根据您对这些对象的某些标识符命名文件,或者只是主键(所以你得到“0-10000”,“10001-20000”等)或其他东西。例如,对于日志条目,日期/时间是适当的。这样,如果一些贫穷的灵魂需要在某天使用或检查任何形状的数据,它会更容易管理。要将这些文件转换为存档格式,只需将它们压缩/压缩成一个文件,JSON作为文本数据应该压缩得很好。

答案 3 :(得分:1)

  

这意味着JSON解析器不能   处理文件。但我们可以   写一个行解析器来读取   文件并通过JSON推送每一行   解析器。

     

这听起来不错吗?

这听起来很合理......所以你最终得到了一系列由换行符分隔的行,每行由一个JSON对象组成。