La memorizzazione dei tuoi valori per un forum per utenti che non hanno ancora letto l'argomento (che è una cattiva idea) non sarà scalabile. Fallo al contrario se proprio devi, dal momento che avrai anche i problemi associati alla necessità di aggiungere voci a ogni argomento nel tuo database alla registrazione di un nuovo utente.
Invece di rinunciare a una tabella relazionale, prova invece a farlo come segue:
Table: topics
+----+-------+------+-----
| id | title | body | ...
+----+-------+------+-----
| 1 | xyz | .... | ...
Table: replies
+----+-------+------+-----
| id | title | body | ...
+----+-------+------+-----
| 3 | xyz | .... | ...
Table: read_topics
+---------+----------+
| user_id | topic_id |
+---------+----------+
| 2 | 1 |
Il tuo approccio, sebbene possibile (e più facile da immaginare), inizia a crollare quando hai enormi quantità di utenti e la scalabilità è ciò a cui hai accennato nei commenti. Un altro problema qui è che con il tuo approccio hai un approccio massiccio penalità delle prestazioni perché è necessario estrarre i dati dal database, dividerli e quindi manipolarli e ricombinarli prima di effettuare un'altra transazione. Hai anche problemi con avere la tabella scritta da due thread CGI contemporaneamente . Divertiti con quello...
Stai utilizzando uno strumento per la manipolazione, l'ordinamento, le relazioni tra i dati e l'archiviazione dei dati, quindi utilizzalo per tutti, non solo come discarica per le informazioni.