Как правильно реализовать хранение сообщений в социальной сети?
Доброе время суток! Решил написать соц. сеть для практики, вопрос эффективного хранения сообщений (особенно в "беседах") застал врасплох.
Если хранить данные в БД (mysql) - сразу возникает проблема: если человек захочет удалить сообщения, они должны удалиться только у него, а не у всех собеседников. Получается, или нужно добавлять к каждому сообщению список тех, кто его удалил, или создавать для каждого человека отдельную копию сообщения изначально, чтобы в нужный момент удалить сообщение только у него. Очевидно, первый способ просто ужасен, а второй создает или засор в БД с сообщениями, где будет куча их копий, или заставляет создавать отдельные БД для хранения сообщений для каждого юзера. Насколько я знаю, в mysql такое делать очень неэффективно: это понижает быстродействие и заставляет делать "необычные" запросы к БД.
Поэтому я пришел к выводу, что в БД, в моем случае, лучше всего хранить только общие данные о диалоге (беседе), а для хранения сообщений использовать XML-файлы, которые будут лежать в папке пользователя. При его желании удалить сообщение / диалог, изменения будут касаться только его файла, но не файлов других пользователей. Тогда при появлении нового сообщения, нужно будет обновлять XML-файл у каждого из участников диалога (беседы). Затратно ли это с точки зрения ресурсов, и не будет ли это медленно происходить (частая работа с такими файлами)? А в случае беседы (в которой будет, например, 30 человек), не глупо ли пользоваться подобной моделью, в которой мы будем сохранять копию каждого сообщения в XML-файле каждого участника?
Какая нагрузка будет? Сколько пользователей?
- Соц. сеть для практики, пользователей не будет, просто хочется реализовать необходимую структуру как можно более эффективно, так, как могло бы быть в реальном проекте.