2010-11-25 1 views
1

私はSQLデータベースで処理キューメカニズムを実装する最も効率的でスケーラブルな方法を理解しようとしています。その短所は、関連する「バックリンク」統計情報を持つ「ドメイン」オブジェクトの束があることです。私はどのDomainsがバックリンクを処理する必要があるかを効率的に把握したい。MySql/MSSQL - 処理のためのレコードのチェックアウト - スケーリング?

ドメインテーブル:ID、domainNameの

バックリンクテーブル:ID、DOMAINIDは、(歴史を維持するために)

バックリンクテーブルは、多くのレコードを持って、checkedTimeをカウントする1ドメインレコード。 Backlinksを処理するために必要なドメインを効率的に選択する必要があります。これは、最新のcheckedTimeを使用したBacklinksレコードが過去に十分であること、またはドメインレコードに対してBacklinksレコードがまったく存在しないことを意味する可能性があります。ドメインは、最も古いcheckedTimeを最初に順序付けすることを含む、いくつかの要因による処理のために注文する必要があります。

複数の「読者」処理ドメインがあります。同じドメインが2回処理された場合、それは大きな問題ではありませんが、CPUサイクルの無駄です。

ワーカーは、ドメインを処理するのに不確定な時間がかかります。私は、作業員が何らかの理由で失敗した場合に備えて、作業が終了したときに明示的にチェックインするように要求するのではなく、チェックアウトが「期限切れになる」という意味でバックアップを取ることを好みます。

大きな問題はスケーリングです。最初から簡単に約200万のドメインを持ち、その数は毎日増え続けます。これは私のバックリンクの履歴も急速に成長することを意味し、場合によっては毎日処理することを期待しています。 問題は、バックリンク処理が必要なドメインを見つける最も効率的な方法は何ですか?

ありがとうございました!

+0

古いバックリンクをチェックするビジネスルールと、存在しないbaklinkを比較するビジネスルールは何ですか?どちらがより検証することを強く求めていますか? –

+0

この場合、まだ存在していないバックリンクのチェックは、より高い優先度と見なされます... – Redth

答えて

0

私は物事を少し違ったものにすることに決めました。いくつかのテーブルの基準に基づいて処理する必要のあるドメインを見つける代わりに、特定のドメインに対して各メトリックを処理する必要がある日付を割り当てます。これにより、処理が必要なドメインをより簡単に検索することができます。

私は、処理するドメインを見つけ出し、バッチIDで処理されたものとしてマークし、それらのドメインをワーカーに返します。ワーカーが完了すると、結果が返され、バッチが削除され、ドメインは当然将来再び処理できる状態になります。

関連する問題