I also may add that for awesomely big world, you could use random seed.
The idea behind that is that all number returned by this kind of random() function would always take your seed number at a start and return every time the same numbers.
Because you might not now it but a random doesn't really exists in a computer world. Random() function are series. You take a starting number and then always apply the same operation to have the next pseudorandom number.
Well now that I've explained that for those who didn't know.
If you apply the same random operation for creating your big world, you can understand now that if you have the same serie of randome number you'll generate the same exact world.
Then basically you could store an entire world in one single number (and I believe it's how minecraft works). Then you just have to store what has been modified in this world. Which would be far less than the big world.
The only downside is that generating the world, if it's a really big one, could take some time.
But there's some ways to split your big world in tiny ones (that's the purpose of Arsonide's gridTree plugin for Construct Classic) to avoid this overhead (also minecraft might use something like that).
That's all (: