Question

First off, I have very minimal experience with servers and databases (I have only used it once in my entire life and only beginning to learn) and this would not exactly be a "code" question strictly speaking because it is a question concerning a concept regarding DynamoDB.. But here it is because I cannot find answer to it no matter how much I search!

I am trying to make an application where users can see if their friends are "online" or not. There will be a table that keeps track of the users who are online and offline like this:

user_id | online
1       | O
2       | X
3       | O

and when user_id 1 who has friends 2 & 3 "refreshes", 1 would be able to see that 2 is offline and 3 is online. This would normally be done by batch_get in dynamodb, but each item I read would count as one unit, meaning if user1 had 20 friends, one refresh would use up 20 read units. To me, that would cost too much, and I thought that if I made a table for each user that would hold list of their friends that shows whether they are online or not, each refresh would cost only one read unit.

user_id | friends_on_off_line
1       | {2:X, 3:O}
2       | {1:O}
3       | {1:O}

However, the values in the list would have to be a "pointer" to the first table, because I cannot update the value everytime someone goes online or offline (if 1 went offline, I would have to write 1 as offline to both tables, and in second table, write it twice, using 3 write units which would end up costing even more) So I am trying to make it so that in second table, values would point to the first table that would read whether they are online/offline and return the values as a list using only 1 read unit: like this

user_id | friends_on_off_line
1       | {pointer_to_2.online , pointer_to_3.online}
2       | {pointer_to_1.online}
3       | {pointer_to_1.online}

Is this possible in DynamoDB? If not, which service should I use and how can I make it possible? Thanks in advance!

Was it helpful?

Solution

I don't think DynamoDB is the right tool for this kind of job.

SQL databases (Mysql/PostgreSQL) both have easy designs - just use joins (pointers).

You can also look at this question regarding this area for MongoDB.

What you should ask yourself is what are the most common questions the database needs to answer and what is the update / read rate. This questions usually navigate you to the right direction when picking up a database.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top