presseportale/resources/views/livewire/admin
Kevin Adametz f8728c5bca technik: Volltext-Indizes von press_releases in eine eigene Suchtabelle auslagern
Ein FULLTEXT-Index zwingt MySQL bei JEDEM ADD COLUMN auf ALGORITHM=COPY. Auf
press_releases (>1 GB) bedeutet das einen vollständigen Rebuild, während dessen
kein Schreibzugriff möglich ist — im August hat genau das die Seite zum Stehen
gebracht, weil die wartenden Requests PHP-FPM-Worker und DB-Verbindungen
belegten.

Die durchsuchbaren Felder liegen jetzt gespiegelt in `press_release_search`,
die die Indizes trägt. Ihr Schema ist per Konstruktion stabil und wird nie
erweitert; neue Felder gehören nach press_releases, wo sie ohne Volltext-Index
Millisekunden kosten. Synchron hält sie ein Observer (alle Schreibzugriffe
laufen über Eloquent, auch der Importer), reparieren lässt sie sich mit
press-releases:reindex-search.

Der Umstieg ist über mehrere Migrationen geteilt und schaltet erst um, wenn
press_releases seine Indizes verloren hat — bis dahin sucht die Anwendung
unverändert weiter. Die Drop-Migration verweigert den Dienst, solange der
Suchindex unvollständig ist, und verwirft die gecachte Umschalt-Prüfung: Stünde
dort noch der alte Stand, setzte der Rückfallpfad sein MATCH() auf einen
soeben entfernten Index ab (MySQL-Fehler 1191) und jede Suche endete im 500er.

Dazu die betriebliche Absicherung:

- DB_LOCK_WAIT_TIMEOUT (Default 10 s) statt MySQLs einem Jahr. Requests
  scheitern bei einer laufenden Schemaänderung nach Sekunden, statt sich
  aufzustauen, bis keine Verbindung mehr frei ist.
- Sessions und Cache nach Redis, damit eine blockierte MySQL-Tabelle nicht die
  gesamte Anwendung mitreißt.
- db:online-alter als Notausgang (pt-online-schema-change), falls eine der
  kleinen FULLTEXT-Tabellen doch einmal groß wird. Percona-Toolkit ist
  bewusst nicht Teil des Standard-Setups.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-01 11:04:43 +00:00
..
categories security: Rechteausweitung schließen & Admin-Panel feingranular gaten (K1, H1, H2, M8) 2026-07-14 13:48:50 +00:00
companies admin: Newsletter mit Abmelde-Liste, Follow-up-Filtern und gedrosseltem Versand 2026-07-22 12:38:47 +00:00
contact-messages security: Stored-XSS über page_url im Kontaktformular schließen (H3) 2026-07-14 13:49:05 +00:00
contacts security: Rechteausweitung schließen & Admin-Panel feingranular gaten (K1, H1, H2, M8) 2026-07-14 13:48:50 +00:00
coupons 5.4 (Teil 6): page-header in payments/invoices/legal/coupons/reports/newsletter 2026-07-01 10:36:33 +00:00
footer-codes security: Rechteausweitung schließen & Admin-Panel feingranular gaten (K1, H1, H2, M8) 2026-07-14 13:48:50 +00:00
invoices 5.4: <x-portal.table-pagination> + 13 Wrapper ersetzt 2026-07-02 08:35:37 +00:00
legal-requests recht: Meldeverfahren v2 Phasen 5+7 — DSGVO-Strukturformular, 10-€-Checkout mit KI-Vorprüfung, Triage & Panel-Modal 2026-07-23 13:02:57 +00:00
newsletter admin: Newsletter mit Abmelde-Liste, Follow-up-Filtern und gedrosseltem Versand 2026-07-22 12:38:47 +00:00
payments security: Rechteausweitung schließen & Admin-Panel feingranular gaten (K1, H1, H2, M8) 2026-07-14 13:48:50 +00:00
presets 5.5: <x-portal.alert> + 6 Flash-Bloecke umgestellt 2026-07-02 08:39:44 +00:00
press-releases technik: Volltext-Indizes von press_releases in eine eigene Suchtabelle auslagern 2026-09-01 11:04:43 +00:00
reports web: Mail-Abmeldungen landen im Aktivitäts-Verlauf 2026-07-21 10:26:49 +00:00
roles security: Rechteausweitung schließen & Admin-Panel feingranular gaten (K1, H1, H2, M8) 2026-07-14 13:48:50 +00:00
users admin: Credits und freie PMs ohne Zahlung gutschreiben 2026-07-21 13:06:01 +00:00
portal-switcher.blade.php Rebrand Hub+Flux 2026-05-20 15:44:15 +02:00
users.blade.php admin: Benutzer-Übersicht verlinkt die Detailseite zusätzlich zur Schnellansicht 2026-07-21 13:34:02 +00:00