Разобрать большой XML-файл со скриптом или использовать API BioPython? - PullRequest
0 голосов
/ 26 мая 2010

Эй, ребята, это мой первый вопрос здесь. Я пытаюсь сделать локальную копию UniprotKB в SQL.

UniprotKB имеет объем 2,1 ГБ и поставляется в формате XML и специального текстового формата, используемого SwissProt

Вот мои варианты:

1) Используйте SAX-парсер (XML) - я выбрал Ruby и Nokogiri. Я начал писать анализатор, но моя первоначальная реакция: как мне сопоставить схему XML с синтаксическим анализатором SAX?

2) BioPython - у меня уже установлен BioSQL / Biopython, который буквально создал мою схему SQL для меня, и я смог успешно вставить один txt-файл SwissProt / Uniprot в базу данных.

Я запускаю его прямо сейчас (скрещивает пальцы) на все 2,1 Гб. Вот код, который я использую:


from Bio import SeqIO
from BioSQL import BioSeqDatabase
from Bio import SwissProt

server = BioSeqDatabase.open_database(driver = "MySQLdb", user = "root", passwd = "", host="localhost", db = "bioseqdb")
db = server["uniprot"]
iterator = SeqIO.parse(open("/path/to/uniprot_sprot.dat", "r"), "swiss")
db.load(iterator)
server.commit()

Редактировать: теперь происходит сбой, потому что транзакции блокируются (так как таблицы - Innodb) Номер ошибки: 1205 Превышено время ожидания блокировки; попробуйте перезапустить транзакцию. я использую Версия MySQL: 5.1.43

Должен ли я переключить свою базу данных на Postgrelsql?

1 Ответ

0 голосов
/ 27 мая 2010

Переключен на PostgrelSQL для удобства. Некоторые проблемы были решены путем загрузки информации о таксономии NCBI (которая, как я не знал, была необходима, должна была быть более понятной в документации), поэтому я в итоге использовал швейцарский парсер из BioPython, потому что он так хорошо сочетается с BioSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...