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

Potřebujete pomoc s konceptualizací v Redis/NoSQL

Máte pravdu, že s Redis jsou dostupné pouze jednoduché datové struktury a nelze je skládat podle hodnoty (jako byste to mohli udělat s databází orientovanou na dokumenty, jako je CouchDB nebo MongoDB). Je však možné skládat datové struktury pomocí odkazu, a to je velmi běžný vzor.

Položky obsažené v sadě mohou být například klíče pro jiné objekty (seznamy, hashovací tabulky, jiné sady atd...). Zkusme to aplikovat na váš příklad.

Chcete-li modelovat vztah mezi zákazníky a zařízením+portem, můžete použít sady obsahující ID zákazníků. Pro uložení informací o zákaznících stačí jedna hashovací tabulka na zákazníka.

Zde jsou zákazníci:

hmset c:1 name Smith protocol tcp snmp_dest 127.0.0.1 syslog_dest 127.0.0.2
hmset c:2 name Jackson protocol udp snmp_dest 127.0.0.1 syslog_dest 127.0.0.2
hmset c:3 name Davis protocol tcp snmp_dest 127.0.0.3 syslog_dest 127.0.0.4

Klíče těchto záznamů jsou c:ID

Přidružme dva z nich k zařízení a portu:

sadd d:Los_Angeles:11 2 3

Klíčem této sady je d:device:port. Předpony c:a d:jsou pouze konvencí. Pro každé zařízení/port by měla být vytvořena jedna sada. Daný zákazník může patřit k několika sadám (a tedy přidružen k několika zařízením/portům).

Abychom nyní našli zákazníky se způsoby doručení připojenými k tomuto zařízení/portu, musíme pouze načíst obsah sady.

smembers d:Los_Angeles:11
1) "2"
2) "3"

pak lze získat odpovídající informace o zákaznících zřetězením řady příkazů hgetall:

hgetall c:2
hgetall c:3
1) "name"
2) "Jackson"
3) "protocol"
4) "udp"
5) "snmp_dest"
6) "127.0.0.1"
7) "syslog_dest"
8) "127.0.0.2"
1) "name"
2) "Davis"
3) "protocol"
4) "tcp"
5) "snmp_dest"
6) "127.0.0.3"
7) "syslog_dest"
8) "127.0.0.4"

Nebojte se množství příkazů. Jsou velmi rychlé a většina klientů Redis má schopnost zpracovat dotazy tak, že je potřeba pouze minimální počet zpátečních cest. Pouhým použitím jednoho smembers a několika hgetall lze problém vyřešit pouze dvěma zpátečními cestami.

Nyní je možné optimalizovat o něco dále díky všudypřítomnému příkazu SORT. Toto je pravděpodobně nejsložitější příkaz v Redis a lze jej použít k uložení zpáteční cesty.

sort d:Los_Angeles:11 by nosort get c:*->name get c:*->protocol get c:*->snmp_dest get c:*->syslog_dest
1) "Jackson"
2) "udp"
3) "127.0.0.1"
4) "127.0.0.2"
5) "Davis"
6) "tcp"
7) "127.0.0.3"
8) "127.0.0.4"

Jedním příkazem načte obsah sady zařízení/portů a načte odpovídající informace o zákazníkovi.

Tento příklad byl triviální, ale obecněji, i když pomocí Redis můžete reprezentovat složité datové struktury, není to okamžité. Model si musíte pečlivě promyslet jak z hlediska struktury, tak z hlediska přístupu k datům (tj. při návrhu se držte svých dat A vaše případy použití).




  1. Monitorování databáze bez agenta pomocí ClusterControl

  2. Agregace Mongodb $group, omezte délku pole

  3. Jak vynutit cizí klíče v databázích NoSql (MongoDB)?

  4. Jak opravit svůj mongodb?