Alexey Mishurovskiy
Inferno solutions
Да их знаю. есть проблема.
Alexey Mishurovskiy
у них нет VLAN
Alexey Mishurovskiy
то есть сделав реплику посгреса она будет гоняться через инет
Юра
Почему через инет
Alexey Mishurovskiy
Ну как мне сказала поддержка VLAN у них нет. и единственное решение поставить выделенные сервера
Alexey Mishurovskiy
Alexey Mishurovskiy
второго интерфейса нет
Katulos
Katulos
Как это в швабодке нет vlan?
Юра
Ну трафик всеравно не будет ходить в инет
Юра
Пойдет через их маршрутизатор в их же ДЦ
Alexey Mishurovskiy
Есть такое дерево сущностей: Агент Клиент1 Пост 1 Коммент1 Соответственно у Агента может быть много Клиентов, у Клиентов может быть много постов, у Постов может быть много комментов Задача вывести для Агента таблицу: Клиент, Кол-во Постов, Кол-во комментов и чтобы по кол-ву постов и комментов можно было сортировать.
Alexey Mishurovskiy
у меня мысль одна - делать вьюху
Сергей
В чем проблема написать sql-запрос?
Иван
или два
Юра
Я бы добавил агрегационную таблицу которую обновлял кроном
Юра
Ну или два запроса
Юра
У доктрины есть фция SIZE
Юра
Может можно написать order by SIZE(agent.comments)
Юра
Только это для каждого агента будет делаться подзапрос наверное
Andrei
Вечера юмора в канале симфони)
Юра
Удачи
Рабочее решение если нужно много делать селектов и мало апдейтов и не важна супер констистентость
Andrey
Ага ага
Юра
Что ага
Alexey Mishurovskiy
Alexey Mishurovskiy
Ага ага
А если что то конструктивное?!
Alexey Mishurovskiy
Сергей
Ну так напиши)))
ну если в таблицах не по миллиону записей, то можно просто всё заджоинить, сгруппировать по клиенту и отсортировать.
Alexey Mishurovskiy
Парни, в чем проблема, давайте select from..
Alexey Mishurovskiy
Как говорится на словах все львы толстые
Alexey Mishurovskiy
Для меня вот проблема, она чё бы не задавал вопрос
Andrey
Ну а масштабы хоть какие? Ну типа сколько может быть Клиентов, постов комментов у одного Агента? А то вдруг там по 100к постов и 1кк комментов и там тогда запрос точно никак не поможет
Юра
Ок а если там пару миллионов коментов предлагаете каждый раз делать груп бай каунт на всей таблице?
Andrei
так пока никто не писал про миллионы комментов то) Задача поставлена в исходной формулировке как тест на собесе на знание SQL для джуна)
Andrey
Ок а если там пару миллионов коментов предлагаете каждый раз делать груп бай каунт на всей таблице?
Евентами в коде обновлять таблицу со счётчиками... Или тригерры или ещё что то вроде редиса...
Юра
Прямая дорога к рассинхрону
Andrey
Инкремент это атомарная операция - никакого рассинхрона
Иван
Прямая дорога к рассинхрону
Да и хрен с ним, если это не деньги.
Andrey
Даже если вдруг рассинхрон - разве это важно?
Andrey
Раз в сутки пересчитай точно и всё
Andrei
давайте пофантазируем. Если у автора действительно там много комментов то 1) Если это отчет в какой нить интерпрайз системе, то скорее всего его редко юзают и вполне пойдет sql с группировкой. 2) Если это какая то страничка со сводными данными на дашборде - тупо закешируйте ответ, и остатется 1% случаев когда действительно нужно денормализовать, например в ту же материальную вьюху
Юра
Кеширование чуток сложнек реализовать чем крон с insert into select on duplicate update
Юра
Что по сути и есть кеширование на стороне бд
Alexey Mishurovskiy
записей не миллиард но и не 100 штук
Andrei
ну надо еще учесть планируемую нагрузку на метод
Andrey
Кароч... Задачка эта делается как проще и быстрее... А потом когда начнёт тупить - переписывается нормально... На фиг этот оверинжинеринг...
Andrey
Потом можно запилить хоть на отдельном микросервисе))
Юра
Вынести все в клауд на бесконечные базы с репликацией между континентами
Alexey Mishurovskiy
Короче решил делать предагрегаты, еще добавлю дату туда. буду хранить кол-во по дням, чтобы удобно было строить потом отчеты день\неделя, месяц и т.д.
Andrei
А вы точно не занимаетесь преждевременной оптимизацией?
Andrei
Я к тому что простой и надежный как топор запрос с агрегацией, даже с сотнями записей на группу, при правильных индексах будет выполняться за десятые доли секунды. Если у вас там нагрузка на метод не десятки и сотни rps, то стоит ли городить огород?
Alexey Mishurovskiy
Ну скажем так запрос в любом случае делать и он будет одинаковый фактически и для прямого вывода и для предагрегата, так что начну с запроса, а дальше видно будет как работает. благо можно наполнить тестовыми данными в любом количестке
Katulos
Джентльмены, пытаюсь с помощью https://symfony.com/doc/current/components/dom_crawler.html распарсить таблицу. Умеет ли данный компонент выбрать определенное количество элементов, а не всю таблицу? Если да, то каким образом?
Katulos
Мне, например нужно первые 200 строк, а их более тысячи
Alexander
В xpath есть метод position() ->filterXpath(table > tr[position() < 200]); Как то так
Alexander
Но в целом не вижу проблемы получить все элементы и дальше отрезать или отфильтровать нужное кол-во
Andrey
Оно довольно таки тяжелое, не хотелось бы забивать память
Тогда лучше вообще отказаться от DomCrawler
Andrey
Это ручник
Юра
DomXml
Alexander
Альтернативы?
Миллион их. Память не хочется забивать потому что 10000rpm на бекенд или по идеологическим причинам? По моему опыту домкраулеры в один поток работают.
Юра
Например так
Andrey
Ну это вроде как не из коробки и не на всяком хостинге заведётся... А так то конечно можно было бы как и многопоточность на CURL
Andrey
Я кстати ещё ниразу не встречал "многопоточного дом-краулера" на пыхе
atcq (Алексей)
Я кстати ещё ниразу не встречал "многопоточного дом-краулера" на пыхе
обычно проще запустить несколько обработчиков очереди
Andrey
обычно проще запустить несколько обработчиков очереди
Ну это понятно, я собственно так и делал)
Юра
Я даже штуку написал
Юра
https://github.com/zim32/workman
Vlad
Добрый день, кто юзает спецификации\критерии для получения данных из репозитория. Покажите какой у вас интерфейс спеки\критерия.
Alexander
Симфони секьюрити держит пользователя в сессии, и при рефреше (на каждый запрос) дергает его из базы для проверки. Если держать сессии и remeber_me в базе, получается запрос сессии, из сессии достаем юзера и еще раз идем в базу за юзером. А при первом входе еще и remeber_me из базы получается и там тоже рефрешится юзер. Втф? Как это правильно организовать все?