Horizontal sharding is a great way to scale with nearly unlimited capacity. With horizontal sharding, we split up data based on the characteristics of a given row and use a sharding key to determine which server each row should be stored on.
Let's establish the distinction between a physical shard and a logical shard. A physical shard is the actual MySQL server that runs a process to operate the database, and the corresponding data. In a sharded database setup, you will typically have several of these.
A logical shard is a subset of the rows of the database that are stored on some server. It is possible for there to be a 1:1 relationship between physical shards and logical shards, but a horizontally sharded DB can also be set up so that multiple logical shards "share" the same physical shard.
Horizontal sharding provides the ultimate scaling solution for big data. When set up correctly, there are no limits on the size you can scale your database to.
The significant tradeoff here with horizontal sharding is that, without specialized management software, it can be technically complex to manage. Most database servers, including MySQL, do not support sharding natively. Thus, if using vanilla MySQL, one option is to build sharding logic into your application code to determine how the data is split up, how many shards are available, how to route requests to those shards, and how to connect to them. Alternatively, you could build your own custom proxy layer that sits between your app server and MySQL instances to handle this logic for you.
PlanetScale uses Vitess, which has a superb architecture for managing shards. Through Vitess, we can support both vertical and horizontal sharding, and allow our customers to combine the two approaches.