![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
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 |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 01:49 |