A questão é, um usuário pode ter uma lista de amigos. Dado um usuário, queremos obter todos os seus amigos (nome + status online/offline). Como fazemos isso no DynamoDB?
Primeiro, para cada usuário, você precisa atribuir um user_id. Esse será o identificador exclusivo desse usuário, ou seja, um ponteiro.
Você pode usar uma tabela Hash-Range para armazenar os dados de amizade. Tanto a chave de hash quanto a chave de intervalo desta tabela serão user_id. No DynamoDB, cada chave de hash pode ter várias chaves de intervalo. A chave de hash será um usuário e podemos armazenar o ID de usuário de todos os amigos dela na chave de intervalo.
assumindo que user_1 é amigo de user_2 e user_3
"Friendship table in DynamoDB"
HashKey RangeKey
user_1 user_2
user_1 user_3
user_2 user_1
user_3 user_1
Você pode ter outra tabela que armazena informações do usuário
"User table in DynamoDB"
HashKey name isLoggedin
user_1 J true
user_2 swaggyp false
user_3 furion false
Agora você deseja obter o amigo de user_1. Você pode fazer uma consulta do DynamoDB com hash_key igual a user_1. No exemplo acima, você obterá 2 linhas:
(usuário_1, usuário_2) (uiser_1, usuário_3).
Agora você sabe que user_2 e user_3 são amigos de user_1. Você pode usar a tabela User para obter o status online de user_2 e user_3.