Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PDO]Asynchroniczne zapytania do bazy
Forum PHP.pl > Forum > PHP
Mackos
Pracuję nad małym serwerem hostującym reklamy, i chcę teraz przygotować sam mechanizm serwujący.
Co jest oczywiste każde wyświetlenie reklamy wiąże się z zapytaniem do bazy i o ile wyciągnięcie odpowiedniej reklamy można odciążyć przez memcache, o tyle zastanawiam się nad zapisem danych o wyświetleniu do bazy.
W związku z czym chciałem zapytać czy znacie lub macie może pomysł na generowanie asynchronicznych zapytań do bazy, które dałoby się zrealizować bez memcache i z obsługą PDO?
by_ikar
Widziałem ostatnio kilka takich pomysłów jak i realizacji w node.js + redis, lub nawet samo node.js z użyciem dirty (coś jak memcached). No ale to też zależy jak mały lub jak duży ten serwer hostujący reklamy ma być.. Bo może być tak że samo php i mysql ci wystarczą.
Mackos
Wiesz co ten serwer już jest i jest spory (aktualnie apka podzielona na 4 serwery w tym 3 VPS'y).
Działa tak że po odpaleniu, pobiera nagłówki, na ich podstawie przypisuje reklamę do pokazania.
Losuje reklamę za pomocą albo MySQL albo jeśli hash nagłówków odwiedzająceg już się powtórzył to reklamę ładuje z memcache na podstawie wcześniejszego selectu.
Jeśli hash odwiedzającego jest unikalny zapisuje całe info do bazy/
Teraz sprawa ma się tak że selecty da się przeżyć no bo nie są jakieś ciężkie + memcache, ale jednoczesny INSERT to już dużo (bo reklama ma się ładować ultra szybko).
Więc szukam sposobu żeby opóźnić cały proces wrzucania insertów lub wrzucać je grupowo - zebrać wielowymiarową tablicę nagłówków i innym skryptem ją dodawać do bazy.
by_ikar
No to node.js + dirty byłoby tym czego potrzebujesz (dirty jest fajny gdzieś do miliona rekordów, potem już lepiej użyć jakiegoś redisa czy innego mongo). Ale możesz to przecież również zrobić na poziomie memcache. Wrzucasz takie dane do memcache z konkretnym prefixem, następnie jakiś cron w tle sobie lata i powiedzmy co 2-3 minuty zbiera te dane i robi inserty na bazie. Dane będą aktualizowane, a obciążenie nie będzie się generować bezpośrednio podczas wyświetlania reklamy.

Ale serio, właśnie sprawdzałem i można nawet znaleźć kilka gotowych ad serwerów w node.js.
Mackos
W gruncie rzeczy masz racje.
Nie chciałem robić tego z zapisywaniem do memcache bo co jeśli serwer memcache padnie. ALE obecnie działa bez tego zapisywania i daje radę - więc chyba tak najwygodniej to załatwić wink.gif
Dzięki.
by_ikar
Jeżeli memcache padnie, na to też jest sposób. Nie do końca jestem pewien czy masz zainstalowane jakiegoś cachera opcode (xcache, apc) ale one również udostępniają podobną funkcjonalność co memcache(d), czyli przechowywanie jakichś danych w pamięci ram. Możesz zrobić tak że wstawisz sobie warunek w obiekcie który zapisuje/odczytuje dane z memcache i jeżeli wystąpi błąd, przerzucasz działanie na xcache, apc czy coś podobnego. No i jeżeli nie masz zainstalowanego żadnego cachera, to polecam, bo zyskujesz na tym sporo (mniejsze zużycie pamięci, mniej operacji IO, oraz zmniejszenie czasu potrzebnego na request).
Mackos
Dzięki, własnie się bawię xcache - jak narazie wszystko po upgrade ładnie śmiga smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.