It is always best if requirements can be given with some precision. For instance, we expect no more than 1,000 users to be hitting the database simultaneously is a clear design requirement. "There will be a big number of users" is much less helpful. Of course, we can not always predict how much traffic a web application will get and requirements often change over time.
If a database will be experiencing far more reads than writes, then caching data from the database can improve performance. This was the topic of a recent podcast that you might want to listen to: http://javaposse.com/java-posse-399-roundup-12-distributed-caching
Spreading a database among many servers is a complicated task because you need to deal with synchronization issues. Your best bet is to find a service or API that takes care of this issue for you. You can use MySQL, (see this question) but another database designed for this sort of scaling is probably a better choice. Take a look at hadoop.