One client of mine uses the <a href="http://docs.alfresco.com/5.0/references/RESTful-Preference.html">preferences store</a> for this. When someone opens a document they write the node ref to the user's preferences. Obviously, over time this makes the user preferences object get larger and larger so it may not be the best option for that reason.
I'd be more inclined to install something like <a href="http://redis.io/">Redis</a> which is a key value store. When someone opens a document you can write the node ref and the username as the key-value pair. When someone opens the document library you can ask Redis which of those documents have been read and mark them read or unread accordingly.
The advantage of Redis is that it will scale better than the user preferences approach and it offloads the performance hit of those queries from Alfresco.
Regarding Redis, yes it is nice option for large document library where we need to maintain status for large number of documents. Surly preferences store will not scale at that level.
For mid level document library where we have to maintain read status of few hundreds of documents against single user, do you think preferences store is good choice. Just want to know how much big user preference object can be ?