Что из этих технологий для чего используется?

  1. memcache
  2. sphinx
  3. redis
  4. mongodb


Поделитесь опытом.
Для чего используется каждая из этих технологий для максимального достижения производительности сайта?
Для примера представим проект вида fl.ru, но для большей сложности пусть там еще будут чаты как в вк.
По умолчанию проект на php mysql.
Какую технологию куда бы вы прикрутили?
Если я что то упустил в списке, то дополните.
  • Вопрос задан
  • 3263 просмотра
Пригласить эксперта
Ответы на вопрос 7
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Оукей. давайте возьмем ваш пример с fl.ru + чаты.

mongodb - хипстерская база данных. Для проекта типа fl.ru я бы пожалуй не использовал оную (не потому что монга отстой а потому что я лично не вижу в использовании оной смысла в контексте проекта типа fl.ru. Нам не нужен шардинг, реплекация реализуется нормально на любой нормальной RDBS, документоориентированность не нужна, хотя при грамотном подходе можно было бы реализовать неплохие агрегированные коллекции и оптипизировать селекты... Для себя не нашел у монги ни одного плюса перед RDBS типа PostgreSQL). В любом случае если вы не оставляете выбор - тут у нас будут храниться все данные. Придется потратить время на то что бы избавиться от желания что-то заджойнить и реализовать map/reduc-ы для обновления связанных коллекций. Но зато это будет так по хипстерски!

То есть если у вас есть куча однотипных запросов с кучей джойнов данные для которых обновляются редко а выборки происходят часто, то тогда можно вооружиться монгой а делать коллекции как агрегации этих выборок. Если вы вставляете референсы и пытаетесь эмитировать джойны в монге то значит вы сделали не правильный выбор основного хранилища данных). Правда денормализовать данные можно и с RDBS....

sphinx - поисковой индекс. То есть если мы должны реализовать вменяемый поиск (например по описанию вакансии) - то стоит его заюзать. Сфинкс не самый дружелюбный зато один из самых быстрых поисковых индексов. Хорошо интегрируется с MySQL и подобными и если сравнивать с ElasticSearch из коробки чуть лучше дружит с русским языком. Но опять же у эластики свои плюшки. Некоторые оной заменяют монгу так как по большинству фич в плане хранилища данных они совпадают.

redis - мы там вроде чатик делали. Помимо того что redis это хорошее key-value in-memory хранилище, которое к тому же может обеспечить нам надежность хранения данных (мэпится на файловую систему еще), оно так же поддерживает pub/sub. То есть чисто теоритически мы можем не добавлять в стэк штуки типа ZeroMQ и прочие *MQ для реализации авторизации и связи приложения чатика и основного приложения (вдруг у нас чатик будет написан на go/node.js/erlang).

memcache - вот тут стоит подумать нужен ли он если у нас есть редиска. Раньше для жирного кеша выбор был очевиден - memcached, так как reddis в те времена не поддерживал кластеризацию. Сейчас же по возможностям редиска далеко впереди. Так что даже то что memcached чуточку быстрее (но жрет больше памяти и не поддерживает авторизацию к примеру из коробки) не должно стать поводом для использования оного. Но я если честно redis в кластерах не использовал и ничего говорить не могу, а memcached испытан годами.
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Про redis, memcache и до кучи очереди www.slideshare.net/mobile/lenvendo/ss-41242835?qid...
Сфинкс и elasticsearch - поиск как общий, так и параметризованный.
Mongodb и остальные - краткие отличия и кейсы kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
Конкретно про монгу я не знаю нагруженных проектов кто ее пользует
Чатики хорошо делать на вебсокетах - можно извратиться на php, можно взять node.js с socket.io, можно какой нибудь erlang
Ответ написан
opium
@opium
Просто люблю качественно работать
очевидно же все
редис и мемкеш для кеша
сфинкс для поиска
монго для базы данных
Ответ написан
Комментировать
memcache, redis и mongodb использовать вместе - это какой-то оверхед нереальный. Зачем?
Так или иначе их используют примерно для одного и того же. Ладо бы еще memcache+[redis|mongodb], но вместе - как-то глупо. Так выбирать надо конкретно под задачу. Я бы выбрал redis, просто из-за того, что с монго у меня нет опыта и упомянулись чатики - нет ничего лучше из этого для чатиков чем redis.
Так же можно заюзать его для хранения сессионных данных (тут валотильные ключи в помощь) и данных пользователя. Но например хранить задачи лучше было бы в обычно базе (мускуле) или возможно в mongo.
Если речь только о производительности и носкул нужен для кэширования - тогда memcache
sphinx - в данном случае это найди лишнее слово. sphinx - это поисковый движок. Как его можно использовать для повышения производительности?
Ответ написан
Комментировать
@Levhav
Возьмусь за разработку проектов любой сложности.
Что касается технологий которые вы перечислили вам уже достаточно хорошо описали.
А вот для чатов перечисленные технологии (memcache, sphinx, redis, mongodb) слабо подходят.
Для организации чата на сайте лучше использовать comet сервер
Ответ написан
Комментировать
icoz
@icoz
Послушайте Радио-Т (radio-t.com) - там четко показано отношение к php и mysql
:)
Ответ написан
@asArtem
MongoDB - для хранения всех данных, которым не нужны транзакции. На самом деле это 90% случаев (адреса, инфа по аккаунтам, детали продуктов). Исключение - фин. платежи, когда нужны транзакции и ACID. Правильно использовать 2 базы.
Про остальное написали уже выше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы