【问题标题】:How to best store a large JSON document (2+ MB) in database?如何在数据库中最好地存储大型 JSON 文档(2+ MB)?
【发布时间】:2009-12-26 18:49:05
【问题描述】:

在数据库中存储大型 JSON 文件的最佳方式是什么?我知道 CouchDB,但我很确定它不支持我将使用的大小的文件。

我不愿意从磁盘中读取它们,因为读取然后更新它们需要时间。该文件是一个包含约 30,000 个元素的数组,所以我认为将每个元素单独存储在传统数据库中会在我尝试全部选择它们时杀死我。

【问题讨论】:

标签: database json couchdb flat-file


【解决方案1】:

我在 CouchDB 中有很多超过 2megs 的文档,它可以很好地处理它们。这些限制已经过时了。

唯一需要注意的是,默认的 javascript 视图服务器的 JSON 解析器非常慢,因此对于大型文档,视图生成可能需要一段时间。您可以将我的Python view server 与基于 C 的 JSON 库(jsonlib2、simplejson、yajl)一起使用,或者使用甚至不会命中 JSON 序列化的内置 erlang 视图,并且视图生成速度会非常快。

【讨论】:

    【解决方案2】:

    如果您打算一次访问一个(或多个)特定元素,则无法将大 JSON 分解为传统的 DB 行和列。

    如果您想一次性访问它,可以将其转换为 XML 并将其存储在数据库中(甚至可以压缩 - XML 是高度可压缩的)。大多数数据库引擎都支持存储 XML 对象。然后,您可以一次性读取它,如果需要,可以使用 SAX 等前向读取方法或任何其他有效的 XML 读取技术将其转换回 JSON。

    但正如@therefromhere 评论的那样,您始终可以将其保存为一个大字符串(我会再次检查压缩它是否会增强任何东西)。

    【讨论】:

      【解决方案3】:

      您在这里并没有太多选择,您可以使用memcached 之类的东西将它们缓存在 RAM 中,或者使用数据库将它们推送到磁盘读取和写入它们(RDBMS 像 PostgreSQL/MySQL 或 DOD 像 CouchDB) .唯一真正的替代方案是在 memcached 中缓存最常访问的文档以供阅读的混合系统,这是许多网站的运作方式。

      2+MB 对数据库来说并不是什么大不了的事情,如果您有足够的 RAM,它们将完成足够智能的缓存工作并有效地使用您的 RAM。您是否有关于访问这些文档的时间和频率以及您必须为多少用户服务的频率模式?

      【讨论】:

      • 是的,我经常需要为整个文档提供服务,并且偶尔需要更新 JSON 文档中的个别项目。我猜想缓存到磁盘,然后以某种方式在 RAM 中进行更改是可行的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 2016-11-26
      相关资源
      最近更新 更多