Mysql
 sql >> Database >  >> RDS >> Mysql

Amazon DynamoDB - Progettazione di tabelle basate sulle amicizie

La domanda è:un utente può avere una lista di amici. Dato un utente, vogliamo ottenere tutti i suoi amici (nome + stato online/offline). Come lo facciamo in DynamoDB?

Innanzitutto per ogni utente è necessario assegnare un user_id. Quello sarà l'identificatore univoco per quell'utente, in altre parole, un puntatore.

Puoi utilizzare una tabella Hash-Range per archiviare i dati dell'amicizia. Sia la chiave hash che la chiave dell'intervallo di questa tabella saranno user_id. In DynamoDB ogni chiave hash può avere più chiavi di intervallo. La chiave hash sarà un utente e possiamo memorizzare l'ID utente di tutti i suoi amici nella chiave dell'intervallo.

supponendo che utente_1 sia amico di utente_2 e utente_3

"Friendship table in DynamoDB"
HashKey   RangeKey
user_1    user_2
user_1    user_3
user_2    user_1
user_3    user_1

Puoi avere un'altra tabella che memorizza le informazioni sull'utente

"User table in DynamoDB"
HashKey   name    isLoggedin
user_1    J       true
user_2    swaggyp false
user_3    furion  false

Ora vuoi ottenere l'amico dell'utente_1. Puoi eseguire una query DynamoDB con hash_key uguale a user_1. Nell'esempio sopra, otterrai 2 righe:

(utente_1, utente_2) (utente_1, utente_3).

Ora sai che user_2 e user_3 sono amici di user_1. Puoi utilizzare Utilizza la tabella per ottenere lo stato online di utente_2 e utente_3.