@symfony_ru

Страница 63 из 138
Yuriy
21.01.2017
13:07:36
спасбо всем, получилось

Salavat
22.01.2017
03:25:34
Доброе утро, тем кто не спит

Есть база данных (старая). Нужно конвертировать в новую. Сделал костыль через fixture

Google
Salavat
22.01.2017
03:28:41
Простые записи - обрабатываются легко. а там где джойны есть - слегка пртоможенно... То есть, есть таблица - категории, ключевые слова - с ними рпоблем нет, создается reference и потом, в таблицу материалы - уже задаются в зависимости от референса (поля @ORM/ManyToMany/OneToMany/ManyToOne в зависимости от ситуации) . ТАк вот последняя эта таблица - обрабатывается оооооочень долго. Хоть и порционно (каждые 1000 записей flush, clear). У кого есть еще какие идеи / опыт / итд, как ускорить этот процесссс

Pavel
22.01.2017
04:18:53
Почему dump((array)$entity) выдает такую срань http://prntscr.com/dyq483 а не нормальный массив?

Все, понял

Salavat
22.01.2017
12:13:25
Ну что, есть может у кого мысли - как 20к+ записей по-быстрому вставить :) Есть поля,связанные с другими сущностями @ManyToMany. Так что после ->flush(), ->clear() - очень долгая обработка

Sergey
22.01.2017
12:13:51
SQL batch insert

Sergey
22.01.2017
12:14:02
быстрее не придумать

Salavat
22.01.2017
12:14:40
Вариант без clear работает быстро в принципе, но память съедает ацки

Sergey
22.01.2017
12:15:04
Salavat
22.01.2017
12:15:19
у меня не миграция

у меня трансформация из одной базы - в другую

Алексей
22.01.2017
12:15:28
Ты сказал, что со старой базы на новую мигрируешь.

Sergey
22.01.2017
12:15:30
миграция данных с одной структуры на другую

Google
Salavat
22.01.2017
12:15:37
а ну это да

Sergey
22.01.2017
12:15:43
ну так жахни кучку SQL

Алексей
22.01.2017
12:15:45
Ну вот и как бы зачем тебе ORM.

Sergey
22.01.2017
12:15:47
да и вообще

это одноразовая операция?

Salavat
22.01.2017
12:15:52
ну то есть самый быстрый - SQLы чистые

Да

Sergey
22.01.2017
12:15:59
ну тогда без clear сделай

и выдели пару гигов памяти

или делай с clear

и жди

20К не так много

Salavat
22.01.2017
12:16:28
с clear - 18 часов ~ получается

Алексей
22.01.2017
12:16:30
Если тебе не нужны какие-нибудь фичи ORM типа Lifecycle Callbacks или ивентов доктрины или ещё чего-то - особого смысла в доктрине при импорте данных нет.

Salavat
22.01.2017
12:16:36
Если бы ночью вчера запустил - то можно было бы

Sergey
22.01.2017
12:16:39
с clear - 18 часов ~ получается
это ж как плохо то все

Salavat
22.01.2017
12:17:06
Ну вот не знаю, как-то так... Может конечно еще где-то косячу

Sergey
22.01.2017
12:17:06
это получается что всего тысяча записей в ЧАС

Алексей
22.01.2017
12:17:07
Кстати, зачем мигрировать в фикстуре - тоже вопрос, конечно.

Sergey
22.01.2017
12:17:14
это ж какая там стремная структура базы

Google
Salavat
22.01.2017
12:17:27
Первые три тысячи - за 15 минут :) а дальше начинается тупняк

Алексей
22.01.2017
12:17:27
Эстонская база?

Sergey
22.01.2017
12:17:30
банальный insert с вложенным SELECT

Sergey
22.01.2017
12:17:45
Первые три тысячи - за 15 минут :) а дальше начинается тупняк
тупняк начинается потому что PHP и сборка мусора.

clear должен спасать

Алексей
22.01.2017
12:18:31
clear() можно делать реже. Если ты в память не упираешься, то чего дёргать-то его, если это разовая операция?

Ну и если identity map не перегружен, конечно, уже.

