Эй, ребята, это мой первый вопрос здесь. Я пытаюсь сделать локальную копию 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?