非常に大量のメッセージ (レコード) を処理するサーバーを erlang で作成しています。各メッセージには、ユーザー ID のようなタグ (アトム) があります。
そのようなプロセスが存在しない場合、「ルーター」はこのユーザー専用の永続的なプロセスを生成します (メッセージを保存して渡す前に数分間メッセージを蓄積するため)。それ以外の場合は、既存のプロセス メールボックスにメッセージとして渡します。
問題はルーティング テーブルの簿記です。
ルーターをシリアル化することを考えることができます。各メッセージは、userId によって PID を見つけるための ETS ルックアップになり、終了しなかった場合は最終的に Spawn と ETS が挿入されます。しかし、それは数秒で混雑しました。
別の方法として、プロセスを直接生成して各メッセージをルーティングすることもできますが、1 人のユーザーへのいくつかのメッセージが連続して受信され、ETS で対応する PID が見つからず、永続的なプロセスが生成された場合、競合状態が発生する可能性があります。メッセージは失われ、最後に生成されたプロセスのみが有効になり (ETS で他のプロセスを上書きします)、他のプロセスはアイドル状態になり、追跡されなくなります。
また、私はすべて間違って考えているかもしれません。このシナリオを処理するより良い方法はありますか?