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