如何在数据库中最好地存储大型JSON文档(2+ MB)?

时间:2009-12-26 18:49:05

标签: database json couchdb flat-file

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

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

3 个答案:

答案 0 :(得分:3)

我在CouchDB中有很多文件超过2megs,它处理得很好。这些限制已经过时了。

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

2 + MB对于数据库来说并不是一件大事,并且如果你有足够的内存,他们就可以有效地进行缓存和有效使用你的RAM。您是否有频率模式,说明访问这些文档的时间和频率以及您必须如何服务的人员?