Ich arbeite am Design für ein RoR-Projekt für mein Unternehmen, und unser Entwicklungsteam hat bereits eine Debatte über das Design, insbesondere die Datenbank, geführt.
Wir haben ein Modell namens Message
, das beibehalten werden muss. Es ist ein sehr, sehr kleines Modell mit nur drei DB-Spalten außer der ID, aber es wird wahrscheinlich VIELE dieser Modelle geben, wenn wir zur Produktion gehen. Wir sehen uns bis zu 1.000.000 Einfügungen pro Tag an. Die Modelle werden immer nur von zwei Fremdschlüsseln durchsucht, die indiziert werden können. Außerdem müssen die Modelle nie gelöscht werden, aber wir müssen sie auch nicht behalten, wenn sie ungefähr drei Monate alt sind.
Wir fragen uns also, ob die Implementierung dieser Tabelle in Postgres ein erhebliches Leistungsproblem darstellt. Hat jemand Erfahrung mit sehr großen SQL-Datenbanken, um uns zu sagen, ob dies ein Problem sein wird oder nicht? Und wenn ja, mit welcher Alternative sollten wir gehen?
quelle
Antworten:
Zeilen pro Tabelle sind für sich genommen kein Problem.
Ungefähr 1 Million Zeilen pro Tag für 90 Tage sind also 90 Millionen Zeilen. Ich sehe keinen Grund, warum Postgres damit nicht umgehen kann, ohne alle Details zu wissen, was Sie tun.
Abhängig von Ihrer Datenverteilung können Sie eine Mischung aus Indizes, gefilterten Indizes und Tabellenpartitionierung verwenden, um die Geschwindigkeit zu erhöhen, sobald Sie feststellen, welche Leistungsprobleme Sie möglicherweise haben oder nicht. Ihr Problem wird bei jedem anderen mir bekannten RDMS dasselbe sein. Wenn Sie nur 3 Monate Datenentwurf in einem Prozess benötigen, um die Daten zu entfernen, benötigen Sie keine weiteren. Auf diese Weise haben Sie ein konsistentes Datenvolumen in der Tabelle. Wenn Sie Glück haben, wissen Sie, wie viele Daten vorhanden sein werden, testen Sie sie auf Ihr Volumen und sehen Sie, was Sie erhalten. Das Testen einer Tabelle mit 90 Millionen Zeilen kann so einfach sein wie:
https://wiki.postgresql.org/wiki/FAQ
quelle
Eine andere Möglichkeit, Ihre Abfragen in einer Tabelle mit> 100 Millionen Zeilen erheblich zu beschleunigen, besteht darin, die Tabelle im Index, die am häufigsten in Ihren Abfragen verwendet wird, außerhalb der Geschäftszeiten zu gruppieren. Wir haben eine Tabelle mit> 218 Millionen Zeilen und haben 30-fache Verbesserungen festgestellt.
Für eine sehr große Tabelle ist es außerdem eine gute Idee, einen Index für Ihre Fremdschlüssel zu erstellen.
quelle