TL;DR

メッセージなどを読んだかどうかを管理するときに、「未読」ではなく「既読」をデータとして保存する戦略。

仕組み

未読管理では「未読」をデータとして保存している。これとは逆に、ユーザが読んだときに「既読」のデータを作る方法もある。ここでは、対象のデータをチャットの「メッセージ」とする。

注意点

既読を保存する方法には、次のメリットがある。

  • ユーザが操作したときに既読のデータを作るので、作成処理をユーザごとに分散できる
  • データを削除する必要がない

一方で、次のデメリットがある。

  • 画面に表示するのは「未読」なので、クエリやレスポンスの組み立てが少し複雑になる
  • データが溜まり続ける。半年や 1 年など、既読を管理する期間を決めておく必要がある。期限切れのデータの削除は、メッセージの作成・更新・削除の操作時に行う。対象のメッセージ数が 10 個前後と少なければ、同期的に処理しても問題ないと考えられる

自分の理解

管理する期間を決めておけば、データをシーケンシャルに扱えるのではないかと考えた。

ただ、そもそも未読を管理して、読んだら論理削除すれば良いのではないか、とも思う。

出典