![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 17.04.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam nastepujacy problem. Musze posortowac dane z pliku CSV wedlug zadanej uprzednio kolumny (zawsze bedzie to liczba). Mozna to latwo i szybko zrobic, jesli linijek w pliku jest nawet do kilkunastu/kilkudziesieciu tysiecy, korzystajac z chocby asort() czy arsort(). W moim przypadku pliki beda mialy srednio po kilkaset tysiecy linijek, a czasem nawet grubo powyzej 1 mln, wiec rozwiazanie oparte o tablice, mimo ze nadal wykonuje sie w akceptowalnym czasie (dla 1mln ok 190sek), to po prostu zabija sprzet. Przykladowa struktura pliku CSV: Kod Kolumna 1;Kolumna 2;Kolumna 3;Kolumna 4;Kolumna 5 I zalozmy ze chce posortowac te dane rosnaco po kolumnie 4. Ma ktos jakis pomysl jak zrobic to optymalnie (moze byc nawet ze strata czasowa, byleby nie pozeralo zbyt wielu zasobow serwera)? Z gory dziekuje za wszelka pomoc |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 5 Dołączył: 8.11.2004 Skąd: trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
Z czystej ciekawości,
co to są za dane, które przetrzymujsz w kilkunastu milionach wierszy, PS. A może zastsować tu metodę dziel i rządź. jakaś kolumna jest jednoznaczna np wojewodztwo można by te dane przechowywać nie w jednym ale w kilkunastu plikach, kązdy plik sortowało by sie osobno w razie zajścia takiej potrzeby Edit: Pomysł numer 2: robisz plik indeksu index.cvs który zawiera kolumne elementu według którego przebiega sortowanie oraz nazwe pliku gdzie jest reszta danych, sortujescz tylko index.csv Ten post edytował php programmer 11.07.2006, 09:53:04 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 5.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
moze tutaj wstawic sortowanie metoda sladu? dodajesz do bazy danych nowe pole, i przy dodawaniu kolejnych rekordow odpowiednio je zmieniasz, tak, zeby liczby w sladzie odpowiadaly odpowiadaly posortowaniu. Np:
w rezultacie, jak bedzie pobieral dane sladem, bedziesz mial nastepujace numery id: 4, 3, 1, 2 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 17.04.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tyle, ze ja otrzymuje jedynie finalne pliki csv, nie mam wplywu na ksztalt bazy w jakiej sa one przechowywane, ani na generowana strukture pliku niestety
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 5.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
hm...no to chyba jedynym wyjsciem jest sortowanie tablicy. Moze zeby nie marnowac czasu i sprzetu, podziel to na pare mniejszych kawalkow?
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 789 Pomógł: 41 Dołączył: 30.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Prosty cvs reader potrafi zwrócić Ci coś takiego:
Tak więc zmieniony przykład z manuala:
Chyba powinno działać |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 17.04.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Re: tiraeth
Mam funkcje, ktore dzialaja dokladnie w taki sam sposob, ale zzeraja na jakies 200-300 sekund praktycznie cala dostepna pamiec serwera. Dlatego szukam rozwiazania, ktore moze dzialac nawet wolniej, ale mniej zasobozernie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 21:41 |