[eluser]jedd[/eluser]
InsiteFX - I think you have to make the choice early - do you want a good tracking system, or less load on your DB?
I'm curious how EE does it. Are the forums part of the free/trial version of EE you can download? Though these forums do seem to cheat a bit on the way they track read status on threads, and of course, they don't appear to offer an aggregated 'there are unread messages in any thread in a given forum' check, either
I haven't cut any code yet, but have been pondering the relative costs of picking the last x (somewhere around 30) threads in a given forum, and checking if any of those have new messages, and if not, trying the next 30, perhaps giving up after y (say 5) iterations or so. The 'last threads' in a forum would be determined entirely by thread.id, rather than message.date where message.thread_id = thread.id. Ie. an attempt to be slightly smart about it, by reducing the complexity of the sql sub-queries being made, while still likely to catch a forum with threads that have new posts in them.
Again, though, this relies on the presence of a member_thread_message table.
Anyhoo, a bit bizarre to try to keep this stuff in a cookie, isn't it? I guess anything that's dropped off the end you just assume has been read (or 'it's so old, the user doesn't care').