【问题标题】:JSON as a DB export formatJSON 作为数据库导出格式
【发布时间】:2009-01-27 15:14:20
【问题描述】:

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

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

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

这听起来正确吗?

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

谢谢。

【问题讨论】:

    标签: xml json


    【解决方案1】:

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

    JSON 的全部意义在于消除 XML 造成的开销。如果您将每条记录写为 JSON 对象,那么您将返回存储没有意义的开销位。下一个合乎逻辑的步骤是写出一个带有标题记录的常规 CSV 文件,地球上的所有东西都知道如何导入。

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

    【讨论】:

      【解决方案2】:

      这是正确的,我一直无法找到一个 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 格式。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          这听起来正确吗?

          这听起来很合理......所以你最终会得到一大堆由换行符分隔的行,每行包含一个 JSON 对象。

          【讨论】:

            猜你喜欢
            • 2013-10-31
            • 1970-01-01
            • 1970-01-01
            • 2011-06-25
            • 2017-03-07
            • 2020-11-15
            • 1970-01-01
            • 1970-01-01
            • 2018-12-24
            相关资源
            最近更新 更多