• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP - logowanie wyniku skryptu w bazie danych

0 głosów
64 wizyt
pytanie zadane 8 lutego w PHP, Symfony, Zend przez Krecioo Nowicjusz (160 p.)
zmienione kategorie 8 lutego przez Arkadiusz Waluk
Witam,

ostatnio otrzymałem dość ciekawe zadanie od pewnej firmy. Posiada ona gotowy skrypt, który zaczytuje pliki xlsx, xls, xml i csv do bazy danych. Na początku działało to świetnie, ale firma rozrosła się i już nie wczytują plików po 1000 wierszy a po 300 tyś. i więcej. Skrypt zwalniał tym bardziej im więcej wierszy zaczytał.

Okazało się, że problemem było logowanie komunikatów. Ktoś napisał zapytanie w następujący sposób:

UPDATE log SET log_txt = log_txt || {$statement} WHERE ...

Wiadomo jeśli skrypt wypluwał mało komunikatów baza jakoś dawała radę, ale im większy plik tym więcej komunikatów trzeba było dopisać i baza zaczęła się dławić na tym zapytaniu.

Normalnie rozwiązałbym ten problem stosując ob_start() oraz ob_get_content(). Niestety założenia są takie, że każdy komunikat ma być natychmiast wyświetlony w widoku. Wymusza to używanie ob_flush() po każdym wygenerowanym komunikacie, a co za tym idzie uniemożliwia użycie powyższej metody.

Rozwiązaniem  mogłoby być dopisywanie każdego komunikatu do jakiegoś pliku za pomocą fopen z atrybutem a i fpust. Sprawdziłem i nie jest to nawet aż tak obciążające. Różnica miedzy odpaleniem skryptu wczytującego 50000 wierszy do bazy z logowaniem do pliku, a bez wynosi około pół sekundy. Niestety założenie jest takie, że wszystkie logi mają znajdować się w bazie danych, a próba zaczytania do bazy zawartości powstałego pliku wywala mi Out of Memory.

To też nie byłoby problemem ale zarząd firmy nie chce mi dać dostępu do serwera, administrator delikatnie mówiąc nie ogarnia, a próby zmiany ustawień php.ini przez ini_set(memory_limit) nie dają rezultatów (najprawdopodobniej php jest hamowany przez apache).

I tutaj w końcu pojawia się moje pytanie. Czy ma ktoś pomysł jak ugryźć ten temat z innej strony?

1 odpowiedź

0 głosów
odpowiedź 8 lutego przez HaKIM Szeryf (82,000 p.)
edycja 8 lutego przez HaKIM
IMO. to nie ma co kombinować. Jeżeli uważasz, że Twoje rozwiązanie jest jednym z lepszych w Twojej sytuacji to starałbym się za wszelką cenę przekonać zarząd o daniu Ci dostępu do serwera albo zmianie ich administratora.

Później będziesz musiał się z tymi rozwiązaniami naokoło mierzyć, co może odbić się bardzo niekorzystnie na dalszym rozwijaniu projektu a również Twoim samopoczuciu przez pracę z potworkiem.

Reasumując; idź do zarządu i wyłóż im wszystkie argumenty, które masz, aby dano Ci dostęp do serwera i wszystkie konsekwencje rozwiązania naokoło. Dodatkowo, możesz zasugerować (kopnięcie w zad marnego administratora aby ruszył tyłek do pracy) OR (zlececnie rekrutacji kogoś z prawdziwego zdarzenia).

Podobne pytania

0 głosów
1 odpowiedź 206 wizyt
0 głosów
0 odpowiedzi 63 wizyt
0 głosów
1 odpowiedź 112 wizyt
pytanie zadane 27 lutego 2018 w PHP, Symfony, Zend przez Morthan Początkujący (370 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

60,258 zapytań

105,942 odpowiedzi

220,111 komentarzy

32,463 pasjonatów

Przeglądających: 346
Pasjonatów: 17 Gości: 329

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...