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

时间:2018-01-02 07:05:11

标签: ruby-on-rails json ruby mongodb postgresql

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

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

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

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

在后一种情况下即使使用部分文件,也不可能使用mongodb,对吧? 但是,由于我也听说过mongoid是"慢",我想知道是否可以更好地加载' postgres本身的数据,在自己的表格上(甚至在自己的数据库上) 如果是这样,我如何加载这些数据? 我考虑用普通的Ruby逐行读取文件,并在seed.rb文件中填充数据库。 (我知道它可能需要很长时间)

在我的情况下,谁能告诉我什么是最好的选择?

一些注意事项:
我没有任何限制 我使用的是docker容器。
这些数据只会被读取,以便为主应用程序中的某些字段提供自动完成功能 我计划每周从新下载的文件更新数据。

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

1 个答案:

答案 0 :(得分:0)

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

或尝试实施此YAJL C Bindings for Ruby

希望能提供帮助