производительность — PHP: повышение скорости возврата терминов Mesh из базы данных Entrez (Pubmed)

Я хочу извлечь термины Mesh из результатов поиска в базе данных Pubmed. Я использую php.

Я сделал скрипт, который работает, но он очень медленный. Он открывает каждую статью, анализирует XML и получает термины сетки. Функция «fopen» является медленной частью.

$url= $base."efetch.fcgi?db=$db&id=$id&rettype=abstract";
$opts = array(
'http' => array(
'method' => "GET",
'header' => "User-Agent:MyAgent/1.0\r\n")
);
$context = stream_context_create($opts);
$fp = fopen($url,'r',false,$context);
$output=stream_get_contents($fp);

Сценарий открывает для каждой статьи большой XML-файл:
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&ID = 19616537&retmode = XML

Есть ли способ получить только термины Mesh или хотя бы меньшую часть xml? Или загрузить только половину файла?

Спасибо


Обновить:
Я получил некоторое улучшение. Использование efetch с retmode=text а также rettype=medline уменьшил загрузку одного файла с 15 кб до 4кб. Я также связал все загрузки, чтобы уменьшить количество запросов.

Теперь для загрузки 500 результатов требуется 4,8 с.

Я все еще хочу это быстрее.

У кого-нибудь есть советы?

0

Решение

Я не уверен, каковы ваши пределы и цели. Но если вы запрашиваете всю базу данных, я бы попробовал наоборот. База данных запросов для перечисления статей для каждого известного термина MeSH. Насколько я знаю, есть только «27 149 дескрипторов в 2014 году MeSH», поэтому вам нужно отправить менее 30 тысяч запросов, чтобы получить результаты для всей базы данных. Вы можете достичь этого, используя Европа PMC RESTful Веб-сервис.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]