Ich arbeite an einer Anwendung, bei der Aktualisierungs- / Auswahlabfragen in der Datenbank sehr häufig ausgeführt werden.
Ich habe eine Basistabelle (A), die ungefähr 500 Datensätze für eine Entität pro Tag enthält. Und für jeden Benutzer im System wird eine Variation dieser Entität basierend auf einigen Einstellungen des Benutzers erstellt und sie werden in einer anderen Tabelle (B) gespeichert. Dies geschieht durch einen Cron-Job, der jeden Tag um Mitternacht ausgeführt wird.
Wenn sich also 10.000 Benutzer und 500 Datensätze in Tabelle A befinden, enthält dieser Tag 5 Millionen Datensätze in Tabelle B. Ich speichere immer Daten für einen Tag in diesen Tabellen und archiviere um Mitternacht historische Daten in HBase. Dieses Setup funktioniert einwandfrei und ich habe bisher keine Leistungsprobleme.
In letzter Zeit haben sich die Geschäftsanforderungen geändert, und jetzt ändern sich einige Attribute in der Basistabelle A (für 15 bis 20 Datensätze) alle 20 Sekunden. Auf dieser Grundlage muss ich einige Werte für alle diese Variationsdatensätze in Tabelle B für neu berechnen Alle Nutzer. Obwohl sich nur 20 Stammdatensätze ändern, muss ich 200.000 Benutzerdatensätze neu berechnen und aktualisieren, was mehr als 20 Sekunden dauert. Bis dahin erfolgt die nächste Aktualisierung schließlich, sodass alle Select-Abfragen in die Warteschlange gestellt werden. Ich erhalte ungefähr 3 Anfragen / 5 Sekunden von Online-Benutzern, was zu 6-9 ausgewählten Abfragen führt. Um auf eine API-Anfrage zu antworten, verwende ich immer die Felder in Tabelle B.
Ich kann mehr Rechenleistung kaufen und diese Situation lösen, aber ich bin an einem richtig skalierten System interessiert, das sogar eine Million Benutzer verarbeiten kann.
Kann hier jemand eine bessere Alternative vorschlagen? Hilft mir die relationale Datenbank nosql + hier? Gibt es Plattformen / Datenspeicher, mit denen ich Daten häufig aktualisieren kann, ohne sie zu sperren, und die mir gleichzeitig die Flexibilität geben, ausgewählte Abfragen für verschiedene Felder in einer Entität auszuführen?