私はElasticSearch(フルテキスト検索)でMySQLテーブルのインデックスを作成しています。作成時に新しい行を送信する代わりに、そのテーブルの新しいレコードに対してN秒(約30秒)ごとにSQLクエリを実行します。PRIMARY_ID> lastProcessedIdを常に照会してデータベーステーブルを「監視」するのは悪いですか
SELECT * FROM myTable where id > lastProcessedId
私の質問:私たちは、最後に処理されたレコードのID(AUTO_INCREMENT)を格納するなど、クエリを発行していることをやる、これはこれを処理するための良い方法ですか?重大な欠点はありますか?より良い選択肢はありますか?
また、ユーザーの好み(Facebookのスタイル)を扱うために同じアプローチを使用する予定でした。 N秒ごとに最新の「好き」を取得して処理し、各ユーザーのタイムラインを更新するSQLクエリを実行します。
私たちは古いコードベースを混乱させるのを避けるために、このようにしています。しかし、私は毎秒このタイプのクエリーを発行することにはあまり慣れていません。
このソリューションに関するご意見や問題はありますか?
アプリケーションがトランザクションをどのように処理したかによって、2つのトランザクションが同時に複数のレコードをINSERTすると、SELECTはいくつかのレコードを見逃す可能性があります。後続のSELECTは、より低いすべてのIDを見たと誤って判断します。 – pilcrow