I know Solana does not have a HashMap data structure as a design pattern.
Does that mean developers should use program derived addresses (PDAs) for each user or stake pool instead of making an array/vector of users or stake pools for data storage?
This question is a bit subjective, since it's asking an opinion of how to handle storing lots of information on-chain with Solana. Both options are possible: you can store a vector / array on-chain in one account, or you can use program-derived addresses as a sort of on-chain HashMap. It's a tradeoff.
If you store a vector in an account, you are limited to the size allocated at the start, but it may be quicker and cheaper to store a certain number of values.
If you need to store a huge amount of data and you have a good model for generating keys, then creating accounts at program-derived addresses may be a good fit. You will need to pay rent for each account, so it may be expensive if you're not storing a lot of data in each account. You can use solana rent <ACCOUNT_SIZE> to estimate the costs for both approaches.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With