This is what we do. So "how long" is a difficult thing to put a number on, since you're intentionally throttling it to avoid impacting the database's performance (or building up slave lag).
Events that are enriched off of other data in the same DB.
The system design predates me, but it is solid (albeit difficult to operate at this scale - usual stuff like schema changes, replication bootstrapping).
We keep hot masters (typical MySQL master-master-slave(s) setup) on standby.
Bootstrapping one from scratch (like if we need to stand up a new replica)? We restore a disk image on GCP from point in time snapshots, then let it catch up on replication. So it'll depend on how far behind it is when it comes online.
TLDR: a few hours in the worst case. ~Zero downtime in practice.
An indexed read should be no different than on a table with on the order of 100K rows. And that’s even with good ol’ spinning rust.
It’s all about logical I/O operations which, for an indexed read, would only be a handful regardless of size as it’s operating on a btree: https://en.m.wikipedia.org/wiki/B-tree
Now creating that index from scratch might take a while though…
Yep, was just sharing this experience in the comments as well. By far the most painful part is schema migrations, and that's well-solved with pt-osc or gh-osc.