Scaling up
Vertical escalation is putting more memory capacity (main and / or mass) and processing. That is, it is buying more powerful hardware to handle the message.
In some cases you just need to create more processes that are doing scaling up , as long as the hardware already supports this increase. There are cases that separate the database into multiple storage devices either a vertical scale, again it is scaling on the same machine.
The investment is basically in hardware. Buying more processor. memory and storage already has an increased capacity.
In some cases it's more a matter of making a simple setup to achieve what the single hardware already supports.
Scaling out
Horizontal Scheduling is putting more computers to run the errand. Of course they add more processing power and memory as well, in total sum.
It is much more complex to scale horizontally from both a management and a programming point of view, although there are tools to facilitate it. It is not just putting computers, they need to "talk" consistently and appropriately.
Incredibly, it may be cheaper than vertical, at least in the cost of acquiring infrastructure as it is possible to get more simple and more common hardware that is usually cheaper by the scale of production. Of course, the cost of management and development can change the total cost.
Apart from the cases that vertical would not have the necessity, after all this strategy has a limit that in thesis the horizontal does not have, the horizontal has the advantage of being more tolerant to failures, or at least being easier to have the operation of back in the event of a crash.
Differences
Any minimally structured database can do both types of scheduling. The vertical does not require any specific properties unless it separates data on multiple storage devices or allows multiple processing lines. The horizontal requires mechanisms that allow and, if possible, facilitate horizontal scaling. It does not matter whether it is non-relational type or not, whether it uses SQL or not.
I do not know other types, nor do I know if it's possible. There are variations of these forms, especially in the horizontal there are many strategies and techniques. You can also do a hybrid escalation.
Applications that require horizontal scaling are rare. At least in the sense of same scale. It may be useful to do so for the greater reliability of having more than one node serving the requests, but not that you need more resources. The bulk of the need comes from high demand web applications or very specific processing.
It may not look like the same thing but has a question that is related , showing that scaling anything horizontally can seems the solution, but does not always solve or make up for the difficulty.