Has it been solved, and what's the most space-efficient way to store the per-item unread state for all users? In my mind it forms a sparse matrix, but then you'd want to group people's storage of unread status together (so you get some data compression) - until one person marks an item as read, and then you have to extract them from the compressed data set...
I have no practical experience but this intrigues me, and real world stories would be great!