node.js i kolejkowanie mysql

0

Witam
Potrzebuję wykonać aplikację, która będzie działała w pętli (powiedzmy co 500 milisekund) i pobierała dane z MySQL (SELECT), a następnie je przetwarzała (np. wysyłała je na określoną prze zemnie stronę). W teorii rozwiązanie to jest ok - działa. W praktyce moim zdaniem ma ogromny minus - czas po jakim dodam coś do MySQL a czas przetworzenia tych danych przez nodejs (wysyłka na określoną stronę) może wynieść do 500 milisekund - dla mnie jest to za długo - potrzebuję, aby dane te przetwarzane były natychmiast. Drugi minus - na sekundę robię 2 zapytania do MySQL, nie obciąży to zbytnio serwera? Wolałbym zrobić pętle nawet po 10 milisekund, tylko czy będzie to dobre? Wydaje się to jednak bezsensowne - wysyłanie 100 SELECTów na sekundę, co raczej nie będzie dobre dla serwera :)

Ktoś zapyta - po co MySQL, skoro można od razu przekazywać dane do nodejs i je przetwarzać, lub dodać wpis do mysql przez nodejs i je przetwarzać. Ok - z tym, że dla mnie duże znaczenie ma kolejkowanie. Przykładowo w ciągu 1 sekundy otrzymam 1000 danych. Strona, która je przetwarza jest w stanie przykładowo przetworzyć 1 zapytanie na 30 sekund. Tak więc najlepiej byłoby skorzystanie jednak z sposobu, który napisałem na samym początku (w pętli tej sprawdziłbym sobie również czy końcowa strona może przetworzyć je, jeśli nie to nie robi nic).
I ten mój sposób byłby dobry gdyby przyszło te 1000 danych, jednak jeśli danych mam 0 i przyjdzie chociaż 1 dana to nie chciałbym "czekać" tych 500 milisekund, tylko je od razu przetworzyć.

Ktoś ma jakieś pomysły, aby zrobić to lepiej, bardziej optymalnie? Szukałem jakiś eventów do MySQL (czyli automatycznie po dodaniu wpisu do bazy wykonywała by się jakaś akcja) - jednak one mi nie pomogą - ponieważ tak jak pisałem, potrzebuję zrobić też kolejkowanie, gdy przyjdzie więcej niż 1 dana w ciągu dajmy na to 5 sekund.

0

I jesteś PEWIEN, że nie możesz wytrzymać 3 sekund bez tych danych?

Zdradź nam - co to są za dane? Może wymyślimy jakieś lepsze rozwiązanie

0

Tak jestem pewien :) Po prostu chcę, aby aplikacja działała natychmiastowo i przekazywanie danych również było natychmiastowo. Nie chodzi o to czy wytrzymam 3 sekundy - bo jeśli mógłbym to nie byłoby tego tematu. Odnośnie danych to może być to byle co - przykładowo jak to może wyglądać:
użytkownik 1 wysyła swoje imię z priorytetem "niski" o godz. 1200
użytkownik 2 wysyła swoje imię z priorytetem "niski" o godz. 1202
użytkownik 3 wysyła swoje imię z priorytetem "wysoki o godz. 1203

Wszystkie imiona mają zostać wysłane na adres: www.mojastrona.pl/skrypt.php?imie=IMIE

Pętla którą wywoływałbym co 500 milisekund robiła by tak:

  1. Pobranie danych (imion) z MySQL - począwszy od priorytetu "wysoki" po niski i wg czasu dodania.
  2. Jeśli są jakieś dane - sprawdza czy serwer www.mojastrona.pl jest dostępny. Jeśli jest dostępny - wysyła dane i zapisuje w bazie MySQL, że dane wysłał. Jeśli nie jest - nie robi nic.

Specyfikacja serwera:

  • serwer może być niedostępny (trzeba liczyć się z tym, że może nie odpowiadać - i może być to częste, stąd właśnie kolejkowanie),
  • serwer jest w stanie "przyjąć" 1 zapytanie na 30 sekund (w tym przykładzie powinien otrzymać dane w poniższej kolejności:
    imię użytkownika 1 (bo on wysłał jako pierwszy),
    imię użytkownika 3 (bo on wysłał priorytet wysoki, a że skrypt działa co 30 sekund to nie zdążył przyjąć imienia użytkownika 2),
    imię użytkownika 2 (bo ma priorytet niski, nie zmieścił się w tych 30 sekundach i wyprzedził go użytkownik 3 z wyższym priorytetem).
    ).

Oczywiście w punkcie 2 sprawdzam dodatkowo czy serwer jest dostępny i czy dane te może "przyjąć" (czyli te 30 sekund na 1 zapytanie).
Chciałem przedstawić ogólnikowo jak działa skrypt. Chcę, aby aplikacja działała natychmiastowo - nie chodzi tutaj czy mogę odczekać 3 sekundy czy nie. Ma działać w czasie rzeczywistym (po to również piszę ją w node.js).

Tak jak pisałem - największym problemem jest specyfikacja serwera - gdyby był on zawsze dostępny i mógł przetworzyć wszystkie wysyłane dane (bez względu na ich ilość) nie byłoby żadnego problemu - wtedy bezpośrednio w node.js zrobiłbym odbieranie danych i natychmiastowe wysłanie ich na serwer. Jednak specyfikacja jest jaka jest i muszę zrobić kolejkowanie. Tylko jak zrobić to w czasie rzeczywistym?

1 użytkowników online, w tym zalogowanych: 0, gości: 1