Sergey
22.01.2017
12:18:45
раз в пару тысяч записей делай clear

Алексей
22.01.2017
12:19:18
Я примерно так и делаю на проектах, где надо большие объёмы данных именно через доктрину пропускать. Раз в несколько тысяч итераций.

Salavat
22.01.2017
12:20:42
Если clear убирать - то получается нужно уже cascade={"persist"} указывать, таких полей 4

Sergey
22.01.2017
12:20:57
иначе повторюсь

зачем тебе доктрина вообще в проекте если ты ей по сути не пользуешься

и только страдаешь

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

все остальное - ORM не нужна

SQL/DQL

Salavat
22.01.2017
12:22:34
В общем, спасибо, сейчас подумаю еще и либо памяти выделю, либо пойду на DQL/SQL перепишу

Google
Sergey
22.01.2017
12:22:57
проще памяти докинуть

зачем тратить время и оптимизировать одноразовую операцию

Salavat
22.01.2017
12:28:38
Спасибо. Выделю память, пойду смотреть на то, во что превратиться

finkel
22.01.2017
12:29:25
Спасибо. Выделю память, пойду смотреть на то, во что превратиться
а вот это делал? я помню мне когда-то давно помогло

$em->getConnection()->getConfiguration()->setSQLLogger(null);

Salavat
22.01.2017
12:29:29
Так и не понял для чего multiple-transaction нужен в фикстурах. Думал что он делает один множественный инсерт

finkel
22.01.2017
12:29:41
хотя это было много лет назад

Salavat
22.01.2017
12:29:43
$em->getConnection()->getConfiguration()->setSQLLogger(null);
--no-debug вроде выключает это

но не делал

Admin
ERROR: S client not available

finkel
22.01.2017
12:30:05
ибо логгер жрал память и все тупило

Salavat
22.01.2017
12:31:04
Хм

finkel
22.01.2017
12:31:09
ну я так, вспомнил, вдруг поможет

Salavat
22.01.2017
12:31:45
Надо попробовать

максимально все облегчить, что можно

Sergey
22.01.2017
13:02:59
ибо логгер жрал память и все тупило
потому что по дефолту юзается cross-finger handler монолога который пишет сначала в буфер и надо периодически ему тоже флаш делатью

многие любители пописать на симфони демонов на это напарываются

Salavat
22.01.2017
13:07:36
Хм

Память перестала утекать

Google
Salavat
22.01.2017
13:13:52
400мб хватает , и почти закончилась процедура

finkel
22.01.2017
13:14:08
это без логера?

Salavat
22.01.2017
13:15:30
Да и с ноу-дебаг

Sergey
22.01.2017
13:15:48
повторюсь, потому что флашить надо монолог

Salavat
22.01.2017
13:15:50
Так что полезным оказалось. Благодарю!

Sergey
22.01.2017
13:15:53
что бы он буферы не переполнял

Salavat
22.01.2017
13:16:16
повторюсь, потому что флашить надо монолог
Или отключать ) как флашить надо тоже почитать

Sergey
22.01.2017
13:17:11
https://github.com/mac-cain13/daemonizable-command

рекомендую

там есть раздел про память

Salavat
22.01.2017
13:19:48
Благодарю

За час все раскидалось. Всем, кто помогал советами и мыслями, большое спасибо1

Alan
22.01.2017
17:25:25
https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html

перед импортом чтоб не перестраивало индексы каждый раз ну и разделить на транзакции пачками коммитить

Salavat
22.01.2017
19:35:37
:) doctrine так умеет делать?

Alan
22.01.2017
19:46:22
вродь оно http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/transactions-and-concurrency.html#approach-2-explicitly

и http://stackoverflow.com/a/9710383/3204244

Salavat
22.01.2017
19:47:35
Спасибо. Посмотрю

Sergey
22.01.2017
20:07:24
Вопрос, те кто юзают DoctrineFixtureBundle... никто не загонялся по конфигурируемым фикстурам?

ну мол... что-то типа

$this->loadFixtures([ (new ProductChatFixtures())->withHiddenChats() ]);

или лучше так не делать?)

Страница 63 из 138