We will definitely needs some kind of sharding when the user number and the amount of data grows. I'm wondering if partitioning by ID fragment is a good idea. If you read a list of events almost every event needs to be read from a different relay. It might be better to optimize for reading multiple events of a particular author and by partitioning by pubkey instead.