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:
- Načtěte klíče obsažené v průsečíku sekundárních indexů pomocí
SINTER
- 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.