Лучше использовать PostgreSQL или MySQL для хранения, но и использовать NoSQl вам никто не запрещает, в нем нужно не хранить, а использовать его как кеш
На чем писать?
На чем умеете на том и пишите
Структура таблиц примерно такая
chat
id|from_user|to_user
message
id|chat_id|date
content
id|message_id|text
attached
id|message_id|path|ext