Редис значительно удобнее в обслуживании, чем ramfs. Вы можете сделать нормальную репликацию данных и при старте/стопе сервера меньше возни. Я думаю, что чтение из редиса будет быстрее особенно, если нужно вычитывать сразу несколько фаилов. Это можно делать одной транзакцией (MULTI запрос в редис). Посмотрите на redis.io/topics/benchmarks можно на этом же железе запустить и посмотреть какую скорость выдаст редис
mongodb/elasticsearch
Проще структура, просто делаете набор атрибутов ( кол-во комнат, координаты, и т.д). Дальше в elasticsearch и оттуда вытаскиваете facet/aggregation. Можно вообще сразу данные в elasticsearch хранить, а не только индекс.
В mysql такой встроенной функциональности нет.
Теоритически можно подвесить триггер, который на вставку будет проверять размер базы через information_schema таблицу и удалять от туда записи. Но есть несколько минусов
1) При использовании innodb вы не сможете получить точный размер таблицы
2) Очередная вставка может вызвать удаление старых данных и если у вас лог пишется не асинхронно, то вызовет заметное притормаживание остальных операций.
Более правильный вариант это сделать отдельные таблицы по году+месяцу с engine=Archive и дропать старые по крону раз в день. Проверять общий размер архивных таблиц и если что — грохать самую старую из них
1) Таблица с данными. Date, ID_объекта, ID_параметра, Значение_Параметра.
2) Таблица Current аналогичная первой, только без дат, обновление триггером, или пересчет по крону.
3) Таблицу с измерениями разбиваем по месяцам, engine=ARCHIVE
Если сервер открывает на каждый запрос новое соединение, то боюсь будут проблемы. Если сервер использует connection pooling держит 5 коннектов, и запросы разбрасывает по ним — то хватит.
Вынести чтение для удаленных юзверей на slave сервер (может размещаться на той же железяке, только использовать отдельный hdd), а запись на мастер. Разделить чтение и запись можно с помощью mysql proxy forge.mysql.com/wiki/MySQL_Proxy_RW_Splitting.