Масштабируемость/производительность Ruby on Rails? [закрытый]

Почему lib.h включается несколько раз, когда существует параметр guard

blockquote>

Вам нужно удалить определение:

bool initialized = false;

И положите его в одном и только одном исходном файле.

Включить защитные меры, чтобы один и тот же заголовочный файл не включался в один блок перевода (TU) не в разные единицы перевода. Вы определяете переменную initialized в файле заголовка, которая включается в разные единицы перевода, а затем каждый TU имеет символ с именем initialized, который разбивает правило определения .

Как бы я определил переменную «extern» и инициализировал ее в том же файле (поскольку он используется в том же файле позже)

blockquote>

Если вы хотите, чтобы переменная для использования в том же файле, зачем это делать extern? Вам нужно использовать extern, если вы хотите использовать одну и ту же переменную в разных TU. Если вам нужно использовать его в глобальной области только в одном TU, вы должны просто положить его внутри [именного пространства имен g5] .

71
задан ryeguy 2 February 2009 в 15:53
поделиться

5 ответов

Подробно остановиться на ответе Ryan Doherty немного...

я работаю на статически типизированном языке на свое дневное задание (.NET/C#), а также Ruby как вещь стороны. До моего текущего дневного задания я был ведущим программистом для рубиновой фирмы по разработке выполнение работы для сервиса Синдикации Нью-Йорк таймс. Перед этим я работал в PHP также (хотя давным-давно).

я говорю что просто сказать это: я испытал направляющие (и в более общем плане рубин) проблемы производительности на собственном опыте, а также несколько других альтернатив. Как Ryan говорит, Вы не собираетесь иметь его, автоматически масштабируются для Вас. Это берет работу и огромные суммы терпения найти Ваши узкие места.

значительное большинство А производительности выходит, мы видели от других, и даже мы имели дело с медленными запросами выполнения в нашем уровне ORM. Мы пошли от Rails/ActiveRecord до Rails/DataMapper и наконец к Merb/DM, каждое повторение, получив больше скорости просто из-за базовых платформ.

Кэширование делает удивительные чудеса для производительности. К сожалению, мы не могли кэшировать наши данные. Наш кэш эффективно делался бы недействительным каждые пять минут самое большее. Почти каждый бит нашего сайта был динамичным. Таким образом, если/когда Вы не можете сделать этого, возможно, можно учиться на нашем опыте.

Мы должны были закончить тем серьезно, что точно настроили наши индексы базы данных, удостоверившись, что наши запросы не делали очень глупых вещей, удостоверяясь, что мы не выполняли больше запросов, чем было абсолютно необходимо, и т.д. Когда я говорю "очень глупые вещи", я имею в виду 1 + N проблема запроса...

#1 query
Dog.find(:all).each do |dog|
   #N queries
   dog.owner.siblings.each do |sibling|
      #N queries per above N query!!
      sibling.pets.each do |pet|
         #Do something here
      end
   end
end

DataMapper является отличным способом решить вышеупомянутую проблему (там , № 1 + N проблемы с ним ), но еще лучший путь состоит в том, чтобы использовать Ваш мозг и прекратить делать запросы как этот :D При необходимости в необработанной производительности большинство уровней ORM легко не обработает чрезвычайно пользовательские запросы, таким образом, Вы могли бы также вручить, пишут им.

Мы также сделали разумные вещи. Мы купили раскормленный сервер для нашей растущей базы данных и переместили ее прочь на свое собственное специализированное поле. Мы также должны были сделать ТОННЫ обработки и данных, импортирующих постоянно. Мы переместили нашу обработку прочь на собственное поле также. Мы также прекратили загружать наш весь долбаный стек только для наших утилит импорта данных. Мы со вкусом загрузили только, в чем мы абсолютно нуждались (таким образом сокращение памяти наверху!).

, Если Вы не можете сказать уже... обычно, когда дело доходит до ruby/rails/merb, необходимо масштабироваться , бросив аппаратные средства в проблему. Но в конце, аппаратные средства являются дешевыми; хотя это не оправдание за дрянной код! :D

И даже с этими трудностями, я лично никогда не запускал бы проекты в другой платформе, если я могу помочь ей. Я люблю язык, и постоянно узнавайте больше о нем каждый день. Это - что-то, что я не получаю от C#, хотя C# быстрее.

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

В конце, это - все о том, что Вы хотите жить, вдохнуть, поесть, и сон в изо дня в день когда дело доходит до выбора Вашей платформы. Если Вам нравится образ мыслей Microsoft, пойдите.NET. Если Вы хотите открытый исходный код, но все еще хотите структуру, попробуйте Java. Если Вы хотите иметь динамический язык и все еще иметь немного больше структуры, чем рубин, попробуйте Python. И если Вы хотите элегантность, попробуйте Ruby (я шучу, я шучу... существует много других изящных языков, которые отвечают всем требованиям. Не пытаясь запустить войну пламени :D)

Черт, судите их всех! Я склонен соглашаться с ответами выше того волнения по поводу оптимизации, рано не причина, Вы должны или не должны выбирать платформу, но я не соглашаюсь, что это - их единственный ответ.

Так короче говоря, да существуют трудности, которые необходимо преодолеть, но элегантность языка, по моему скромному мнению, явно перевешивает те недостатки.

Извините за роман, но я был туда и обратно с проблемами производительности. Это может быть преодоленным. Не позволяйте этому отпугнуть Вас.

160
ответ дан Keith Hanson 7 November 2019 в 08:38
поделиться

RoR используется с большим количеством огромных веб-сайтов, но как с любой язык или платформа, он берет хорошую архитектуру (масштабирование дб, кэширование, настройка, и т.д.) для масштабирования к большим количествам пользователей.

было несколько незначительных изменений к RoR, чтобы помочь масштабироваться, но не ожидают, что это масштабируется волшебно для Вас. Каждый веб-сайт имеет различные проблемы масштабирования, таким образом, необходимо будет вставить некоторую работу, чтобы заставить его масштабироваться.

27
ответ дан Ryan Doherty 7 November 2019 в 08:38
поделиться

То, что, ломается к с RoR, то, что, если Вы не находитесь в лучших 100 Alexa, у Вас не будет проблем масштабируемости. У Вас будет больше проблем с устойчивостью на общем хостинге, если Вы не сможете сжать Phusion, Пассажира или Полукровку.

6
ответ дан phresus 7 November 2019 в 08:38
поделиться

Возьмите некоторое время для рассмотрения проблем, люди Твиттера должны были иметь дело с, затем спросить себя, если Ваше приложение испытывает необходимость для масштабирования к тому уровню.

Затем сборка это в направляющих так или иначе, потому что Вы знаете, это имеет смысл. Если Вы доберетесь до объемов уровня Твиттера затем, то Вы будете в счастливом положении рассматривания возможностей оптимизации производительности. По крайней мере, Вы будете применять их на хорошем языке!

5
ответ дан Mike Woodhouse 7 November 2019 в 08:38
поделиться

Разработайте в технологии, которая собирается дать Вашему проекту лучшие шансы на успех - быстрый для разработки в, легкая отладка, простое развертывание, хорошие инструменты, Вы очень хорошо знаете его (если точка не должна учить новый язык), и т.д.

, Если Вы получаете десятки миллиона uniques месяц, можно всегда нанимать у нескольких человек и переписывать в другой технологии, если Вы должны как...

... Вы будете грабли - луг в кэш (извините - не мог сопротивляться!!)

16
ответ дан RichH 7 November 2019 в 08:38
поделиться
Другие вопросы по тегам:

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