🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
12 messages
12 total messages Started by Paweł Tue, 15 Sep 2009 19:14
Wymiana danych
#51607
Author: Paweł
Date: Tue, 15 Sep 2009 19:14
16 lines
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
#51608
Author: Adam Osuchowski
Date: Tue, 15 Sep 2009 19:41
19 lines
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
#51609
Author: Paweł
Date: Tue, 15 Sep 2009 20:30
20 lines
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
#51610
Author: Maciej Zielenkieiwcz
Date: Tue, 15 Sep 2009 22:44
15 lines
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
#51611
Author: Andrzej Adam Filip
Date: Wed, 16 Sep 2009 06:14
20 lines
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
#51617
Author: Rafal Kupka
Date: Wed, 16 Sep 2009 06:38
22 lines
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
#51618
Author: Adam Osuchowski
Date: Wed, 16 Sep 2009 08:18
11 lines
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
#51612
Author: Paweł
Date: Wed, 16 Sep 2009 17:21
11 lines
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
#51613
Author: Andrzej Adam Filip
Date: Wed, 16 Sep 2009 17:34
25 lines
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
#51614
Author: Paweł
Date: Wed, 16 Sep 2009 18:23
20 lines
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
#51615
Author: Andrzej Adam Filip
Date: Wed, 16 Sep 2009 18:46
27 lines
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
#51616
Author: Paweł
Date: Wed, 16 Sep 2009 19:43
12 lines
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