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

Posted

技术标签:

【中文标题】使用 python 和 mongoDB 索引 20M 的记录【英文标题】:Indexing 20M of records with python and mongoDB 【发布时间】:2011-08-17 16:02:51 【问题描述】:

我想谈一谈我的小项目,以及我是否步入正轨。我需要处理来自 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's)。

我想处理这些记录并获取标题,摘要等信息...然后我想用python和mongodb索引这些文件(或记录)。我有一个选择:

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

我的问题是:

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

【问题讨论】:

有效吗?然后就好了。你有问题吗?如果是这样,请提供您遇到的实际问题。听起来你真正的问题很简单——如何使用 GridFS。也许您应该特别关注您需要的具体帮助。 “你知道另一种方式吗”是一个愚蠢的问题,有无数其他方式,其中大多数都是一个坏主意。 谢谢 S.Lott!是的,我的 exatc 问题是,如何将 GridFS 与 Medline 文件结合起来?亚历克斯。 我的 XML2JSON 解析器有问题,因为这个 XML 不简单,不知道 GridFS 能不能帮到我…… Àlex:这听起来像是两个独立的问题,只是与这个问题有一点关系。在提出其他问题之前,请尽可能多地阅读 GridFS 并尽可能提出具体 一个有关使用 GridFS 和 Medline 文件的问题。所有软件均可集成;您需要大量阅读,以便您可以为我们提供一些关于您希望如何进行的指导和方向。 “我的 XML2JSON 解析器出现问题”毫无意义且令人困惑。您有什么确切问题?请非常非常具体并包含导致实际问题的实际代码。 I want to process these records and get information such as title, abstract - 听起来你需要弹性搜索,而不是 mongodb。 【参考方案1】:

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

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

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

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

如果您只是打算存储文本,那么您应该不需要任何 GridFS。如果你想存储图像,那么 GridFS 可以做到这一点。

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


PS:看起来pubmedID 是唯一键。创建文档时,您可以通过用pubmedID 覆盖_id 来节省空间。

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

【讨论】:

以上是关于使用 python 和 mongoDB 索引 20M 的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?

为啥以及何时需要在 MongoDB 中重建索引?

mongodb创建2D索引

mongodb的索引问题

索引及集合管理 - MongoDB从入门到删库

如何使用python在mongodb的两种不同类型的字段或索引或标题中搜索值?