it-swarm.com.de

Wie groß ist zu groß für eine PostgreSQL-Tabelle?

Ich arbeite am Entwurf eines RoR-Projekts für mein Unternehmen, und unser Entwicklungsteam hat bereits eine Debatte über den Entwurf, 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, es wird jedoch wahrscheinlich VIELE dieser Modelle geben, wenn wir zur Produktion gehen. Wir betrachten bis zu 1.000.000 Einfügungen pro Tag. 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 aufbewahren, 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, welche Alternative sollten wir wählen?

85
Dylan Karr

Zeilen pro Tabelle sind für sich genommen kein Problem.

Eine Million Zeilen pro Tag für 90 Tage sind also ungefähr 90 Millionen Zeilen. Ich sehe keinen Grund, warum Postgres nicht damit 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 Arbeit zu beschleunigen, sobald Sie feststellen, welche Leistungsprobleme auftreten können oder nicht. Ihr Problem ist bei allen anderen mir bekannten RDMS gleich. Wenn Sie in einem Prozess nur Datenentwürfe im Wert von 3 Monaten benötigen, um die Daten zu bereinigen, brauchen Sie keine weiteren Daten mehr. Auf diese Weise haben Sie ein konsistentes Datenvolumen auf dem Tisch. Wenn Sie Glück haben, wissen Sie, wie viele Daten vorhanden sind, 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:

select x,1 as c2,2 as c3
from generate_series(1,90000000) x;

https://wiki.postgresql.org/wiki/FAQ

Limit   Value
Maximum Database Size       Unlimited
Maximum Table Size          32 TB
Maximum Row Size            1.6 TB
Maximum Field Size          1 GB
Maximum Rows per Table      Unlimited
Maximum Columns per Table   250 - 1600 depending on column types
Maximum Indexes per Table   Unlimited
85
Kuberchaun

Eine andere Möglichkeit, Ihre Abfragen in einer Tabelle mit mehr als 100 Millionen Zeilen erheblich zu beschleunigen, besteht darin, die in Ihren Abfragen am häufigsten verwendete Tabelle im Off-Hour-Cluster auf den Index zu setzen. Wir haben eine Tabelle mit> 218 Millionen Zeilen und 30-fache Verbesserungen festgestellt.

Bei einer sehr großen Tabelle empfiehlt es sich, einen Index für Ihre Fremdschlüssel zu erstellen.

48
James Doherty