2009-12-26 55 views
2

将大型JSON文件存储在数据库中的最佳方式是什么?我知道CouchDB,但我非常确定,它不会支持我将要使用的大小的文件。如何在数据库中最好地存储大型JSON文档(2+ MB)?

由于读取和更新它们所需的时间,我不愿意从磁盘读取它们。该文件是一个大约30,000个元素的数组,因此我认为将每个元素分别存储在传统数据库中会在我尝试全部选中时杀死我。

+0

我很确定CouchDB可以处理大小超过2MB的文档 - 第一个谷歌引用了4GB的限制。或者你的意思是你认为它不能处理2MB x 30,000? –

+1

这么多毫无根据的猜测... –

+0

therehere:不,我的意思是2MB是一个30k项目的JSON数组。你确定4GB的限制吗?这家伙说这是1MB:http://stackoverflow.com/questions/28975/anyone-using-couchdb/118273#118273 – Paul

回答

2

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

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

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

1

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

2 + MB对于数据库来说并不是一笔巨大的交易,并且提供足够的内存,它们将有效地执行足够的智能缓存和使用RAM。您是否有频率模式显示访问这些文档的时间和频率,以及您需要为哪些用户提供服务?

+0

是的,我经常需要提供整个文档,偶尔JSON文档中的单个项目也必须更新。我猜测缓存到磁盘,然后以某种方式对RAM进行更改就是要走的路。 – Paul

3

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

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

相关问题