2011-06-07 21 views
2

私はフィードアグリゲータを書いていますが、それを少しでも最適化しようとしています。以前はsimplepie(PHPクラス)を使ってフィードを解析していましたが、各フィード項目にget_id()関数を使用してハッシュ(リンク+タイトルのmd5の組み合わせ)を返しました。私はこの「id」をMySQLの「remote_id」として保存します。しかし、私は重複がないことを確認するために、 "remote_id"が存在しないことを確認するために、各フィード項目に対してSELECTクエリを実行しています。これは私が1000のフィードを見ていると考えると非効率的です。MySQLの重複したエントリをスキップするためのベストプラクティス

remote_idを一意のキーに変更し、データベースが各パスで新しいレコードを書き込めないようにするのが最も効率的ですか?これをエンジニアリングする他の方法はそれが良いですか?

答えて

1

はい、キーがmysql内で一意である必要がある場合は、一般的に一意のキーとして定義することをお勧めします。

可能な重複を挿入するときに、PDOを使用して{} catch(){}文を使用してフィルタを外してみると、例外がスローされます。事前に確認する必要はありません。

私は似たような状況で(擬似コードの警告)このようなものを使用する:PDOに私を導入するための

 $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

おかげで – phirschybar