The answer to your first question is, as usually: it depends. If the objects are large (say hundreds of k each), there could be a slight performance hit. If the objects are relatively small, there shouldn't be a big difference.
Of course, 'slight', 'large', 'small', etc. are all very vague, so let me elaborate: Since there are very few A
and B
objects and they are queried very often, they will probably remain in RAM which is good, so the only potential bottleneck are the serializer/deserializer and network. But let's say you're doing 1000 queries per second and the objects are 1k in size then this is 1MB/s - still not a particularly high load.
If the objects are 100k in size we'd be talking about 100MB/s or roughly 1Gbit/s which is a completely different game - certainly not a high load for a powerful server, but it will likely choke a $20/m virtual private server. Then again, even at that rate, depending on your consistency constraints you might want to cache those objects for a second or two, dramatically reducing the network load for your reads.
In a nutshell, at 20 operations per second, there's not much to worry about.
As you can see from my other answers here, I very often advice against embedding, but since that data is modified very rarely, embedding should be fine.