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

Víceoborové dotazování na Redis pomocí Redis Spring

Viz jarní data Redis - 8.5. Sekundární indexy a:

  • 8.6. Dotaz podle příkladu
  • 8.10. Dotazy a metody dotazování

Anotace @Indexed dává pokyn Spring Data Redis (SDR), aby vytvořil sekundární index indexovaný jako sadu pro indexování pole hash.

To znamená, že když vložíte data, SDR spustí Redis sedm příkazů:

HMSET "OrgWork:19315449-cda2-4f5c-b696-9cb8018fa1f9" "_class" "OrgWork" 
    "id" "19315449-cda2-4f5c-b696-9cb8018fa1f9" 
    "CorpDetails" "CorpDetailsValueHere" "ContractType" "ContractTypeValueHere" 
    ... "Country" "Costa Rica"
SADD  "OrgWork" "19315449-cda2-4f5c-b696-9cb8018fa1f9"                           
SADD  "OrgWork:CorpDetails:CorpDetailsValueHere" "19315449-cda2-4f5c-b696-9cb8018fa1f9"
SADD  "OrgWork:ContractType:ContractTypeValueHere" "19315449-cda2-4f5c-b696-9cb8018fa1f9"
...
SADD  "OrgWork:Country:Costa Rica" "19315449-cda2-4f5c-b696-9cb8018fa1f9"

Použití Dotaz podle příkladu:

Chcete vytvořit úložiště:

interface OrgWorkRepository extends QueryByExampleExecutor<OrgWork> {
}

A poté implementujte dotaz jako v příkladu služby níže:

class OrgWorkService {

  @Autowired OrgWorkRepository orgWorkRepository;

  List<OrgWork> findOrgWorks(OrgWork probe) {
    return orgWorkRepository.findAll(Example.of(probe));
  }
}

A použít jako:

OrgWork orgWorkExample = new OrgWork();                          
orgWorkExample.setCorpDetails("CorpDetailsValueHere"); 
orgWorkExample.setContractType("ContractTypeValueHere");
...
List<OrgWork> results = orgWorkService.findOrgWorks(orgWorkExample);

V zákulisí se SDR postará o převod tohoto na příkazy Redis pro získání vašich dat pomocí kombinace SINTER a HGETALL:

SINTER   …:CorpDetails:CorpDetailsValueHere   …:ContractType:ContractTypeValueHere   ...
HGETALL "OrgWork:d70091b5-0b9a-4c0a-9551-519e61bc9ef3" 
HGETALL ...

Toto je dvoufázový proces:

  1. Načtěte klíče obsažené v průsečíku sekundárních indexů pomocí SINTER
  2. Načtěte každý klíč vrácený <1> jednotlivě pomocí HGETALL

Zatížení 100 000 za minutu by mělo být pro Redis zvládnutelné za předpokladu, že máte kvalitní server, přiměřenou velikost datové sady a dotazy jsou v průměru poněkud specifické.

SINTER má časovou složitost O(N*M) nejhorší případ, kde N je mohutnost nejmenší množiny a M je počet množin. Pro každou dimenzi v dotazu máte jednu sadu.

HGETALL je O(N), kde N je velikost hashe, ve vašem případě 7.

Jako vždy se doporučuje provést nějaké srovnávání, abyste otestovali, zda dosahujete požadovaného výkonu, a v případě potřeby jej upravte.




  1. Naplňte model mongoose polem, které není id

  2. Jednoduchá přihlašovací stránka v nodejs pomocí expresu a pasu s mongodb

  3. CHYBA:Nelze zapsat soubor pid do /var/run/mongodb/mongod.pid:Žádný takový soubor nebo adresář inf fedora 20

  4. Jak se mohu bezpečně připojit k Redis hostovanému Heroku z příkazového řádku?