Użyj dedykowanego silnika wyszukiwania — Elasticsearch/OpenSearch zbudowanego na odwróconym indeksie (inverted index) — zasilanego z twojej źródłowej DB przez CDC, i sharduj indeks dla skali. Twoja podstawowa baza (Postgres/MySQL) nie poradzi sobie z wyszukiwaniem tekstowym rankowanym po trafności po setkach milionów wierszy; LIKE '%term%' skanuje każdy wiersz. Silnik wyszukiwania odwraca ten problem.
Source DB ─▶ CDC (Debezium) ─▶ Kafka ─▶ Indexer ─▶ Elasticsearch/OpenSearch
(Postgres) (change stream) ├─ Shard 0 (inverted index) + replicas
├─ Shard 1
Query ─▶ Coordinator ─▶ scatter to shards ─▶ gather ─┴─ Shard N ── ranked by BM25
