I have a large set of users in my project like 50m.
I should create a playlist for each user every day, for doing this, I'm currently using this method:
I have a column in my users' table that holds the latest time of creating a playlist for that user, and I name it last_playlist_created_at
.
I run a query on the users' table and get the top 1000s, that selects the list of users which their last_playlist_created_at
is past one day and sort the result in ascending order by last_playlist_created_at
After that, I run a foreach
on the result and publish a message for each in my message-broker.
Behind the message-broker, I start around 64 workers to process the messages (create a playlist for the user) and update last_playlist_created_at
in the users' table.
If my message-broker messages list was empty, I will repeat these steps (While - Do-While)
I think the processing method is good enough and can be scalable as well, but the method we use to create the message for each user is not scalable!
How should I do to dispatch a large set of messages for each of my users?