使用python和mongoDB索引20M的记录

时间:2011-05-03 12:01:34

标签: python mongodb pymongo gridfs

我想提一下我的小项目,如果我正在进行中。我需要使用Medline的所有文章(http://www.nlm.nih.gov/bsd/licensee/2011_stats/baseline_doc.html)。对于那些不熟悉Medline数据库的人,我添加了一些信息:

  • 有约。 20.000.000条记录(83.4 GB磁盘空间),每条记录都有许多字段和子字段。
  • 您可以以XML格式下载此DB(带许可证)。
  • 这些20M的记录分发在653个文件中。
  • 每个文件都有一个MedlineCitationSet,这是一组记录(MedlineCitation的)。

我想处理这些记录并获取诸如title,abstract等信息。然后我想用python和mongodb索引这些文件(或记录)。我有一个选择:

我创建了一个medline解析器,并为每个记录创建了一个mongoDB的JSON条目,并在通过pubmedID索引之后。然后我可以创建一个函数,如get_abstract('pubmedID'):string。

我的问题是:

  • 这是个好主意吗? (XML解析 - > JSON - >插入和索引!)
  • 我可以使用GridFS并获取每个文件的记录等效块吗?怎么样?
  • 你知道其他方式吗?

1 个答案:

答案 0 :(得分:2)

  

这是个好主意吗? (XML解析 - > JSON - >插入和索引!)

有用吗? JSON往往比XML小,这可能是一个很好的改变。

  

我可以使用GridFS并获取每个文件记录的块等价物吗?怎么样?

GridFS通常用于存储图像或视频等静态文件。 MongoDB可以支持非常大的文档( 16MB ==几个小说)。 medline文章的文本可能比这要小得多。

如果您只是计划存储文本,那么您不需要任何GridFS。如果您想存储图像,那么GridFS对此非常有用。

请阅读GridFS here。请注意,GridFS只是一个规范。一切仍然存储在常规的MongoDB集合中。


PS:看起来pubmedID是一个唯一的密钥。创建文档时,可以使用_id覆盖pubmedID来节省空间。

即: collection.insert({"_id": xml_obj.pubmedID, "text" : xml_obj.article_text})