0

メディアを自分のサイトにアップロードするたびに何が起こりますか。全員に通知が届きます。各ユーザーはボックスをクリックして削除でき、メッセージキューから永久に削除されます。

サイトに10,000人がいる場合、すべての人のメッセージキューに追加するにはどうすればよいですか?かなり時間がかかると思いますので、ファイルシステムジャーナルのようなものを選びますか?私が人々に通知する必要があることをマークし、データ、そして私の現在の位置。次に、100回程度の挿入ごとに位置を更新しますか?ウォッチャーリストにPKが必要なので、途中で誰かが登録しても、PKで並べ替えるので、注文が壊れることはありませんか?

これは大量通知システムに最適なソリューションですか?

-編集-

このサイトはユーザー作成コンテンツサイトです。管理者はグローバルメッセージを送信でき、人気のある人々には数千人のサブスクライバーがいる可能性があります。

4

5 に答える 5

3

受信者をメッセージにリンクする狭い多対多のテーブルへの10000の挿入(recipientid, messageid, status)が遅い場合、設計でより大きな問題が発生することが予想されます。

これは、私が通常、バッチ処理やポスト操作の途中でサブスクライブする人についてさえ心配しない種類の操作です-基本的に:

SQL Server@publisheridで既知、既知であると仮定すると、次のようになります。@msg

BEGIN TRANSACTION

INSERT INTO msgs (publisherid, msg)
VALUES(@publisherid, @msg)
SET @messageid = SCOPE_IDENTITY()

INSERT INTO msqqueue (recipientid, messageid, status)
SELECT subscriberid, @messageid, 0 -- unread
FROM subscribers
WHERE subscribers.publisherid = @publisherid

COMMIT TRANSACTION
于 2009-05-30T01:25:15.823 に答える
1

たぶん、ユーザーごとに見た通知を記録するだけです。したがって、ユーザーに表示する一連の通知は、「earliest_notification」期間(登録時、または1週間前...)の前に作成されたものから、確認済みの通知を差し引いたものです。 。そうすれば、一度に1人のユーザーになるまで何かを挿入するのを遅らせることができます。さらに、1週間未満のメッセージのみをユーザーに表示する場合は、1週間以上前のread-this-notificationフラグを削除できます。

(私の古い仕事でのDBAからのパフォーマンス最適化のヒント:「ビジネスプロセスは変更するのが最も簡単なものです。最初にそれらを見てください」)

于 2009-05-30T00:43:33.397 に答える
1

私は、データベースが十分に機能し、実行できるように設計されていることをデータベースに処理させるだけだと思います。データを挿入して管理します。コードでそれを実行しようとしないでください。SQLを記述してデータを一度に挿入するだけです。10000行は、すべての実際のデータベースにとって重要です。

于 2009-05-30T06:40:00.833 に答える
0

IMHOがレコードを挿入することは、この問題に対する最も効率的な解決策ではない可能性があります。クライアント側のCookieを使用して、ユーザーが通知を削除したかどうかを保存できますか、それともユーザーがCookieをクリアした場合でもこれを追跡する必要がありますか?新しい動画をアップロードすると、アプリはCookieを新しい動画レコードIDと比較し、Cookieに保存されている内容に基づいて通知を表示するか非表示にするかを決定できます。これにより、大量のデータベース挿入が節約され、クライアントの負担が大幅に軽減されます。

于 2009-05-30T00:45:15.517 に答える
0

Postgresを使用している場合は、それらすべての中で最速の方法であるCOPYコマンドを使用できます。

COPY tablename (col1, col2, col3) FROM '/path/to/tabfile';

ここで、tabfileは、多数のエントリを含むTAB区切りのファイルです。ただし、いくつかのUNIQUE制約があり、ファイルに重複がある場合、これは失敗します。

于 2009-05-30T01:23:47.887 に答える