Hello, ZK2,
This answer took me by surprise.
I had assumed that each user was assigned a unique identifier, and that storing the list of friends was as simple as storing this list of IDs. The identifiers would not have to be very large, I would think an integer or possibly long integer to be generous (or the equivalent in whatever language is being used) would be sufficient. The list would then only need to be of these identifiers I would think. All other data would be stored in the central entry for the user, which would be necessary no matter how long the list.
Running your own friend system was always going to be a difficult, resource intensive task. I am quite impressed that you designed and implemented a basic, functional system in this time. The system as implemented seems like a solid basis for a new system.
However, it needs to grow from here. This system is NOT an improvement over the broken Facebook based system, For those of us that the system was functioning, but badly, we are still in the position of having a base group of 20 friends, and changing one of these for another being a time consuming, risky move. There are many people who had no problems with Facebook, and they are straight out losing functionality with this change.
The cost of adding a player is not just that of looking up their name in an external database each person will need to maintain, but of then going through the invitation process each and every time. With the Facebook friend system, maintaining that connection was relatively inexpensive. Here, it requires devoting a rare and precious friend spot to maintain.
I suppose that one option would be to treat the friend list like pond slots, where you can use pearls to buy additional capacity. You start with a base of 20 friends, adding the first 5 is relatively inexpensive, and gets pricier after that.
Another way would be to find a way to make the two systems coexist, so users could choose to have friends in both worlds.
Please, find some way to address this limitation.
Laura