sql >> Databasteknik >  >> NoSQL >> Redis

Redis filtrera efter intervall, sortera och returnera 10 först

Användningsfallet du beskriver kan inte modelleras elegant i NoSQL-lösningar. Det är inte en Redis-begränsning.

Låt mig förklara det lite mer. Du kör intervallfrågor på ett fält och sorterar på ett annat. Detta är inget som NoSQL-lösningar är bra på. Till exempel förbjuder Google App Engine sådana frågor. Ta en titt på GAE-frågebegränsningar och läs avsnittet "Egenskaper i ojämlikhetsfilter måste sorteras före andra sorteringsordningar"

För att få alla resultat som matchar ett olikhetsfilter genomsöker en fråga indextabellen för den första matchande raden och returnerar sedan alla på varandra följande resultat tills den hittar en rad som inte matchar. För att de på varandra följande raderna ska representera hela resultatuppsättningen måste raderna ordnas med olikhetsfiltret före andra sorteringsordningar.

Med det sagt kan du fortfarande köra dina frågor effektivt, men lösningen kommer inte att vara elegant.

  1. Skapa löneintervall - 0-5000, 5000-10000, 10000-15000 och så vidare
  2. Skapa uppsättningar som users_with_salary:10000-15000 . Denna uppsättning kommer att innehålla användar-ID som har lön inom det givna intervallet.
  3. Skapa på liknande sätt uppsättningar som `users_with_rating:1-2". Denna uppsättning kommer att innehålla användar-ID som har betyg inom det givna intervallet
  4. Kör nu följande pseudokod

String userids[];
for(rating = 10; rating > 0; rating--) {
  for(salary = min_salary; salary < max_salary; salary += 5000) {
      String salary_key = "users_with_salary:" + salary + "-" + (salary+5000);
      String rating_key = "users_with_rating:" + rating + "-" + (rating+1);

      userids.append(redis.sinter(salary_key, rating_key));

      if(userids.length > 10) {
         break;
      }
   }
}

Med redis 2.6 och lua scripting kan du till och med köra detta på lua-servern.

Sammanfattningsvis, om du vill köra komplexa frågor på din data, är det bäst att modellera det i en relationsdatabas.



  1. Hur skapar man en egen databas i Redis?

  2. Topp 10 funktioner i MongoDB Atlas

  3. LogicException:Se till att PHP Redis-tillägget är installerat och aktiverat

  4. HBase BlockCache 101