2010-05-26 38 views
0

嘿傢伙這是我的第一個問題在這裏。我試圖在SQL中創建UniprotKB的本地副本。解析帶有腳本的大型XML文件或使用BioPython API?

的UNIPROTKB爲2.1GB,並且它有XML和SwissProt登錄

使用特殊的文本格式,這是我的選擇:

1)使用SAX解析器(XML) - 我選擇了紅寶石,和Nokogiri。我開始編寫解析器,但是我最初的反應是:如何將XML模式映射到SAX解析器? 2)BioPython - 我已經安裝了BioSQL/Biopython,它爲我創建了我的SQL模式,並且我能夠成功地在數據庫中插入一個SwissProt/Uniprot txt文件。

我正在運行它(跨越手指)在整個2.1GB。下面是我運行代碼:


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嗎?

+0

你在這裏有什麼問題?是關於XML解析器還是數據庫? – Krumelur 2010-05-26 17:59:02

+0

哪個選項更好/爲什麼。是否有任何方法來修復我的MySQL版本,以便它不會死於交易? – jeremy04 2010-05-26 18:03:21

+0

如果您使用java或C#,您可以使用vtd-xml處理此大小的文件,這比SAX快很多,您的進程不會死於 – 2010-05-26 18:52:25

回答

0

爲方便起見,切換到PostgrelSQL。其中一些問題通過下載NCBI分類信息(我不知道是必要的,應該在文檔中更加清楚)來解決,所以我最終使用了BioPython的瑞士分析器,因爲它與BioSQL非常吻合。