Size: a a a

2021 January 14

W

Warstone in Modern::Perl
Александр Поволоцкий
Если мы занимаемся пережимом аудио/видео/картинок, например, то нужно просто убирать в XS само пережимало. Нагрузка, вносимая разборщиком/сборщиком http, роутером и прочим - в целом пренебрежимо мала
Нет. Это не конструктивно. Человек непонятно что в middleware засовывает. Непонятно что решает, но постоянно подгоняет задачу...

Давайте разберемся middleware в вашем понимании что это?
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
Нет. Это не конструктивно. Человек непонятно что в middleware засовывает. Непонятно что решает, но постоянно подгоняет задачу...

Давайте разберемся middleware в вашем понимании что это?
Да, я в одном месте мазнул границей. БД в middleware, разумеется, включаться не должна - но БД, если это наша БД, берет ресурсы из того же источника, что middleware
источник

W

Warstone in Modern::Perl
Так... Что из этого middleware по вашему? WebServer, разборка HTTP, разборка JSON, проверка входных JSON данных по JSON схеме, UserAgent для внешних запросов на чужие сервера, DB клиент, ORM, шаблонизатор... Вроде все написал...
источник

АП

Александр Поволоцкий... in Modern::Perl
Ну вот это все в целом миддл и есть. То, что обеспечивает связь между приложениями, не знающими ничего про веб, и веб-клиентами, не знающими ничего про приложения. Исключая веб-сервер, который для бэкенда является фронтендом
источник

W

Warstone in Modern::Perl
Отлично.. Этого набора достаточно чтобы именно от отжирал 90% времени. Видел не один такой проект.
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
Отлично.. Этого набора достаточно чтобы именно от отжирал 90% времени. Видел не один такой проект.
И что он делал? Там была какая-то реально объективно сложная логика или просто ркуи у архитектора и разработчика?
источник

W

Warstone in Modern::Perl
Скажем так... 50/50...
источник

W

Warstone in Modern::Perl
Ну потому что нету черного и белого
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
Скажем так... 50/50...
Замена в плохо написанном софте PP на XS приводит, как правило, к тому, что программа быстрее входит в бесконечный цикл.  Я, например, в целом не вижу проблем от DBIx::Class потому, что все более-менее тяжелые и нетривиальные запросы обернуты во view - заодно нагляднее получается.
источник

W

Warstone in Modern::Perl
Александр Поволоцкий
Замена в плохо написанном софте PP на XS приводит, как правило, к тому, что программа быстрее входит в бесконечный цикл.  Я, например, в целом не вижу проблем от DBIx::Class потому, что все более-менее тяжелые и нетривиальные запросы обернуты во view - заодно нагляднее получается.
Ну то что вы не видите проблем в DBIx::Class просто говорит что характер вашей работы не содержит никаких ресурсоемких задач которые должны работать быстрее. Обычно говорят что у вас нету хайлоада, но этот термин так испоганили что сейчас это слово больше bullshit-маркер. То есть вы не работаете плотно с DBIx::Class и в вашей практике не было проблем, например, вытащить через него 100К строк с пост обработкой.

Например в свое время я проводил сравнение - как можно быстрее вытащить данные из PostgreSQL в csv таблицу... Шло в ход все... Результат меня удивил... Перенос коннекта к БД в Си и работа с данными там-же ускоряет выполнение запроса в 5 раз. Это оверхед Перла. Фактически большую часть времени выполнения запроса на получение данных уходит на двойную трансформацию данных: В мир перла и потом в фаил. Это простейший пример, который, кстати, разбивает ваше утверждение что вы тупите в базе. Вы можете тупить в преобразовании в Перле. И это при том что XS часть DBD::Pg написана довольно хорошо. Я туда лазил и читал все это.
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
Ну то что вы не видите проблем в DBIx::Class просто говорит что характер вашей работы не содержит никаких ресурсоемких задач которые должны работать быстрее. Обычно говорят что у вас нету хайлоада, но этот термин так испоганили что сейчас это слово больше bullshit-маркер. То есть вы не работаете плотно с DBIx::Class и в вашей практике не было проблем, например, вытащить через него 100К строк с пост обработкой.

