Auto-scaling/sharding

Hey,
Is there a way to shard data? I’m fully aware of BigMap but I’m trying to develop something else that requires a similar mechanism/sharding. I’d be looking to spin up n duplicates of a canister and shard data between them. So if I request it in one canister it can then check all of them? Some form of manual consensus? This is required if the data takes up more than 4GB of storage (wasm limit).
Also, I’d like to dynamically spin up more duplicates if the memory is exceeded. is this possible to do? some form of metrics monitoring I guess.