将大json文件存储在数据库中的最佳方法(postgres或mongo)

问题描述 投票:2回答:1

我想以JSON格式下载一些开放数据(地理数据)。 可下载的文件以bz2格式存档,重量约为430 Mb。当未压缩时,json文件的重量约为3,2 Gb。

还有机会下载对应于单个区域的部分数据(总共100个)。在这种情况下,每个文件重约4 Mb,一旦未压缩,给出一个24 Mb的json文件。

我计划在rails应用程序中使用这些数据(目前使用postgres数据库)。

由于数据以JSON格式提供,我考虑将mongodb数据库与postgres数据库集成在一起。 但我不知道mongodb是否能够加载如此庞大的文件,例如。使用mongoimport。 我听说过8或16 Mb文档大小的限制。但是这个限制是对应于文件的单个“行”还是文件对应于整个文档?

在后一种情况下即使使用部分文件也不可能使用mongodb,对吗? 但是因为我也听说mongoid“慢”,我想知道在postgres本身,在自己的表(甚至是自己的数据库)上“加载”这些数据会更好。 如果是这样,我如何加载这些数据? 我想用普通的Ruby逐行读取文件并在seed.rb文件中填充数据库。 (我知道它可能需要非常宽松的时间)

任何人都可以告诉我在我的情况下什么可能是最好的选择?


一些考虑: 我没有任何限制。 我正在使用泊坞容器。 这些数据只会被读取,以便通过自动完成功能为主应用程序中的某些字段提供信息。 我计划每周从新下载的文件更新数据。

编辑:我感兴趣的“字段”(我的意思是JSON文件的键)是可以有多个单词的字符串(即空格分隔的字符串)。 最终我希望在单词的开头有最快的查找搜索(可能在字符串的中间)。 也许根据mongodb和postgres提供的索引可能性来限制选择。 对于postgres,我可以将这些数据存储在字符串字段中,甚至可以在JSONB字段中“按原样”存储,以提供最快的索引。

ruby-on-rails json ruby mongodb postgresql
1个回答
0
投票

你可以尝试使用JSON::Stream这是最适合不适合内存的巨大JSON文档。

或者尝试实现这个YAJL C Bindings for Ruby

希望能有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.