2

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

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

4

3 回答 3

3

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

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

于 2009-12-27T17:54:10.550 回答
2

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

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

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

于 2009-12-26T19:01:44.320 回答
1

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

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

于 2009-12-26T18:58:29.287 回答