metaclass: (Default)
[personal profile] metaclass
скриншот
Полудневное (поверхностное) вздрючивание айседного приложения как средствами собственно веб-морды, так и wget и редактированием конфига нашло только несколько мелких багов, типа "приложение показывает 500 Server error если указать кривой url".
Еще один мелкий баг был - редактирование конфига отчетов привело к незапускаемости rails s вообще, с диким стек-трейсом.
После исправления практически все кривые запросы напрямую к json-сервис показывали 403.
Ошибки в конфиге отчетов пишутся в лог сервиса.

Еще один крайне спорный момент: обработка параметров запроса:

      @sql.scan(/\?\w+/).each do |name|
        real_name = name[1 .. -1].downcase
        parameter = @parameters.find { |p| p.name == real_name }
        value = ActiveRecord::Base.sanitize(parameters[@parameters.index(parameter)])
        expanded_sql.sub!(name, value)
      end


[livejournal.com profile] theiced не использует препаред статементы,а вместо этого заменяет параметры регэкспом, а их значения обрабатывает ActiveRecord::Base.sanitize. Т.е. если мы верим либе - то у нас sql-injection не будет. Айсед утверждает, что у них так принято, хотя я всегда считал что единственно кошерный вариант - это препаред статементы и обработка переменных-параметров сервером.

Это решение, кстати, делает невалидными(не грузит их) такого рода sql-запросы:
select *,'?somestring' from test where stringval like ?stringval and boolval=?boolval
т.к. ?somestring оно считает параметром, хотя он очевидно не параметр, а литерал

Date: 2012-02-07 09:23 am (UTC)
From: [identity profile] artureg.livejournal.com
айсед как всегда закатывал солнце руками

Date: 2012-02-07 09:50 am (UTC)
From: [identity profile] sorhed.livejournal.com
> не использует препаред статементы,а вместо этого заменяет параметры регэкспом, а их значения обрабатывает ActiveRecord::Base.sanitize

Всегда знал, что Rails — это такой PHP-переросток.

Date: 2012-02-08 04:04 pm (UTC)
From: [identity profile] vinslivins.livejournal.com
не, это разумеется косяк, но чем плох аргумент про производительность?

Date: 2012-02-08 04:09 pm (UTC)
From: [identity profile] vinslivins.livejournal.com
ну я в том смысле, что в задаче было чтение из базы данных. скорей всего права будут только на чтение. так что даже теоретически ничему важному не сломаться. я могу себе представить "энтерпрайз", где совершенно наплевать, будет ли 0,1% ошибок в этом случае, и 5% лишней нагрузки на базу данных с этими дурацкими отчётами.

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

в этом смысле рулить будут именно бейсики и руби и пхп. что угодно кроме низкоуровневых ЯП.

Date: 2012-02-07 10:10 am (UTC)
From: [identity profile] veter-r-r.livejournal.com
В 21-м веке не пользоваться prepared statements? Такое еще осталось?

Date: 2012-02-07 10:27 am (UTC)
From: [identity profile] artureg.livejournal.com
рубискрипт хули ты хотел, всё ручками всё ручками
Edited Date: 2012-02-07 10:28 am (UTC)

Date: 2012-02-07 10:10 am (UTC)
From: [identity profile] guamoka.livejournal.com
Графоманство.

Date: 2012-02-07 10:17 am (UTC)
From: [identity profile] devnu11.livejournal.com
(iced_mode)
ви ничего не понимаете, prepared statements - анальный кал, и используют его только нищеброды с xml-ем головного мозга
(/iced_mode)
Edited Date: 2012-02-07 10:18 am (UTC)

Date: 2012-02-07 10:18 am (UTC)
From: [identity profile] falcrum.livejournal.com
Замена параметров значениями плоха ещё и потому (я бы даже сказал, в первую очередь - потому), что sql-сервер не закэширует план запроса, а каждый раз будет строить его по новой.

Date: 2012-02-07 12:23 pm (UTC)
From: [identity profile] theiced.livejournal.com
ты с плюсиком, уже хуец сосёшь или ты таки кроме того что прочитал в книжке делал замеры. я вот делал.

Date: 2012-02-07 11:10 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Неиспользование препаредов не так уж и страшно. Если в тексте запросов гарантированно вопросительные знаки не встречаются и оптимизация по быстродействию запросов не проводилась, то и фиг с ним. Хуже то, что когда одно из этих условий перестанет выполняться, то придется всё-таки переходить на параметры и переписывать весь код (тут вроде достаточно локализовано формирование запросов, но с параметрами может внезапно стать сложнее).

