There isn't rights answer to your question, depends on the use case and on the business model.
If you want to adopt a full decentralize ecosystem use a distributed decentralize storage (like ipfs, storj ecc)
If you want to store data offchain use legacy file system :)
Database or local system. There isnt a better way but a different model to use data.
You have at least a few alternatives.
Upgradeable contracts and proxy patterns
Yes, contracts are immutable but contracts can reference other contracts in various ways. So what you can do is use a pattern called upgradeable contracts. Typically this means you have one contract which stores the state (the actual data) and which doesn't change and can't be ...