潜在的な問題はパフォーマンスであり、パフォーマンスの問題はまだありません。ソリューション#1でこれを処理するために選択したデータベースに応じてできることはたくさんあります。これは、ユーザーが現在の未読メッセージ数を取得する頻度に依存します。これらの選択肢の多くは、アプリ側でカスタムコーディングを必要としないため、コードを変更するか、ごくわずかで実装できます。アプリで成長しやすくします。
ユーザーが接続/ログインすると、データベースからカウントを取得するのはそれほど悪くありません。アプリは、メールなどのメッセージのリストを常に更新していますか?ここから未読件数を取得するためにデータベースに再度アクセスする必要はありません。新しいメッセージを取得するには、とにかくdbトリップが必要です。
IsReadにフラグを立てるためにメッセージが読み取られるたびにdbにアクセスしますか?フィールドは、別のフィールドの再計算なしで十分です。
ソリューション#2(フィールド/ディスク上のカウントを保持)を使用すると、問題が発生したときにこのフィールドを定期的に再構築/再計算するルーチンが必要ですか?そして、常に問題があります。これらすべてをトランザクションでラップしますか?誰かが他の誰かにメッセージを送信するたびに、Userテーブルのロックが原因で受信ユーザーのUnreadCountを更新できないため、失敗する可能性がありますか?または、このフィールド用に別のテーブルを作成しますか?