I'm working on a chat app with a friends list feature and I need to know how to reduce the number of read calls to the database. The logged in user has a document with the name of their uid and contains their username (which can be changed), and their friends in a different subcollection with two documents (one for requests and one for accepted friends). The problem is that I want to be able to list all of the user's friends to display, but I don't know how to do that without having to make an absurd amount of reads. The user would have to go through and fetch the username for all of their friends, so if the user has 50 friends, 50 reads. I was also thinking that I could have a document with all of the users in a map (uid: username), but that would be slow since you have to fetch all of the users, and the 1MB per document rule gets in the way, so I would have to split it up into multiple documents, which wouldn't scale well because it could eventually be worse than the first solution depending on how many friends the user has.
How would I implement a feature such as a friends list with the least amount of document reads?
Would I be better off using Realtime Database for a chat app like this?