Индексирование 20 М записей с помощью python и mongoDB

Я хотел бы упомянуть о моем маленьком проекте, и если я на правильном пути. Мне нужно работать со всеми статьями из Medline (http://www.nlm.nih.gov/bsd/licensee/2011_stats/baseline_doc.html). Для тех, кто не знаком с базой данных Medline, добавлю немного информации:

  • Есть ок. 20 000 000 записей (83,4 ГБ дискового пространства), каждая из которых имеет множество полей и подполей.
  • Вы можете скачать эту БД (с лицензией) в формате XML.
  • Эти 20 миллионов записей распределены в 653 файлах.
  • Каждый файл имеет один MedlineCitationSet, и это набор записей (MedlineCitation's).

Я хочу обработать эти записи и получить такую ​​информацию, как заголовок, реферат... Затем я подумал проиндексировать эти файлы (или записи) с помощью python и mongodb. И у меня есть один вариант:

Я создал синтаксический анализатор medline, и для каждой записи создается запись JSON для mongoDB и после индексации по pubmedID. Затем я могу создать такую ​​функцию, как get_abstract('pubmedID'):string.

Мои вопросы:

  • Это хорошая идея? (Разбор XML --> JSON --> вставка и индексация!)
  • Могу ли я использовать GridFS и получить фрагменты, эквивалентные записям для каждого файла? Как?
  • Вы знаете другой способ?

person Àlex    schedule 03.05.2011    source источник
comment
Это работает? Тогда это хорошо. У вас проблемы? Если это так, укажите реальную проблему, с которой вы столкнулись. Похоже, ваш реальный вопрос очень прост - как использовать GridFS. Возможно, вам стоит сосредоточиться конкретно на том, какая именно помощь вам нужна. Знаете ли вы другой способ — глупый вопрос, существует бесконечное множество других способов, большинство из которых — плохая идея.   -  person S.Lott    schedule 03.05.2011
comment
Спасибо С.Лотт! Да, мой конкретный вопрос будет заключаться в том, как я могу объединить GridFS с файлами Medline? Алекс.   -  person Àlex    schedule 03.05.2011
comment
У меня проблемы с парсером XML2JSON, потому что этот XML не тривиален, и я не знаю, сможет ли GridFS мне помочь...   -  person Àlex    schedule 03.05.2011
comment
Алекс: Звучит как два отдельных вопроса, лишь немного связанных с этим вопросом. Прежде чем задавать эти другие вопросы, пожалуйста, прочитайте как можно больше о GridFS и задайте как можно конкретный вопрос об использовании GridFS с файлами Medline. Все программное обеспечение может быть интегрировано; вам нужно много читать, чтобы вы могли дать нам некоторые рекомендации и указания о том, как вы хотели бы действовать. проблемы с моим парсером XML2JSON бессмысленны и сбивают с толку. Какая у вас точная проблема? Пожалуйста, будьте очень, очень конкретны и включите фактический код, который вызывает реальную проблему.   -  person S.Lott    schedule 03.05.2011
comment
I want to process these records and get information such as title, abstract - похоже, вам нужен elasticsearch, а не mongodb.   -  person Burhan Khalid    schedule 19.02.2015


Ответы (1)


Это хорошая идея? (Разбор XML --> JSON --> вставка и индексация!)

Это работает? JSON имеет тенденцию быть меньше, чем XML, это, вероятно, хорошее изменение.

Могу ли я использовать GridFS и получить фрагменты, эквивалентные записям для каждого файла? Как?

GridFS обычно предназначена для хранения статических файлов, таких как изображения или видео. MongoDB может поддерживать очень большие документы (16 МБ == несколько романов). Текст для статьи в medline, вероятно, будет намного меньше, чем этот.

Если вы планируете просто хранить текст, то GridFS вам не понадобится. Если вы хотите хранить изображения, для этого пригодится GridFS.

Ознакомьтесь с GridFS здесь. Обратите внимание, что GridFS — это просто спецификация. Все по-прежнему хранится в обычных коллекциях MongoDB.


PS: похоже, что pubmedID — это уникальный ключ. Вы можете сэкономить место, заменив _id на pubmedID при создании документа.

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

person Gates VP    schedule 03.05.2011