Armazenar seus valores em um fórum para usuários que ainda não leram o tópico (o que é uma má ideia) não será escalável. Faça ao contrário se você realmente precisar, já que também terá problemas associados a ter que adicionar entradas a todos os tópicos em seu banco de dados após a inscrição de um novo usuário.
Em vez de renunciar a uma tabela relacional, tente fazê-lo da seguinte maneira:
Table: topics
+----+-------+------+-----
| id | title | body | ...
+----+-------+------+-----
| 1 | xyz | .... | ...
Table: replies
+----+-------+------+-----
| id | title | body | ...
+----+-------+------+-----
| 3 | xyz | .... | ...
Table: read_topics
+---------+----------+
| user_id | topic_id |
+---------+----------+
| 2 | 1 |
Sua abordagem, embora possível (e mais fácil de imaginar), começa a falhar quando você tem uma grande quantidade de usuários, e escalabilidade é o que você mencionou nos comentários. Outro problema aqui é que, com sua abordagem, você tem massivos penalidades de desempenho porque você precisa extrair os dados do banco de dados, dividi-los e depois manipulá-los e recombiná-los antes de fazer outra transação. Você também tem problemas com ter a tabela sendo gravada por dois threads CGI ao mesmo tempo . Divirta-se com isso...
Você está usando uma ferramenta para manipulação de dados, classificação, relacionamento de dados e armazenamento, portanto, use-a para todos eles, não apenas como um depósito de informações.