![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Witam,
od jakiegoś czasu przymierzam się do migracji z plików na bazę danych jednego z moich pierwszych projektów. Serwis w tym czasie nagromadził dość dużo cennych dla mnie danych i dorobił się prawie 18 GB plików tekstowych. Dane są "ładnie" wprowadzone. Kwestia przenoszenia do MySQL przebiega bez zgrzytów. Ale martwi mnie sprawa szybkości. Rekordów jest blisko 800 mln. Poniższy skrypt mieli dość wolno, średnio 50.000 rekordów na godzinę. Serwer jest domowy - tzn. laptop z 4GB ramu i Celeronem 2.16 Ghz... Przy tym tempie to do przyszłego roku nie zdążę (wychodzi jakieś 16.000 godzin - 666 dni) a czas na uczelni zaczyna mnie gonić...
Dla stabilności mojej pracy - przy "odpalaniu" potrafi przywiesić kompa na minutę - każdy plik jest wybierany przeze mnie ręcznie ($_GET['id']). Bardzo proszę, czy może mi ktoś podpowiedzieć - co mogę zrobić aby migracja przebiegła zdecydowanie szybciej? Ten post edytował d0m1n1k_ 21.06.2015, 23:49:05 -------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
LOAD + help
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 27 Dołączył: 5.10.2013 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 178 Pomógł: 49 Dołączył: 16.04.2012 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
// Bazuję na moim doświadczeniu/wiedzy, nie na faktycznych benchmarkach. Umieszczone w kolejności, od której ja bym zaczął optymalizować kod.
Select, a potem insert działa wolniej niż "insert ignore", który wymaga klucza unikalnego w tabeli. Jeżeli to możliwe to dodawaj wiele wpisów jednym insertem. Wyrzuć tego counta przed fora. Obecnie ten count sprawdza ilość elementów przy każdej iteracji. file_get_contents działa minimalnie szybciej. Być może warto przepisać kod, aby korzystać z tej funkcji. Zamiast definiować stałe, wpisz wartości po prostu do kodu. Mniej czytelnie, złe praktyki i takie tam ale znowu troszkę szybciej. Wyrzuć echo. Ten post edytował Tuminure 22.06.2015, 09:12:48 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
LOAD + help Może jakieś rozwinięcie tematu? ![]() Jak wyżej - czyżbym stosował aż tak zamierzchłe techniki, które nie powinny widzieć światła dziennego w naszych mrocznych czasach? Co w tym takiego strasznego? --------------------------------------------------- Tuminure Nigdy nie spotkałem się ze składnią INSERT IGNORE. Tabela posiada dwa indexy: id - primary, statt - unique Jak wykorzystać tą składnię aby nie przerywała pętli aż do zakończenia wprowadzania danych? Count już wyrzucony w fora. file_get_contents ładuje plik do stringa, a file do tablicy - wolę tak to pozostawić. Za to co otrzymałem od Ciebie, dziękuję! Ale proszę o więcej :-) -------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Kod zoptymalizowany i przeniesiony na serwer w firmie (na ssd, po cichu, będzie pracować nocami).
Wczoraj o 22:30 dodałem bazę, skrypt i pliki na ftp'a oraz czynność do harmonogramu zadań. Od północy do siódmej rano, z nieco poniżej miliona rekordów na starcie, dziś po przyjściu do pracy było już 26.000.004 :-) Maksymalnie miesiąc nocek i będzie wykonane :-) Serwer w końcu ciągle na chodzie, a w nocy jego obciążenie nie przekracza 2%. Dla zainteresowanych: Laptop (Lenovo G50): Celeron N2840 2x2.16Ghz, 4GB RAM, 500GB SATAIII - wydajność przy pełnym obciążeniu ok. 50.000 rekordów / godzinę; Serwer (Dell PE1950): 2 x Xeon DualCore 5150 2x2.66GHz, 16GB RAM, 2x60GB SSD SATAIII->SAS - wydajność przy limicie do 25% CPU i 8GB RAM ok. 2.750.000 rekordów / godzinę; Najlepsze, że taki serwer (poza dyskami 2 x ) kosztuje mniej jak laptop i mógłby przerobić nawet 10M rekordów na godzinę nie przepracowując się... -------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 30 Dołączył: 22.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dziwne to troche, a co tutaj jest wąskim gardłem prcek(mieli teraz na 100%)?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 208 Pomógł: 3 Dołączył: 13.07.2009 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
Nie jestem pewien co było wąskim gardłem... może sam fakt, że laptop jest laptopem ;-)
Na SSD grzeje aż miło, tylko zastanawia mnie jedno - gdzie mogę sprawdzić jaki jest limit bazy danych / tabeli? Obecnie jest już 50.000.000 wpisów i blisko 6GB danych. Chciałem zrobić backup i...
Dla jasności typ bazy danych to InnoDB Wie może ktoś co jest grane? Ten post edytował d0m1n1k_ 25.06.2015, 19:26:22 -------------------- Prywatna koncepcja pasji - SprawdzAuto.info
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 06:42 |