2

以前にフィードアグリゲーターを作成しましたが、少し最適化しようとしています。以前は、simplepie(phpクラス)を使用してフィードを解析し、各フィード項目に対してget_id()関数を使用して、ハッシュ(リンクとタイトルのmd5ミックス)を返していました。この「id」を「remote_id」としてMySQLに保存します。ただし、重複がないことを確認するために、フィードアイテムごとにSELECTクエリを実行して、「remote_id」が存在しないことを確認しています。何千ものフィードを見ていることを考えると、これは非効率のようです。

remote_idを一意のキーに変換してから、データベースが各パスで新しいレコードの書き込みに失敗するようにするのが最も効率的ですか?これを設計する他の方法は他にありますか?

4

1 に答える 1

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;
        }
于 2011-06-07T09:23:30.897 に答える