2011-06-07 7 views
2

Я уже писал агрегатор подачи, но немного пытаюсь его оптимизировать. Раньше, используя simplepie (php class) для синтаксического анализа фидов, я использовал функцию get_id() для каждого элемента фида, чтобы вернуть хэш (соединение md5 ссылки + заголовок). Я храню этот «id» как «remote_id» в MySQL. Однако, чтобы убедиться, что у меня нет дубликатов, я делал запрос SELECT для каждого элемента фида, чтобы убедиться, что «remote_id» не существует. Это кажется неэффективным, учитывая, что я смотрю 1000-е каналы.Лучшая практика для пропусков повторяющихся записей в MySQL

Лучше всего просто превратить remote_id в уникальный ключ, а затем позволить базе данных не записывать новую запись на каждом проходе? Любой другой способ это лучше?

ответ

1

Да, если ключ должен быть уникальным в mysql, обычно это хорошая идея, чтобы определить его как уникальный ключ.

При вставке возможных дубликатов вы можете использовать PDO и try {} catch() {}, чтобы отфильтровать их, они будут генерировать исключение. Вам не нужно будет проверять заранее.

я использую что-то вроде этого в подобной ситуации (псевдокод) предупреждение:

 $stmnt = $this->dbh->prepare('INSERT QUERY'); 

     try { 
      $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $this->dbh->beginTransaction(); 

      $stmnt->execute($celss); 

      $this->dbh->commit(); 
     } catch (Exception $e) 
     { 
      $this->dbh->rollback(); 
      $this->invalidRows[] = array($cells,$e->getMessage()); 
      continue; 
     } 
+0

спасибо за введение меня в PDO – phirschybar