Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parsowanie dużego pliku .txt, Wyszukiwanie danych w pliku tekstowym 90MB
danket
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.12.2007
Skąd: inąd :)

Ostrzeżenie: (0%)
-----


Witam!
Pytanie moje dotyczy problemu, a w zasadzie możliwości przeparsowania dużego, wręcz ogromnego pliku .txt
Buduję serwis związany z nieruchomościami. Wszystkie oferty oraz wszystkie transakcje na rynku nieruchomosci od mniej więcej 1995 roku znajdują się w bazie danych, baza natomiast zarządzana jest przez system MLS (Multiple Listing Service). Jak nietrudno się domyślić, baza jest ogromna (w chwili obecnej około 100,000 pozycji). Każdej nocy system MLS-u zrzuca zawartość bazy do pliku txt w postaci 1rekord->1linia, a więc każdej nocy powstaje plik ze stu tysiącami linii, co daje mniej więcej około 90MB. Jako firma zrzeszona w systemie MLS mamy dostęp do owego pliku przez FTP i tylko przez FTP, nie ma w ogóle dostępu do dB.
Plik tekstowy wygląda mniej wiecej tak:

idNieruchomosci|idSystemowe|typNieruchomosci|idFirmy|idAgenta|cenaNieruchomosci|
..|...|...|.. itd
i tak 100,00 razy :)

Pytanie moje brzmi: czy ktokolwiek z szanownych forumowiczów miałby jakiekolwiek sugestie, jak w tak ogromym pliku, do którego jest tylko i wyłącznie dotęp przez FTP, wynaleźć te linie, które spełniają określone kryteria? Np. jak znaleźć takie linie, w których na pozycji 'idFirmy' występuje '123456' ? Bez większego wysiłku umysłowego fgets() i fscanf() odrzucam. Nie przy tak ogromych plikach. Jak to ugryźć? Przypominam, że plik znajduje sie na serwerze zdalnym, kosmicznie szybkim, ale jednak zdalnym, a
CODE
fopen('ftp://user:pass@server.com','r');

nie sprawia żadnego problemu.

Czy ktoś w ogóle z was spotkał się z takim zagadnieniem? Znalazłem pewne sugestie dotyczące parsowania dużych xml-i, ale tu dochodzi ewentualne wyszukiwanie w stringu. Zwracam się o pomoc, bo przetestowałem większośc możliwości.

Dzięki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
danket
post
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.12.2007
Skąd: inąd :)

Ostrzeżenie: (0%)
-----


Witam.
Dzięki za podpowiedź. Tak tez myślałem czy by nie duplikować bazy u siebie na serwerze, ale.. Nie bardzo wiem jak będzie pracował serwer mysql ze 100,000 (tak - sto tysięcy) rekordów. Po prostu nie wiem, bo nigdy nie pracowałem z tak dużą bazą. Ile trwałoby utworzenie takiej bazy na podstawie pliku? Mam dość szybki serwer, DualCore 2.6GHz / 8GB RAM-u i SATA-y 3gigowe, ale i tak sobie myślę, że to by zajęło dość sporo czasu. Poza tym, tak sobie myślę, musiałoby to działać tak, że ów plik ze zrzutem bazy, serwer zasysałby co noc na lokalny dysk. To to jest mały problem, bo ich łącze pozwala na download rzędu 4MB/sek, więc przy w miarę niezapchanej sieci całość pliku, jakieś do 100MB kopiowała by się z marginesem do minuty czasu. Zresztą tyle idzie idzie po FTP.

Sam już nie wiem. Pytania więc do forumowiczów którzy spootkali się z tym tematem już:
1. Jak długo trwałoby utworzenie takiej bazy danych? Sto tysięcy rekordów, 40 pól na rekord?
2. Jak długo trwałoby wyszukanie jednego rekordu spełniającego kryteria?
3. Czy jest może jakieś inne rozwiązanie? Nie wiem, jakieś repozytorium, PEAR/PECL, cokolwiek?

Dzięki,
Dan
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(danket @ 18.12.2007, 10:54:05 ) *
Nie bardzo wiem jak będzie pracował serwer mysql ze 100,000 (tak - sto tysięcy) rekordów.

Na pewno zdecydowanie szybciej niz na czystym pliku txt.
Ściąganie pliku zajmuje ok. minutę - i to jest problem? Może jest możliwość zrzutu danych z bazy bezpośrednio do zapytań SQLowych (mysqldump), a nie do pole1|pole2... Wtedy mógłbyś po prostu wykonywać taki plik ładując dane od razu do bazy.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 01:49