Почему такая разница между объемом использования озу для хранения данных redis и nodejs?
Сегодня сделал эксперимент на серверной части приложения, написанного на ноде.
В работающем приложении при запуске очистил базу и вставил 500т строковых уникальных записей в REDIS длиной 58-60 символов. В итоге +1500мб отожрало озу по сравнению с обычным запуском приложения. Запускал несколько раз как со вставкой так и без.
В этом же приложении просто создал объект и добавил в него те же 500т свойств по тем же самым ключам. через setInterval с задержкой 1сек в консоль выбрасывал произвольное значение, чтобы сборщик мусора не удалил объект как неиспользуемый. В итоге +80мб расхода озу.
Перед экспериментом я предполагал, что нода более бережно расходует память. Но не думал, что редис такой прожорливый. вышло 3кб на одну запись. Может я что-то не так делал?
Можно предположить, что связано с некой фрагментацией кучи в случае с node.js. В тоже время Redis по-умолчанию отбирает себе памяти по-максимуму; там же можно играться со свойством maxmemory в конфиге redis.conf.
Итог ? Если еще не уступает по скорости при выборке данных ?
Значит ??? когда умеешь хорошо организовать node.js сервер можешь обходиться без Redis.
*учесть надо возможность падений. Авто релоад. Два сервера.
Но это не замена. так как Redis из коробки или с библиотеками поддерживают много фреймворков на PHP, Python, Ruby и так далее. есть реализации библиотек на Java и C#.
Pantene742, вывод прост, надо пробовать забивать гвозди плоскогубцами. Может они и не так хорошо подходят, как молоток, но рука устает меньше :) Для такой тривиальной задачи, как сохранение пар ключ-значение можно смело поднимать отдельное nodejs приложение с минимальным АПИ
frontendo, Но здесь ничего странного. Да при юзание одного только Node.js Redis не нужен. А если в паре с
PHP, Python....итд. Редис очень кстати. Там ведь и защита еще настраивается.