Thank you everyone
Thank you everyone
The choice between push and pull modes is a question
If you choose to push, the method similar to the two above is the simplest. The amount of data may be a bit huge, but a message table can handle it
If you choose to pull, in addition to the message table (msg_id, msg_content), there will also be a separate user message table (uid, msg_id, status). When you send a message, it is sent to N users. There will be N records, and then when you open the message list page, you will search and display the content based on the number of messages displayed on each page based on msg_id. If you click it, it will be considered read, and the status will be updated
A few more points
If you feel that the amount of data in the user message table is still too large, you can split it according to different dimensions. For example, if the old messages are basically not read by anyone, they can be split by time. If the absolute number of users do not read them, they can be split by user activity. Split etc.
If the reading pressure is too great, use redis or memcache to cache it every time you read
Add a message-user's table. When the user reads the message page, add relevant content, and then check the database. If the user has the row, it is proved that it has been read.
This is a simple logic that can be optimized to a certain extent to reduce database IO pressure and eliminate repeated operations
Add a status field in the database to indicate whether it has been read. When the user reads the message, update the database. Change the status from 0 to 1
update A set status = 1 where ID = .