Optimize the 'swaps' part of `/v2/actions`
The swaps are the biggest part of the actions at the moment.
We create a custom, progressively refreshable materialized view for swaps, and answer queries from that instead of calculating on every request.
This infrastructure can be reused for most (but not all, unfortunately) parts of the actions queries in the future.