2013-09-02 4 views
1

Это вопрос, который должен сделать больше о производительности и реализации. Я хочу создать приложение для получения информации о телевизионных сериалах и хотел бы использовать thetvdb.com api. thetvdb предлагает xml api и некоторые руководства для запуска u. Для инициализации говорят, что вы должны скачать zip-файл (в соответствии с идентификатором серии, которую вы хотите добавить).Создать db или использовать xml

xml состоит из трех файлов xml. Один из них касается актеров, один - о баннерах, а один содержит информацию о телевизионном шоу, включающем сезоны и эпизоды и обзоры и т. Д. В руководстве говорится, что вы анализируете xml и добавляете их в таблицы своего db, как вам нравится ,

Мой вопрос следующий: Лучше ли скачать xml, проанализировать его и сохранить в моем db и удалить xmls? Или я должен использовать xmls и анализировать их каждый раз, когда я хочу получить информацию о шоу и представить их пользователю? Какова стоимость одной реализации и какова стоимость второго?

Код еще не был, так как я все еще его проектирую.

+0

возможно дубликат [Стратегии осуществления поиска по файлу XML] (http://stackoverflow.com/questions/11210600/ strategy-to-implement-search-on-xml-file) –

ответ

1

Я бы определенно проанализировал xml-файлы и поместил их в базу данных. Разбор xml-файлов имеет значительные накладные расходы, а реляционные базы данных разработаны с целью запроса данных внутри них и очень эффективны в этом отношении (особенно если вы хорошо проектируете свою базу данных, предоставляете полезные таблицы и логические соединения между таблицами.

1

Я думаю, что правильное решение может зависеть от вашего приложения нагрузки (как многие пользователи будут одновременно использовать), среднего размера и структуры XML-файлы и необходимости обновления данных

возможные решения:.

  1. Если файлы xml не очень большие и сложные и не содержат много нежелательной информации Вам, возможно, не нужно хранить эту информацию в своем db.
  2. В этом случае вы можете добавить слой кеширования в свое приложение, которое будет хранить файлы и повторно получать их из thetvdb, если предыдущий запрос был слишком долго назад.
  3. Если вы считаете, что вы можете отправить требуемую информацию клиентам более компактным или удобным способом или потребовать дополнительной обработки или вы планируете в будущем выполнять некоторые групповые операции с вашими данными, то лучшим вариантом является сохранение данные в db
  4. Также подумайте об обновлении данных в вашем db (аналогично 2-й опции).
  5. Также вы можете хранить только важную информацию в своем db.

Update: Вообще-то я бы не рекомендовал использовать локальные базы данных, так как в будущем это может вызвать проблемы с миграцией схемы (если вы хотите что-то изменить в вашей БД схемы).

+0

Приложение будет работать локально (это моя первая мысль). Таким образом, не более одного пользователя одновременно используют db. Кэширование означает сохранение файлов xml, поскольку они извлекаются из zip-файла? Или каким-то другим способом? – Apostolos

+0

Да, просто сохраняя файлы xml локально. – Nailgun

+0

Не могли бы вы быть более конкретными в том, чтобы не использовать локальные базы данных? Должно ли приложение удаленно подключаться к db? Это предпочтительный способ для хранения данных в данный момент? Как это может вызвать проблемы? – Apostolos

0

Хранение данных в db - это, безусловно, лучший способ, если вам нужно выполнить определенные запросы. Я также использую TheTVDB API (интегрированные в Wordpress), и я могу дать вам некоторый PHP-код. Сначала вам нужно создать БД со следующим кодом, тогда у вас есть PHP-скрипт, который вставляет данные из XML-url телешоу.

SQL-запрос:

CREATE TABLE IF NOT EXISTS `tvshowsinfo` (
    `id` int(9) NOT NULL AUTO_INCREMENT, 
    `showname` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `lang` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `episodeid` int(9) NOT NULL, 
    `episodenumber` int(5) NOT NULL, 
    `season` int(5) NOT NULL, 
    `director` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `episodename` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `firstaired` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `gueststars` text CHARACTER SET utf8 NOT NULL, 
    `overview` text CHARACTER SET utf8 NOT NULL, 
    `rating` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `ratingcnt` int(9) NOT NULL, 
    `writer` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `episodeimg` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `seasonid` int(9) NOT NULL, 
    `seriesid` int(9) NOT NULL, 
    `thumbht` int(4) NOT NULL, 
    `thumbwd` int(4) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; 

PHP/Wordpress сценарий:

<?php 
$url = "Your URL"; 
$xmlstr = file_get_contents($url); 
$elements = json_decode(json_encode((array)simplexml_load_string($xmlstr)),1); 

global $wpdb; 

$mquery = "INSERT INTO tvshowsinfo (showname,lang,episodeid,episodenumber,season,director,episodename,firstaired,gueststars,overview,rating,ratingcnt,writer,episodeimg,seasonid,seriesid,thumbht,thumbwd) VALUES "; 
$i = 0; 
foreach ($elements['Episode'] as $element) { 
    if ($i !== 0) { $mquery .= ", "; } 
    if ($element["Combined_season"] !== "0") { 
     $mquery .= "('".mysql_real_escape_string($_POST["seriesname"])."', '".$element["Language"]."', '".$element["id"]."', '".$element["Combined_episodenumber"]."', '".$element["Combined_season"]."', '".mysql_real_escape_string($element["Director"])."', '".mysql_real_escape_string($element["EpisodeName"])."', '".$element["FirstAired"]."', '".mysql_real_escape_string($element["GuestStars"])."', '".mysql_real_escape_string($element["Overview"])."', '".$element["Rating"]."', '".$element["RatingCount"]."', '".mysql_real_escape_string($element["Writer"])."', 'http://thetvdb.com/banners/".$element["filename"]."', '".$element["seasonid"]."', '".$element["seriesid"]."', '".$element["thumb_height"]."', '".$element["thumb_width"]."')"; 
     $i++; 
    } 
} 

$wpdb->query($mquery); 
$wpdb->print_error(); 

/* DEBUG */ 

?> 

<pre><?php print_r($elements); ?></pre> 
+0

Привет, Гром ... как я проверил, информация о эпизоде ​​происходит из xml, который находится внутри zip, а не из xml в Интернете, например в Интернете. Поэтому некоторые манипуляции с файлами требуются, я думаю. Разве вам лучше не использовать другую таблицу для эпизодов с внешним ключом для серийного? – Apostolos

+0

Вы правы, автоматически загружая xml-файл, требуется некоторая манипуляция, как функция system() (например: system ('wget file.zip && unzip file.zip') и т. Д.). Я не использую разные таблицы, потому что я должны одновременно запрашивать разные телесериалы. –

+0

Итак, у вас есть разные строки с одинаковым идентификатором (серийный) и другим идентификатором эпизода? – Apostolos

Смежные вопросы