You can separate the concepts of a logical database and a physical databases.
Imagine if you had an array of data too large for a single machine
but you still want to treat it as a single array.
So the logical Array can contain elements 1 through L
but suppose each machine has enough memory for M elements.
The first machine can have elements [1, M] the next machine [M+1,2M] next [2M + 1,3M] etc.. etc.. (but from the machines perspective they are all local elements 1 through M)
Leaving ELI5 territory (but you mentioned you are a developer):
So to access the LogicalElement(Y) you need to access machine #(Y/M integer division) and access its LocalElement (Y%M) (modulo)
so suppose each machine could store 100 million elements of a 1000 million data array. And you wanted to access element number 231 of the 1000 elements.
231 / 100 = Machine #2 , 231 modulo 100 = 31
So the 231 millionth element is located on server #2 on its 31th million element.
The main concept I was demonstrating is you can keep thinks separated logically and physically for performance things would be done differently.
Since you mentioned you are a developer take a look at the lecture videos in this course it will help you catch up to these latest techniques
Parallel, Concurrent, and Distributed Programming in Java Specialization
https://www.coursera.org/specializations/pcdp
(this is in java if you want to do the whole courses , if you don't have experience with java just watch the theoretical videos only )
BTW it should be free to access the videos if you don't want to do the course for credit.