Temat: przetwarzanie bardzo dużej ilości danych
Artur Świerc:
Witam,
szukam jakichś miarodajnych statystyk, lub też informacji z waszych obserwacji co do wydajności pythona w przetwarzaniu bardzo dużej ilości wyników z bazy. W php albo brakuje pamięci, albo czasu :)
Nie wiem jak w WWW, ale przy "bardzo dużej ilości wyników z bazy" zwykle na mainframe robi się:
- zrzut zapytania do pliku (narzędziem producenta DBMS-a)
- ew. sortowanie i filtrowanie pliku
- przetworzenie plik A -> plik B (programem)
- wrzucenie wyniku do bazy "batch loadem" (narzędziem DBMS-a)
To prostackie, ale dzięki temu:
- baza nie jest blokowana przy długim przetwarzaniu
- proces jest bardzo krotki
Wada: ostatni krok - w stosunku do procesu czysto-SQL-owego - jest mniej kontrolowalny - w przypadku błędów.
Można też się posiłkować tabelą tymczasową - tam zrzucić wynik i na niej operować. Dzięki temu rekordy źródłowe nie są blokowane.
A co do wycieków - to przy dużej ilości danych trzeba być przygotowanym na to, że jeśli proces trwa np. 8h to wzrasta szansa na to że się wywali na końcu (wyciek pamięci, awaria sieci, neutrino...). A więc warto go podzielić na etapy, tak, żeby w wypadku awarii móc powtórzyć tylko np. ostatnią godzinę (work unit, commit, restartowalność) - lub mniej.