Меня интересует реализация следующего простого потока:
Клиент отправляет серверному процессу простое сообщение, которое сервер сохраняет. Поскольку сообщение не имеет какой-либо иерархической структуры, IMO, лучший подход - сохранить его в файле, а не в rdb.
Но я хочу выяснить, как это оптимизировать, поскольку, как я вижу, есть 2 варианта:
- Сервер отправляет клиенту 200 OK и затем сохраняет сообщение, чтобы клиент не заметил задержки
- Сервер сохраняет сообщение и затем отправляет 200OK, но затем клиент замечает накладные расходы на файловый ввод-вывод.
Я предпочитаю производительность (1), но это может привести к тому, что клиент будет думать, что все прошло нормально, хотя на самом деле сообщение никогда не сохранялось (для различных случаев ошибок).
Поэтому я подумал, могу ли я использовать nio и файлы с отображением памяти.
Но мне интересно, это хороший кандидат для использования файлов с отображением памяти? Будет ли использование файла с отображением памяти гарантировать, что, например. если процесс завершится сбоем, сообщение будет сохранено?
На мой взгляд, поток будет создавать/открывать и закрывать множество файлов, так что это хороший кандидат для файлов отображения памяти?
mmap
может быть полезен для большого количества операций ввода-вывода, но вам нужно провести сравнительный анализ, если он полезен (иногдаmmap
может замедлять работу). А в вашем случае узким местом может быть и сеть... - person Basile Starynkevitch   schedule 08.09.2013