Events write to the transaction log, not storage. Contracts cannot read logs; indexers and front-ends can. Up to three parameters may be `indexed`, which puts them in topics so they can be filtered.
event Staked(address indexed user, uint256 amount); emit Staked(msg.sender, amount);
Index what you filter on (addresses, ids) and leave amounts unindexed so they stay in the readable data section.