Zasekli jste se u dotazování se svým aktuálním technologickým zásobníkem. MySQL nemá žádný dobrý způsob, jak vám poslat upozornění, že je něco nového k vidění.
(Můžete zvážit přidání subsystému pro řazení zpráv, jako je například RabbitMQ, ale to by vyžadovalo velkou změnu struktury vaší aplikace).
Několik pokynů pro zpracování dotazování s co nejnižšími náklady.
-
Nastavte očekávání uživatelů na několik sekund latence zpráv, nikoli milisekundy.
-
Dotazujte se tak často, jak je potřeba, abyste splnili očekávání ohledně latence.
-
Vyhněte se dotazování na velké množství dat s každým dotazem. Jak to můžete udělat?
A. Při každém spuštění dotazu uložte nejnovější časové razítko
b. Nepoužívejte
SELECT *
. Místo toho uveďte názvy sloupců, které skutečně potřebujete. To umožňuje optimalizátoru MySQL snížit náklady na vaše dotazy.C. Nechte své dotazy provádět
SELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
takže nové položky ze svého stolu získáte pouze v pořádku. Pokud váš systém není příliš zaneprázdněn, tyto SELECTy často nevrátí žádné řádky. To je dobře.d. Ujistěte se, že máte vícesloupcový index na časovém razítku a ostatních sloupcích v příkazu SELECT. Říká se tomu index pokrytí .
E. Ihned po otevření připojení k MySQL zadejte tento příkaz SQL. Umožňuje MySQL načítat vaše data s menším konfliktem s ostatními klienty MySQL, kteří do tabulky vkládají řádky.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Pokud to děláte s AJAXem z prohlížečů vašich uživatelů, chcete do požadavků AJAX zahrnout nejnovější časové razítko, abyste mohli doručovat nové potřebné nové položky do prohlížeče každého uživatele.