Индексирование 20M записей с помощью python и mongoDB - PullRequest
3 голосов
/ 03 мая 2011

Я хотел бы упомянуть о моем маленьком проекте, и если я нахожусь на пути.Мне нужна работа со всеми статьями из 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 -> insertи индексация!)
  • Могу ли я использовать GridFS и получать эквиваленты блоков для записей для каждого файла?Как?
  • Знаете ли вы другой путь?

1 Ответ

2 голосов
/ 03 мая 2011

Это хорошая идея? (Синтаксический анализ XML -> JSON -> вставка и индексирование!)

Это работает? JSON, как правило, меньше XML, это, вероятно, хорошее изменение.

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

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

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

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


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

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

...