sql >> Databáze >  >> NoSQL >> Redis

Zvyšování stovek počítadel najednou, redis nebo mongodb?

V závislosti na tom, jak je struktura vašeho klíče rozložena, bych doporučil zřetězení příkazů zincr. Máte jednoduchý "commit" trigger - požadavek. Pokud byste měli iterovat své parametry a zincr každý klíč, pak na konci požadavku předejte příkaz pro provedení, který bude velmi rychlý. Implementoval jsem systém, jaký popisujete, jako cgi i aplikaci Django. Nastavil jsem klíčovou strukturu v souladu s tímto:

YYYY-MM-DD:HH:MM -> seřazená sada

A byl schopen zpracovat něco jako 150 000-200 000 přírůstků za sekundu na straně redis s jediným procesem, což by pro váš popsaný scénář mělo stačit. Tato klíčová struktura mi umožňuje získat data na základě časových oken. Ke klíčům jsem také přidal expiraci, abych se vyhnul psaní procesu čištění databáze. Pak jsem měl cronjob, který by prováděl operace nastavení pro „souhrnné“ statistiky na hodinové, denní a týdenní pomocí variant výše uvedeného klíčového vzoru. Přináším tyto myšlenky, protože jde o způsoby, jak můžete využít vestavěné možnosti Redis k zjednodušení hlášení. Existují i ​​jiné způsoby, jak to udělat, ale zdá se, že tento vzor funguje dobře.

Jak poznamenal eyossi, globální zámek může být skutečným problémem u systémů, které provádějí souběžné zápisy a čtení. Pokud to píšete jako systém v reálném čase, souběžnost může být problém. Pokud se jedná o systém analýzy protokolu „end if day“, pak by pravděpodobně nespustil spor, pokud v době vstupu nespustíte více instancí analyzátoru nebo sestav. S ohledem na udržení rychlého čtení V Redis bych zvážil nastavení instance redis pouze pro čtení, která by byla podřízena té hlavní. Pokud jej umístíte na server, na kterém je spuštěna sestava, a nasměrujete na ni proces sestavování, generování sestav by mělo být velmi rychlé.

V závislosti na dostupné paměti, velikosti datové sady a na tom, zda v instanci redis ukládáte jakýkoli jiný typ dat, můžete zvážit spuštění 32bitového serveru redis, abyste snížili využití paměti. Instance 32b by měla být schopna uchovat mnoho tohoto typu dat v malé části paměti, ale pokud spuštění normálního 64bitového Redis nezabírá příliš mnoho paměti, můžete ji použít. Jako vždy otestujte své vlastní vzorce použití a ověřte



  1. Použijte mongoexport s --query pro ISODate

  2. Událost na klíč vyprší

  3. Vzdálenost tisku MongoDB mezi dvěma body

  4. Push and Set Operations v Same MongoDB Update