Date: 2012-02-07 11:29 am (UTC)
From: [identity profile] theiced.livejournal.com
можно распрасить запрос правильно - есть либы или свой парсер написать дело часа - и проигнорить литералы.

Date: 2012-02-07 11:23 am (UTC)
From: [identity profile] theiced.livejournal.com
плюсы такого подхода:

- мы видим сикль в логах. целый запрос а не анальное говно с вопросиками и вагоном параметров в жопе.

минусы:

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

------

теперь пусть дурачки пизданувшие про закаты солнца вручную (artureg, sorhed, veter_r_r, falcrum) приведут воспроизводимые замеры где препаред стэйтменты дают более 10% перфоманса или возьмут мой мозолистый хуец в свой нежный ротик и начнут сосать причмокивая.

ещё раз - можно были спокойно взять ruby-dbi и использовать те самые преп стэйтменты (код даже было бы на пару строк меньше), но оно плохо, см. выше.

Date: 2012-02-07 12:29 pm (UTC)
From: [identity profile] theiced.livejournal.com
к списку добавляем denisouru. до говноедам вам (кроме veter_r_r) пока далеко но направление взято верное.

Date: 2012-02-07 01:03 pm (UTC)
From: [identity profile] denisioru.livejournal.com
"- мы видим сикль в логах. целый запрос а не анальное говно с вопросиками и вагоном параметров в жопе."

охуенно практично. "я покупаю ВАЗ, потому что его легко чинить"

"- чуууууть больше нагрузка на базу. умные люди меряли, она незначительна."

какие люди? Где они?

Date: 2012-02-07 01:35 pm (UTC)
From: [identity profile] theiced.livejournal.com
я например. ну я как минимум умнее вас (и всех тут собравшихся наверное). ну и кроме меня меряли - там 10 процентов никогда не набиралось. даже на синтетике, в вырожденных случаях. не верите - сделайте мне тест на котором будет больше.

Date: 2012-02-07 03:17 pm (UTC)
From: [identity profile] denisioru.livejournal.com
"ну я как минимум умнее вас (и всех тут собравшихся наверное)"
бугага, тебе это мама сказала? :)))))))))))))))

Date: 2012-02-07 04:01 pm (UTC)
From: [identity profile] theiced.livejournal.com
это факты. я знаю людей умнее меня, в достаточном количестве, но вы к ним не относитесь.

Date: 2012-02-07 04:01 pm (UTC)
From: [identity profile] theiced.livejournal.com
PS. я не говорю что вы тупой, нет. просто я умнее ;]

Date: 2012-02-07 04:17 pm (UTC)
From: [identity profile] theiced.livejournal.com
замеры потерь в скорости от препэред vs эмбед будут? они же просто делаются, дерзайте.

Date: 2012-02-07 04:20 pm (UTC)
From: [identity profile] denisioru.livejournal.com
лень. Это же надо таблицы делать и наполнять.
http://www.simple-talk.com/community/blogs/philfactor/archive/2009/08/03/74227.aspx
http://www.codeproject.com/Articles/16994/Use-SQL-Parameters-to-Overcome-Ad-Hoc-Performance

вот какие-то тесты. adhoc не использую, по причине нахуй ненужности. Что такое сбор запроса из строк забыл лет 5 назад.

Date: 2012-02-07 04:23 pm (UTC)
From: [identity profile] theiced.livejournal.com
я что такое сикль забыл примерно тогда же. если кто то пишет сикль руками, то ему надо обрезать эти самые руки и яйца.

Date: 2012-02-07 04:29 pm (UTC)
From: [identity profile] theiced.livejournal.com
по ссылкам - mssqlserver говно, больше ничего не вижу. я тестировал на постгре и (приготовьте мыло для глаз) мусикле. 10% были.

ещё раз - я мог просто убрать эти 5 строк и заменить .execute на .exec_query которая понимает бинды (ака параметры). но зачем если это плохо?

Date: 2012-02-07 03:21 pm (UTC)
From: [identity profile] wildman.livejournal.com
>> мы видим сикль в логах. целый запрос а не анальное говно с вопросиками и вагоном параметров в жопе.
э... как вообще логирование происходит???
у рубёвых либ отсутствует возможность делать callback на уровне курсора/коннекшена???

Date: 2012-02-07 04:01 pm (UTC)
From: [identity profile] theiced.livejournal.com
присутствует. но оно никому не нужно.

Date: 2012-02-07 05:42 pm (UTC)
From: [identity profile] theiced.livejournal.com
на говнодб2 на синтетике получили 30%. ОК!

Date: 2012-02-07 05:44 pm (UTC)
From: [identity profile] falcrum.livejournal.com
Вопрос был "более 10%"? База уточнялась? :)

