Я бы держался подальше от файлов, в основном потому, что очень трудно управлять параллелизмом файлов при работе с несколькими модулями обновления (которые могут возникнуть, если у вас есть, скажем, веб-серверы с балансировкой нагрузки).
База данных - это хорошая идея, в зависимости от вашего масштаба (реляционные базы данных на хорошем оборудовании масштабируются до сотен, если не тысяч одновременных обновлений, но после этого часто падают с обрыва). Если вы не ожидаете, что в сети одновременно будут сотни пользователей, база данных с клиентами, использующими опрос AJAX или Comet-соединения , вероятно, является правильным решением. И не стоит сбрасывать со счетов тот факт, что почти каждый программист, которого вы можете нанять, знает, как работать с базой данных.
Другими параметрами, которые вы можете посмотреть, являются очереди сообщений, в соответствии с которыми у каждого клиента есть очередь сообщений на стороне сервера, которая периодически проверяется, снова используя опрос AJAX или соединения Comet . Очереди хороши тем, что вам не нужно отслеживать, какие сообщения клиент уже видел - вы просто берете все, что есть в очереди. Очереди с поддержкой тем также являются хорошим способом для создания состояния в режиме онлайн / офлайн.
Наконец, некоторые базы данных NoSQL ( CouchDB , MongoDB ) обеспечивают очень хорошее масштабирование путем разделения на несколько машин и хранят иерархические данные, как это делает файл XML (на самом деле они используют JSON хранить свои данные), так что поток беседы будет естественным там.