Thread View: pl.comp.lang.perl
12 messages
12 total messages
Started by Paweł
Tue, 15 Sep 2009 19:14
Wymiana danych
Author: Paweł
Date: Tue, 15 Sep 2009 19:14
Date: Tue, 15 Sep 2009 19:14
16 lines
1475 bytes
1475 bytes
Witam ! Na serwerze jest uruchomiony jako demon skrypt w Perlu. Skrypt ten odbiera dane z sieci, kompletuje je i na ich podstawie tworzy co pewien czas (do 2 razy na sek.) obrazek w formacie jpeg (typowo około 25KB). Utworzony obrazek jest zapisywany do bazy danych (MySQL), z której przy pomocy skryptu PHP jest pobierany i wysyłany do przeglądarki klienta. Jednak częste pobieranie danych z bazy MySQL przez wielu użytkowników mocno obciąża serwer. Zapewne istnieje jakiś bardziej wydajny mechanizm pozwalający udostępniać tworzony przez skrypt w Perlu obrazek wielu użytkownikom. Jak proponujecie to zrobić ? Paweł
Re: Wymiana danych
Author: Adam Osuchowski
Date: Tue, 15 Sep 2009 19:41
Date: Tue, 15 Sep 2009 19:41
19 lines
1864 bytes
1864 bytes
Paweł wrote: > Na serwerze jest uruchomiony jako demon skrypt w Perlu. > Skrypt ten odbiera dane z sieci, kompletuje je i na ich podstawie tworzy co > pewien czas (do 2 razy na sek.) obrazek w formacie jpeg (typowo około > 25KB). > Utworzony obrazek jest zapisywany do bazy danych (MySQL), z której przy > pomocy skryptu PHP jest pobierany i wysyłany do przeglądarki klienta. > Jednak częste pobieranie danych z bazy MySQL przez wielu użytkowników mocno > obciąża serwer. > Zapewne istnieje jakiś bardziej wydajny mechanizm pozwalający udostępniać > tworzony przez skrypt w Perlu obrazek wielu użytkownikom. > Jak proponujecie to zrobić ? Na filesystemie. Jeżeli cały czas jest to ten sam obrazek, zmieniający się te 2 razy na sekundę, to najlepiej trzymać go na jakimś tmpfsie albo czymś podobnym klasy ramdysk, żeby to siedziało non-stop w pamięci. Jeżeli każde wygenerowanie obrazka jest zapisywane oddzielnie i raz zapisana wersja się nie zmienia, to na normalnym dyskowym filesystemie, a buforowaniem i keszowaniem zajmie się system operacyjny.
Re: Wymiana danych
Author: Paweł
Date: Tue, 15 Sep 2009 20:30
Date: Tue, 15 Sep 2009 20:30
20 lines
1932 bytes
1932 bytes
>> Jak proponujecie to zrobić ? > > Na filesystemie. Jeżeli cały czas jest to ten sam obrazek, zmieniający > się te 2 razy na sekundę, to najlepiej trzymać go na jakimś tmpfsie albo > czymś podobnym klasy ramdysk, żeby to siedziało non-stop w pamięci. > Jeżeli każde wygenerowanie obrazka jest zapisywane oddzielnie i raz > zapisana wersja się nie zmienia, to na normalnym dyskowym filesystemie, > a buforowaniem i keszowaniem zajmie się system operacyjny. Obrazek cały czas się zmienia. Czyli nowy obrazek zastępuje poprzedni. Następuje to teraz do 2 razy na sekundę. Kiedyś gdy obrazki zmieniały co kilka sekund wymiana danych następowała przez plik na dysku. Jednak ze wzrostem częstotliwości zapisu nowego obrazka gwałtownie wzrosła liczba pobranych plików z błędem. Nie wiem czy Linux powinien przed tym zabezpieczyć. Uznałem, że tego nie robi. Wykorzystałem więc bazę MySQL, która ma wbudowane odpowiednie mechanizmy. Paweł
Re: Wymiana danych
Author: Maciej Zielenkieiwcz
Date: Tue, 15 Sep 2009 22:44
Date: Tue, 15 Sep 2009 22:44
15 lines
1458 bytes
1458 bytes
On 2009-09-15 20:30, Paweł <pawel.neo@neostrada.pl> wrote: > > Kiedyś gdy obrazki zmieniały co kilka sekund wymiana danych następowała > przez plik na dysku. Jednak ze wzrostem częstotliwości zapisu nowego > obrazka gwałtownie wzrosła liczba pobranych plików z błędem. Nie wiem > czy Linux powinien przed tym zabezpieczyć. Uznałem, że tego nie robi. Sam z siebie nie powinien, i nie robi. Jak się go poprosi to robi. Polecam perldoc -f flock na przykład. Pozdrawiam, -- Maciej Zielenkiewicz RLU #232362 "This isn't right. This isn't even wrong." Wolfgang Pauli
Re: Wymiana danych
Author: Andrzej Adam Filip
Date: Wed, 16 Sep 2009 06:14
Date: Wed, 16 Sep 2009 06:14
20 lines
1984 bytes
1984 bytes
Maciej Zielenkieiwcz <mzielenkiewicz@gmail.com> pisze: > On 2009-09-15 20:30, Paweł <pawel.neo@neostrada.pl> wrote: >> >> Kiedyś gdy obrazki zmieniały co kilka sekund wymiana danych następowała >> przez plik na dysku. Jednak ze wzrostem częstotliwości zapisu nowego >> obrazka gwałtownie wzrosła liczba pobranych plików z błędem. Nie wiem >> czy Linux powinien przed tym zabezpieczyć. Uznałem, że tego nie robi. > > Sam z siebie nie powinien, i nie robi. Jak się go poprosi to robi. > Polecam perldoc -f flock na przykład. A nie prościej (w tym przypadku) tworzyć "tymczosowy" obrazek o nazwie opartej o identyfikator procesu go tworzącego i po "całkowitym skompletowaniu" robić mv/rename? -- Andrzej Adam Filip : anfi@onet.eu : Andrzej.Filip@gmail.com Podróże kształcą. -- Przysłowie abisyńskie (pl.wikiquote.org) http://groups.google.pl/groups?selm=ii6zqvzcjr-1-99G@david.huge.strangled.net
Re: Wymiana danych
Author: Rafal Kupka
Date: Wed, 16 Sep 2009 06:38
Date: Wed, 16 Sep 2009 06:38
22 lines
1653 bytes
1653 bytes
Maciej Zielenkieiwcz napisał: Witam, >> Kiedyś gdy obrazki zmieniały co kilka sekund wymiana danych następowała >> przez plik na dysku. Jednak ze wzrostem częstotliwości zapisu nowego >> obrazka gwałtownie wzrosła liczba pobranych plików z błędem. Nie wiem >> czy Linux powinien przed tym zabezpieczyć. Uznałem, że tego nie robi. > > Sam z siebie nie powinien, i nie robi. Jak się go poprosi to robi. > Polecam perldoc -f flock na przykład. W opisanym przypadku rename(2) będzie lepsze od blokowania pliku. Nowy plik tworzymy pod inną nazwą (w tym samym katalogu) i gdy już jest gotowy zmieniamy nazwę na ostateczną. perldoc -f rename Pozdrawiam, Kupson -- Great software without the knowledge to run it is pretty useless. (Linux Gazette #1)
Re: Wymiana danych
Author: Adam Osuchowski
Date: Wed, 16 Sep 2009 08:18
Date: Wed, 16 Sep 2009 08:18
11 lines
1222 bytes
1222 bytes
Paweł wrote: > Jednak ze wzrostem częstotliwości zapisu nowego obrazka gwałtownie > wzrosła liczba pobranych plików z błędem. A dlaczego? Czyżbyś nadpisywał cały czas ten sam fizyczny inode? > Nie wiem czy Linux powinien przed tym zabezpieczyć. Uznałem, że tego > nie robi. Sam z siebie napewno nie. To nie Windows, który stara się myśleć za użytkownika.
Re: Wymiana danych
Author: Paweł
Date: Wed, 16 Sep 2009 17:21
Date: Wed, 16 Sep 2009 17:21
11 lines
1481 bytes
1481 bytes
> A nie prościej (w tym przypadku) tworzyć "tymczosowy" obrazek o nazwie > opartej o identyfikator procesu go tworzącego i po "całkowitym > skompletowaniu" robić mv/rename? > Niestety moje doświadczenie jeśli chodzi o Perla jest niewielkie. Nie bardzo wiem jak w praktyce podmienić stary plik na nowy w taki sposób aby nie powodowało to problemów w pracy serwera. Paweł
Re: Wymiana danych
Author: Andrzej Adam Filip
Date: Wed, 16 Sep 2009 17:34
Date: Wed, 16 Sep 2009 17:34
25 lines
2277 bytes
2277 bytes
Paweł <pawel.neo@neostrada.pl> pisze: >> A nie prościej (w tym przypadku) tworzyć "tymczosowy" obrazek o nazwie >> opartej o identyfikator procesu go tworzącego i po "całkowitym >> skompletowaniu" robić mv/rename? > > Niestety moje doświadczenie jeśli chodzi o Perla jest niewielkie. > Nie bardzo wiem jak w praktyce podmienić stary plik na nowy w taki > sposób aby nie powodowało to problemów w pracy serwera. W skrypcie perl'a robi to funkcja rename. [ Przeczytaj *DOKŁADNIE* jej opis w "man perlfunc" ] Na 70% jej użycie załatwi sprawę o ile się nie "nadziejesz" na coś specyficznego dla twojego systemu operacyjnego lub (web?) serwera. Najszybciej pewnie będzie sprawdzić w praktyce. Czy ten obrazek jest odczytywany co 0.5s? Czy może wystarczy generować go "na żądanie" po sprawdzeniu wieku prezentowanych danych (w milisekundach) w ostatnio generowanym obrazku? -- Andrzej Adam Filip : anfi@onet.eu : Andrzej.Filip@gmail.com Albo siekiera kamień, albo kamień siekierę. -- Przysłowie armeńskie (pl.wikiquote.org) http://groups.google.pl/groups?selm=9jv8i7j7em-1-99G@david.huge.strangled.net
Re: Wymiana danych
Author: Paweł
Date: Wed, 16 Sep 2009 18:23
Date: Wed, 16 Sep 2009 18:23
20 lines
2039 bytes
2039 bytes
> Czy ten obrazek jest odczytywany co 0.5s? > Czy może wystarczy generować go "na żądanie" po sprawdzeniu wieku > prezentowanych danych (w milisekundach) w ostatnio generowanym obrazku? > Nieco upraszczając działa to tak: Skrypt w Perlu odbiera z sieci w małych kawałkach obrazek (zdjęcie). Po skompletowaniu wszystkich danych sprawdzeniu poprawności zapisuje go np. na dysk (teraz zapisuje go do bazy danych). Takie skompletowanie danych trwa typowo od 10 do 0.5 sek. Klienci wczytują do przeglądarki stronę WWW, która w kółko (np. 2 razy na sek.) wysyła do serwera zapytanie o ten sam obrazek. Serwer w odpowiedzi może wysłać zdjęcie lub komunikat, że plik nie został zmodyfikowany. W sumie jest to coś podobnego do wyświetlania obrazu z jednej kamery przez stronę WWW dla wielu (np. 10) użytkowników. Paweł
Re: Wymiana danych
Author: Andrzej Adam Filip
Date: Wed, 16 Sep 2009 18:46
Date: Wed, 16 Sep 2009 18:46
27 lines
2497 bytes
2497 bytes
Paweł <pawel.neo@neostrada.pl> pisze: >> Czy ten obrazek jest odczytywany co 0.5s? >> Czy może wystarczy generować go "na żądanie" po sprawdzeniu wieku >> prezentowanych danych (w milisekundach) w ostatnio generowanym obrazku? >> > > Nieco upraszczając działa to tak: > Skrypt w Perlu odbiera z sieci w małych kawałkach obrazek > (zdjęcie). Po skompletowaniu wszystkich danych sprawdzeniu poprawności > zapisuje go np. na dysk (teraz zapisuje go do bazy danych). Takie > skompletowanie danych trwa typowo od 10 do 0.5 sek. > Klienci wczytują do przeglądarki stronę WWW, która w kółko (np. 2 razy > na sek.) wysyła do serwera zapytanie o ten sam obrazek. Serwer w > odpowiedzi może wysłać zdjęcie lub komunikat, że plik nie został > zmodyfikowany. > W sumie jest to coś podobnego do wyświetlania obrazu z jednej kamery > przez stronę WWW dla wielu (np. 10) użytkowników. Czy rozważałeś użycie skryptu (w perlu?) robiącego HTTP-push? http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push -- Andrzej Adam Filip : anfi@onet.eu : Andrzej.Filip@gmail.com Dowódca nie powinien nigdy zsiadać z konia. -- Przysłowie chińskie (pl.wikiquote.org) http://groups.google.pl/groups?selm=80fpnqielt-1-99G@david.huge.strangled.net
Re: Wymiana danych
Author: Paweł
Date: Wed, 16 Sep 2009 19:43
Date: Wed, 16 Sep 2009 19:43
12 lines
1581 bytes
1581 bytes
> Czy rozważałeś użycie skryptu (w perlu?) robiącego HTTP-push? > > http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push > Tak Kiedyś to zrobiłem. Niestety działa tylko w FF. Pojawiły się też problemy z wydajnością serwera, których nie potrafiłem rozwiązać. Paweł
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads