Breaking my vow of silence, I’m sorry but I can’t leave it like this and I have a feeling Bendrim is/are not going to be handing out their code (which is understandable). Disclaimer: I have no clue exactly what technique Fluther uses. I have a few ideas, but I will not be going into detail.
Short answer: Stop thinking about databases, and start thinking about other techniques like webservices (socket communication), or even more mind boggling server-side technologies.
Long answer: I think you need to let go of the idea that the number of observers is stored in a database somewhere and just gets retrieved every time someone opens a question. I purposely used a vague description like ’listening server’, because in reality it can be many things. But when you think of each question as a little chat-room, it’s not that hard to imagine what could be going on behind the scenes (without the use of a database). Of course the actual question and answers will still be saved in a database, but it’s unnecessary to store data like the amount of observers.
A chat-room doesn’t use a database to store every message. Instead basic chat-rooms use a webservice that allows users to connect and use it to send a message to every other user that is connected. That is why the service knows who is viewing a question. Once the webservice hasn’t heard from you for a while, it will simply assume you have left the question and deduct the total amount of observers by 1.
—-
I would also like to add that you use ASP.NET in your tags, but Fluther is build on Django (python based web framework). Take a look at some Django chat-room tutorials, if you are interested to learn how a chat room could be set up with Django (which might not be the same way Fluther does it, but it will broaden your horizon).
Feel free to correct me if I’m wrong.