Например в свое время я проводил сравнение - как можно быстрее вытащить данные из PostgreSQL в csv таблицу... Шло в ход все... Результат меня удивил... Перенос коннекта к БД в Си и работа с данными там-же ускоряет выполнение запроса в 5 раз. Это оверхед Перла. Фактически большую часть времени выполнения запроса на получение данных уходит на двойную трансформацию данных: В мир перла и потом в фаил. Это простейший пример, который, кстати, разбивает ваше утверждение что вы тупите в базе. Вы можете тупить в преобразовании в Перле. И это при том что XS часть DBD::Pg написана довольно хорошо. Я туда лазил и читал все это.
100к строк и в csv - да, тут имеет глубочайший смысл переливать в CSV средствами БД, благо она умеет.
Если я вижу, что какая-то страница начинает выполняться недопустимо долго, я начинаю профилировать  с SQL-запроса, и в моей практике этого профилирования (один раз, да, три дня рефакторил наскоро накиданное когда-то view) всегда хватало.
Еще раз, для закрепления:
В большинстве случаев, усилия по оптимизации следует уносить с миддла на БД. Потому, что потребление мидла соотносится с потреблением БД где-то как 1:5-1:10. Соответственно получается и плечо эффективности. Ускорение запроса к БД на 10% ускоряет обработку ответа на 9%, ускорение мидла на 10% - на 1%. Да, бывают случаи, когда идет борьба за каждую миллисекунду запроса и заливка железом - не ответ, но в целом - совершенствуйте БД, и будет счастье.
источник

АП

Александр Поволоцкий... in Modern::Perl
Опять же, оптимизация алгоритма почти всегда дает лучший результат, чем PP->XS
источник

W

Warstone in Modern::Perl
Мда... Хайлоада у вас небыло. Бд самая хоеновая сущность в плане масштабирования. Пихать логику в бд - к невероятным проблемам в дальнейшим, когда проект "выстрелит".
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
Мда... Хайлоада у вас небыло. Бд самая хоеновая сущность в плане масштабирования. Пихать логику в бд - к невероятным проблемам в дальнейшим, когда проект "выстрелит".
А я говорил про масштабирование? Я говорил про оптимизацию. Правильно разложенные индексы, правильно составленный запрос и тому подобные вещи могут запросто изменить скорость запроса в 5-10 раз. Не говоря уже про замену двух десятков запросов правильно сформулированным одним.
Если вы считаете, что view - это "пихать логику в БД", то непонятно, почему вы используете что-то кроме KVS.
источник

W

Warstone in Modern::Perl
Александр Поволоцкий
А я говорил про масштабирование? Я говорил про оптимизацию. Правильно разложенные индексы, правильно составленный запрос и тому подобные вещи могут запросто изменить скорость запроса в 5-10 раз. Не говоря уже про замену двух десятков запросов правильно сформулированным одним.
Если вы считаете, что view - это "пихать логику в БД", то непонятно, почему вы используете что-то кроме KVS.
Потому что деньги надо хранить. А так да... База данных для нас практически KVS
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
Потому что деньги надо хранить. А так да... База данных для нас практически KVS
... взять из KVS 100k строчек, потом уже у себя их сортировать, обрабатывать и делать типа SQL своими силами?.. тоже подход
источник

W

Warstone in Modern::Perl
Александр Поволоцкий
... взять из KVS 100k строчек, потом уже у себя их сортировать, обрабатывать и делать типа SQL своими силами?.. тоже подход
И делать это на старте приложения, а потом практически не обращаться к БД
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
И делать это на старте приложения, а потом практически не обращаться к БД
Не видел вашей задачи, но не уверен, что это не из серии "создать трудности и героически их преодолеть"
источник
2021 January 15

W

Warstone in Modern::Perl
Ну да... Это довольно специфичная именно для нас задача.
источник

АП

Александр Поволоцкий... in Modern::Perl
Warstone
Ну да... Это довольно специфичная именно для нас задача.
Мне доводилось видеть результат работы некоего программиста - он выгружал из mysql данные, для ускорения работы клал их на файл на рамдиске (под *NIX!), нагородил чертову прорву оптимизаций, под нагрузкой встало колом. Полчаса вдумчивого сидения над SQL-запросом (молодой был, глупый, там на 30 секунд работы) - и без всех оптимизаций, без рамдисков и прочего заработало с нужной скоростью, всего-то раз в 50 быстрее
источник