2011-06-07 53 views
2

我已經編寫了一個feed聚合器,但是我試圖優化它。在過去,使用simplepie(php類)來解析提要,我已經使用每個提要項的get_id()函數返回一個哈希(鏈接+標題的md5混合)。我將這個「id」作爲「remote_id」存儲在MySQL中。但爲了確保我沒有重複項,我一直在爲每個供稿項目進行SELECT查詢,以確保「remote_id」不存在。考慮到我正在查看1000年的Feed,這看起來效率不高。在MySQL中跳過重複項的最佳實踐

將remote_id轉換爲唯一密鑰並讓數據庫無法在每次傳遞中寫入新記錄是否最有效?任何其他方式來設計這個更好?

回答

1

是的,如果一個密鑰在mysql中應該是唯一的,那麼將其定義爲唯一密鑰通常是一個好主意。

當插入可能的重複項時,您可以使用PDO並嘗試{} 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 2011-06-07 09:35:54