skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.

Выбор языка и БД для высоконагруженного веб-приложения?

Вопрос от моего друга igla (не хватило кармы):
Какой из следующих языков программирования: PHP, Ruby, Perl или Python является самым быстрым и в связке с какой БД (MySQL, PostgreSQL, FlockDB...) лучше подходит для написания веб приложений, ориентированных изначально на высокую нагруженность? Конечно, при необходимости могут быть использованы различные системы кеширования и дополнительные фреймворки.
  • Вопрос задан
  • 15836 просмотров
Пригласить эксперта
Ответы на вопрос 18
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
Имхо, тут больше роль играет сам программист и аппаратные вещи, например, ширина канала.
Если программист не оптимизирует запросы и пишет индусский код, то на любом языке будет фэйл.

Важно думать при разработке о нагрузках и правильно писать код, имхо
Ответ написан
datacompboy
@datacompboy
Programmer/Sysadmin
Java и только Java. Кластер готовить заранее, вебсферу тоже.
Ответ написан
atomlib
@atomlib
Это тема для холивара, а не вопрос с однозначным ответом.
Ответ написан
Horse
@Horse
Если так что-бы эпичную производительность иметь — c++ + key-value (тоже с++) бд (собственной реализации). Если нет — берите php, только потому, что он нынче самый популрярный для этих целях.

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

P.S. Что-бы вы не делали, какой бы язык не выбрали (в данном контексте) — не ошибетесь.
Ответ написан
Комментировать
@gro
В «веб приложениях, ориентированных изначально на высокую нагруженность» важны структуры хренения данных и архитектура связей между компонентами системы. Скорость исполнения конструкций языка, выполняющего роль прослойки между этими компонентами, никакой роли здесь не играет.
Ответ написан
Комментировать
@dborovikov
Если у вас проект не вычисляет никакой сложной арифметики от производительности реализации языка результат зависит мало. Успех зависит от использования эффективных стратегий работы с данными. В том числе кэширования и неблокирующего ввода-вывода. Таким образом, я бы на вашем месте смотрел на Python. Можно еще Ruby.

Что касается БД: вот так с плеча рубить я бы не стал и отказываться от РСУБД не стал бы. О том, что NoSQL решает проблему масштабируемости я верю с трудом. Шардинг все же нужно делать ручками, разрабатывая всю нужную инфраструктуру под него. Но NoSQL вполне можно использовать как дополнительное хранилище, что бы уменьшить нагрузку.

Итого: Python (Tornado, Gevent) + Postgresql (для снижение нагрузки на чтение можно использовать несколько read-only реплик), Redis.

Вместо Postgres можно MySQL, но это уже скорее дело личное.
Ответ написан
Комментировать
@smartly
Больше зависит от алгоритмов и структур данных, а не от языка.
Ответ написан
Комментировать
@bRUtality
highload developer
БД я бы взял postgres. Язык — какой-нибудь компилируемый. Если предполагается действительно высокая нагрузка, то erlang.
Ответ написан
Комментировать
@phasma
Си, самый обычный со своей БД.
Ответ написан
Комментировать
MpaK999
@MpaK999
Буду!
Возьмите любой язык и любую БД подходящую под задачу и кэшируйте, кэшируйте и кэшируйте :)
Ответ написан
Foror
@Foror
Графоман
Я бы выбирал между php и python, при этом производительность любого из них не особо важна. Важно совсем другое: архитектура проекта. А это кеширование, кластер, база данных, распределитель нагрузки и т.д.

А вообще, java мне больше нравится, здесь уже из коробки есть кластеры и другие приятные штуки :)
Ответ написан
Комментировать
int02h
@int02h
PHP + MySQL +
PHP — потому что при желании (для повышения производительности) его можно будет странслировать в С++, да и выбор фреймворков впечатляет.
А к MySQL можно прикрутить Sphinx.
Ответ написан
Какой из следующих языков программирования: PHP, Ruby, Perl или Python является самым быстрым

По моему опыту (Perl в него не входил, насчёт него экстраполирую) они все в одной весовой категории, на одних задачах один покажет себя быстрее, на других другой, особенно если пишет для одного теста на всех языках один программист, хорошо знающий один язык и поверхностно конкурентов.

Выбор надо начинать, имхо, с архитектуры, а уж потом искать оптимальные средства для её реализации.
Ответ написан
Комментировать
donnerjack13589
@donnerjack13589
io.js core developer
node.js+cluster+redis+mongodb.

Использовать PubSub redis для нотификации остальных node.js instances об изменениях в базе, если нужен реалтайм.
Cluster — это как gunicorn для python
Ответ написан
Комментировать
shai_xylyd
@shai_xylyd
Не думаю, что в таких жестких рамках есть пространство для выбора; все (±) одинаково плохо/хорошо. Нужно отталкиваться от конкретных задач (объемов данных и запросов).

Я для своего проекта выбрал Java (Play Framework) + Riak. Вот тут на C/Erlang написали lionet.livejournal.com/88113.html
Ответ написан
Комментировать
@licvidator
Perl + Memcached :-)
Ответ написан
Комментировать
newpdv
@newpdv
Web-devekioer
Если сильно высоконагруженный, то посмотрите на старших товарищей (соц.сети).
Как вариант: Java + MS SQL
Ответ написан
Комментировать
@polymorphs
Зависит от характера нагрузки. Если в коде есть сложные математические вычисления, занимающие основное время при отработке запроса то можно вынести их в подгружаемую динамическую библиотеку. Такая задача возникла при написании инженерного сайта для одной нефтяной компании. Один запрос на php считался десяток секунд, с динамической библиотекой расчет проходил в сотни раз быстрее.
Наверное в других веб проектах может возникнуть подобная проблема.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы