![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mam kolejny, taki o to problem.
Tokeny są generowane w sporej ilości (po około 100). Jak można przyśpieszyć dodawanie tych rekordów? jeżeli stworzę obiekty, ale zakomentuję linijkę $vt->save(); to całość działa super szybko, więc to dodawanie rekordów niestety długo trwa. Czy można jakoś przyspieszyć dodawanie tych rekordów do bazy? Czy są one dodawane w tym samym połączeniu? Czy może to być powód tak powolnego dodawania? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Są dodawane w tym samym połączeniu. Może działać powoli ze względu na budowanie zapytania lub ze względu na powolną bazę danych.
Samo wstawianie do bazy można przyspieszyć korzystając z transakcji. Budowanie zapytania można też przyspieszyć. Potrzebujesz dobrać się do raz stworzonego zapytania i samemu bindować do niego. Napisz jeszcze co oznacza, że długo trwa. Wypróbuj też działanie na serwerze produkcyjnym. Nie wiem dokładnie z czego to wynika ale w moim przypadku różnice w szybkości działania potrafią być ogromne. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Utwórz sobie klasę do tworzenia tzw. multi-insertów czyli zamiast:
wykonującą:
Na stronie Doctrine swego czasu czytałem, że nie Doctrine takiej możliwości nie ma i mieć nie będzie bo nie każdy standard przyjmuje takie polecenia (głupie tłumaczenie moim zdaniem - jeśli dana baza tego nie wspiera to po prostu nie byłoby użyte). Z własnego doświadczenia powiem Ci, że takie inserty dużo dadzą. Podobne rozwiązanie zastosowałem przy importowaniu kategorii z Allegro (ok. 25 000) i wrzucanie ich w paczkach (np. po 50) jest znacznie szybsze niż wrzucanie ich pojedynczo. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem transakcje poprzez $conn->beginTransaction ale niewiele to dało, więc zrobię taką klasę i zobaczę jak działa.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Oj dało dało. Bawię się w tworzenie tęczowych tablic i uwierz kop jest niesamowity. Może tobie nie dało kopa, ponieważ nie masz tabel w INNODB?
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 10:14 |