Maxim Kainov
Самое важное новшество это объявление полей класса в конструкторе ))
netspike
и не нужно
и никаких пидорских языков )))
Kirill
Kirill
Aleksandr
https://wiki.php.net/rfc/nullsafe_operator
A.D.🈴
Юра
В дарте ещё.есть крутая фишка. Чейн оператор
Юра
Юра
Не надо this возвращать
Unreal
Угу, самый сладенький язык
Даже Котлин по сахару отстаёт
std::mechanicus
только Enterprise Java, только хардкор
Alexey Mishurovskiy
Всем привет ) у нас тут с коллегой по поводу доктрины спор возник, он говорит, что ему никто из симфонистов не может ответить на вопрос:
как вытащить связанную коллекцию из 100+ itemов с N связями за 1+N запросов. Доктрина умеет только 1 + N*100+ или angry load через join и дичайшую деградацию выборки при one-to-many или не дай бог many-to-many
Aleksandr
а почему нельзя сделать обычный запрос, даже если билдер именно так не может?
Alexey Mishurovskiy
Aleksandr
уйй говно
Alexey Mishurovskiy
уйй говно
я в целом согласен, но не очень действует как аргумент
Alexey Mishurovskiy
зы, не пытаюсь развести холивар, в основном претензия к доктрине
std::mechanicus
а давайте холивар разведём
std::mechanicus
а то скучно
Alexey Mishurovskiy
Вот еще
Еще кстати к подходу доктрины... А как вы боретесь с дедлоками? частый вопрос... а нахера мне с ними бороться если у меня нет 10к+ rps к БД и они не возникают
Слава
Aleksandr
тю, все равно не понимаю, зачем пытаться сделать какие-то сложныне запросы через тот же билдер, когда можно сделать просто запрос?
Слава
А если без шуток, как борятся с этим ?) ( ни раз не работал в проекте где 10к+ рпс )
Слава
std::mechanicus
10+к рпс это земля пухом
Alexey Mishurovskiy
Alexey Mishurovskiy
у мен на этот вопрос нет ответа
Aleksandr
можно пример сущностей?
Aleksandr
Alexey Mishurovskiy
Aleksandr
ну я никуда не спешу)
Alexey Mishurovskiy
попрошу его накидать примеры
Юра
Юра
Доктрина вообще не подходит для высоконагруденных проеков где тысячи запросов в секунду как и пхп в целом
Юра
Хотя есть извраты типо reactphp
Aleksandr
а при чем тут нагрузка и реактпхп?)
Aleksandr
ты с реалтайм по-моему путаешь
Юра
Потому что а хайлоаде надо использовать минимум процессов и максимум эффектиных асинхронных операций
Юра
И избегать гонки за разделяемые ресурсы
Alexey Mishurovskiy
VadimK, [27.11.20 17:51]
Ок. Вот сравнительно простой пример:
* Список заказов
* + Товары one-to-many
* + Склады с которых забирать товары many-to-many через товары
* + Операторы callcenter которые обзванивали клиентов по заказам (has-one)
* + Платежи оп оплаченным заказам коих может быть более 1-го
* + платежная система использованная при оплате
Alexey Mishurovskiy, [27.11.20 17:52]
[In reply to VadimK]
напиши еще как в yii это делается и сколько и каких запросов оно сделает
VadimK, [27.11.20 17:54]
в ларе почти также
Order::find()
->with([
'goods' => static function(ActiveQuery $query) {
return $query->with(['warehouse']);
},
'operators',
'payments' => static function(ActiveQuery $query) {
return $query->with(['paymentSystem']);
}
])
->all();
VadimK, [27.11.20 17:57]
Запросы:
* Получить заказы
* По уникальным id связей от заказов получить товары
* По уникальным id связей от товаров получить склады
* По уникальным id связей от заказов получить операторов
* аналогично платежи
* аналогично платежные системы
VadimK, [27.11.20 17:57]
итого 6 запросов и 5 предваритиельных пробегов по массивам для сбора связей
VadimK, [27.11.20 17:57]
нужно лезть под капот, вероятно даже 3
VadimK, [27.11.20 17:58]
доктрина сожрет весь выигрышь в случае ручного инжекта релейшенов в отдельном обработчике
VadimK, [27.11.20 17:58]
убьет БД сделав 501 запрос при ленивой загрузке
VadimK, [27.11.20 18:01]
и вообще может встрять если попытается выгрузить это одним запросом, потому что мало того что из БД в памяти будет лежать навскидку что-то около 100*70(товаров допустим) * 4 (склада например) * 10 (операторов) * 120 платежей * 4 платежных системы итого получится в памяти нечто дикое: 134400000 записей
VadimK, [27.11.20 18:01]
возможно что-то сейчас напутал т.к. сам в ахуе
VadimK, [27.11.20 18:01]
но по логике работы будет нечто такое
VadimK, [27.11.20 18:03]
да напутал, там иначе считается, цифра будет меньше
VadimK, [27.11.20 18:03]
но там будут тысячи строк в памяти БД и приложения
Alexey Mishurovskiy
@Cawa87 как то так
Юра
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/batch-processing.html
Юра
Хотя итерироать энтити с рилейшенами не выйдет
Alexey Mishurovskiy
Юра
А вообще.это попытка натянуть орм туда где он не нужен
Alexey Mishurovskiy
это да, но тем не менее в йии их АР это умеет решать, и я не верю, что доктрина не может это.
Юра
Я не понимаю проблему
Юра
Квери билдер может сделать любой запрос
Юра
Что конкретно доктрина не может сделать?
Alexey Mishurovskiy
он делает эти запросы неэффективно, выше я все написал, но есть шанс, что они поправили это уже, ибо у него опыт был не с самой свежей 2-й доктриной
Aleksandr
так билдер и не используют когда нужны "эффективные" запросы
Aleksandr
что в доктрине, что в ишшной ар
Aleksandr
что в каком-нибудь элокаенте
Юра
select o from Orders o join o.goods g join g.payments p
Юра
Обычный запрос
Юра
А не забыть конечно включить в селект
Юра
select o,g,p
Aleksandr
ну вроде да
Maxim Kainov
Maxim Kainov
Maxim Kainov
Aleksandr
Юра
А как демон будет запросы обрабатывать
Юра
Ты про какой демон говоришь?
Юра
Я вот про это
Юра
Юра
Поэтому я и говорил про reactphp
Юра
И оно не течет?
Maxim Kainov
Maxim Kainov
https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune
Юра
И шо оно тестит
Юра
Сколько параллельных потоков?
Юра
Как тестили?
Юра
Не вижу инфы
Maxim Kainov
Хз, должно быть где то