Pro takové řešení sklizně bych doporučil vícestupňový přístup. Redis je dobrý v komunikaci v reálném čase . Redis je navržen jako úložiště klíčů a hodnot v paměti a zdědil některé velmi pěkné výhody paměťové databáze:operace se seznamem O(1). Dokud je na serveru RAM k použití, Redis nezpomalí tlačení na konec vašich seznamů, což je dobré, když potřebujete vkládat položky tak extrémní rychlostí. Redis bohužel nedokáže pracovat s datovými sadami většími, než kolik máte RAM (pouze zapisuje na disk, čtení slouží k restartování serveru nebo v případě havárie systému) a škálování musíte provést vy a vaše aplikace . (Obvyklým způsobem je šíření klíčů mezi četné servery, což implementují některé ovladače Redis, zejména ovladače pro Ruby on Rails.) Redis má také podporu pro jednoduché zasílání zpráv pro publikování/odběr, což může být občas užitečné.
V tomto scénáři je Redis „první fáze“. Pro každý konkrétní typ události vytvoříte v Redis seznam s jedinečným názvem; máme například „stránku zobrazena“ a „kliknutí na odkaz“. Pro jednoduchost chceme zajistit, aby data v každém seznamu měla stejnou strukturu; kliknutý odkaz může mít uživatelský token, název odkazu a URL, zatímco zobrazená stránka může mít pouze uživatelský token a URL. Vaším prvním zájmem je zjistit, co se stalo, a cokoli absolutně nezbytné data, která potřebujete, jsou odeslána.
Dále tu máme několik jednoduchých zpracovatelských pracovníků, kteří tyto zběsile vkládané informace z rukou Redis požádají, aby odebrala položku z konce seznamu a předala ji. Pracovník může provést jakékoli úpravy/deduplikaci/vyhledání ID potřebné pro správné uložení dat a předání je na trvalejší úložiště. Vypalte tolik těchto pracovníků, kolik potřebujete, aby zatížení paměti Redis bylo únosné. Pracovníky můžete napsat do čehokoli, co si přejete (Node.js, C#, Java, ...), pokud to má ovladač Redis (většina webových jazyků už to má) a jeden pro požadované úložiště (SQL, Mongo atd.). )
MongoDB je dobrý v ukládání dokumentů . Na rozdíl od Redis je schopen pracovat s databázemi většími než RAM a sám o sobě podporuje sharding/replikaci. Výhodou MongoDB oproti možnostem založeným na SQL je, že nemusíte mít předem určené schéma, můžete kdykoli změnit způsob ukládání dat, jak chcete.
Navrhoval bych však Redis nebo Mongo pro fázi „prvního kroku“ uchovávání dat pro zpracování a pro ukládání post-zpracovaných dat použít tradiční nastavení SQL (možná Postgres nebo MSSQL). Sledování chování klientů mi zní jako relační data, protože možná budete chtít přejít na „Ukázat všechny, kteří si prohlížejí tuto stránku“ nebo „Kolik stránek si tato osoba v daný den prohlédla“ nebo „Který den měl celkově nejvíce diváků? ". Mohou existovat ještě složitější spojení nebo dotazy pro analytické účely, se kterými přicházíte, a vyspělá řešení SQL dokážou udělat mnoho z tohoto filtrování za vás; NoSQL (konkrétně Mongo nebo Redis) nemůže provádět spojení nebo složité dotazy napříč různými sadami dat.