Соглашусь, что РЕАЛЬНО надо смотреть. Это да. Но... :)

Date: 2012-02-07 05:49 pm (UTC)
From: [identity profile] theiced.livejournal.com
см. ниже и давай тесты которые я смогу запустить.

Date: 2012-02-07 05:48 pm (UTC)
From: [identity profile] theiced.livejournal.com
то есть я про что - давайте мерять на нормальных базах, а не на энтерпрайзно-пионерских поделках, ок? mssql, db2 и oracle идут сначала нахуй, потом всё равно нахуй.

Date: 2012-02-07 05:57 pm (UTC)
From: [identity profile] falcrum.livejournal.com
Ну, если оракл - поделка, я уж стесняюсь придумать, как назвать всё остальное. Нащот™ "энтерпрайзной" - а олимпиада-то какая? :)

Но соскакиваешь ты интересно. :)

Date: 2012-02-07 05:24 pm (UTC)
From: [identity profile] dnnx.livejournal.com
Чёто прошлый раз ссылка не вставилась.

http://www.engineyard.com/blog/2011/sql-server-10xs-faster-with-rails-3-1/

Date: 2012-02-08 06:03 am (UTC)
From: [identity profile] zamotivator.livejournal.com
Вот за что я люблю theiced - за приятный и вежливый стиль общения :)

Date: 2012-02-08 06:30 am (UTC)
From: [identity profile] metaclass.livejournal.com
Мало того, у него еще и в тесте на шизофрению самый маленький балл из нас всех.
У меня - самый большой :)

Date: 2012-02-07 11:30 am (UTC)
From: [identity profile] theiced.livejournal.com
далее, в приличном обществе никто никогда не исполняет живой сикль. у нас есть адекватные ормы, которыми можно пользоваться. в отличие от.

Date: 2012-02-07 11:47 am (UTC)
From: [identity profile] permea-kra.livejournal.com
Ээээ. Отчет из, например, 20 Gb базы на ОРМ руби ? Ви таки делаете мне смешно.

Date: 2012-02-07 11:54 am (UTC)
From: [identity profile] theiced.livejournal.com
эммм. вот у нас сейчас (и каждый день) генерятся отчёты по 2TB базе. из руби. ормом. следующий.

Date: 2012-02-07 12:19 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
И что, они все базу через себя пропускают? как это сделано?

Date: 2012-02-07 12:32 pm (UTC)
From: [identity profile] theiced.livejournal.com
то есть если вы хотите что бы я вам вот сделал отчётик на ормах, пожалуйста. мой рейт для разовой работы $55/h на текущий момент.

Date: 2012-02-07 01:03 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
А как иначе-то? Т.е. сделать отчет не полный, в котором из 2 ТБ рабочих данных для отчета 1 МБ наверняка можно. Для полного отражения запросов из ОРМ на базу этот орм должен знать все про субдешечку. Этого даже про разработчиков СУБД сказать нельзя.

Date: 2012-02-07 01:39 pm (UTC)
From: [identity profile] theiced.livejournal.com
ормы в рубях умные. они дохуя-дохуя чего умеют. хотите посмотреть на практике - платите денюжку ;]

Не, понятно, что если ормы использовать в индо-ортуро-стайле:

Customer.find(:all).each do |c|
  c.products.each { |p| add_to_report(p, p.customer) }
end


то ничего хорошего из этого не выйдет.

Date: 2012-02-07 11:38 am (UTC)
From: [identity profile] denisioru.livejournal.com
Замена параметров регекспами - пиздец же. Школота на php.

Date: 2012-02-07 11:55 am (UTC)
From: [identity profile] theiced.livejournal.com
http://metaclass.livejournal.com/662002.html?thread=11187442&style=mine#t11187442

аргументы или присоединяйтесь к весёлой групке уже сосущей мой хуй.

как меня бесит школота типа тебя которая прочитала одну говнокнижку по говножабе, свято ей верит и думать не умеет.

Date: 2012-02-07 05:33 pm (UTC)
From: [identity profile] dnnx.livejournal.com
Ящитаю, что основной аргумент против - это запросы типа `select *,'?somestring' from test where stringval like ?stringval and boolval=?boolval`, как сказал ребе метакласс. Ну и ещё тот факт, что практически у любого, кто видит этот код, возникает вопрос "что за похапешник это писал". Это видно на примере даже этого треда.

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

Date: 2012-02-07 05:46 pm (UTC)
From: [identity profile] theiced.livejournal.com
ну кому надо - уберите те 5 строк и замените .execute(expanded_query) на .exec_query(query, 'SQL', binds)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 5th, 2025 07:41 am
Powered by Dreamwidth Studios