sql >> Databasteknik >  >> NoSQL >> Redis

Användarmatchningsalgoritm

Det skulle vara bra att veta vilken typ av data vi pratar om. Hur många användare finns det? Hur många kommer att vara online i genomsnitt? Hur är förhållandet mellan "sedda användare" jämfört med alla användare (glesa vs. täta)?

Ändring av din algoritm Lägg inte den första utan välj ett slumpmässigt element från uppsättningen onlineanvändare. Detta bör förbättra balanseringen och kan hjälpa till med amorterad komplexitet beroende på förhållandet mellan dessa två uppsättningar!

Alternativ algoritm (mer strukturerad; fortfarande dåligt i värsta fall; borde vara bra om sedda är sparsamt )

  • Håll dig syns som ett balanserat träd (O(log n) infogning)
  • Håll online som ett balanserat träd.
  • Medan inte tillräckligt många användare har valts:
    • Sök efter första luckan i seen (t.ex. [0,1,3,7] -> 2; O(log n) enligt SO-länk)
    • Sök efter första användare>=gap-värde (O(log n))
    • Om användaren
    • -> välj
    • Annat
    • -> lägg till chosen-gap-value tillfälligt (för detta ögonblick; modellbeslut hur ofta du ska uppdatera online ) till sett ELLER begränsa sökningen på något sätt till> vald-gap-värde (O(log n))

Beroende på data bör detta fungera mycket bra om data är enorma och sedda är sparsamt!




  1. finns det något sätt att få klientens IP i redis?

  2. spring-redis kan inte ansluta till fjärrvärden

  3. Hur fungerar Redis PubSub-prenumerationsmekanismen?

  4. Korrekt sätt att använda Redis Connection Pool i Python