web-dev-qa-db-fra.com

Quelle taille est trop grande pour une table PostgreSQL?

Je travaille sur la conception d'un projet RoR pour mon entreprise et notre équipe de développement a déjà eu un débat sur la conception, en particulier la base de données.

Nous avons un modèle appelé Message qui doit être conservé. C'est un très très petit modèle avec seulement trois colonnes de base de données autres que l'identifiant, mais il y aura probablement BEAUCOUP de ces modèles lorsque nous entrerons en production. Nous envisageons pas moins de 1 000 000 insertions par jour. Les modèles ne seront jamais recherchés que par deux clés étrangères pouvant être indexées. De plus, les modèles ne doivent jamais être supprimés, mais nous n'avons pas non plus à les conserver une fois qu'ils ont environ trois mois.

Nous nous demandons donc si la mise en œuvre de ce tableau dans Postgres présentera un problème de performances significatif. Quelqu'un at-il une expérience avec de très grandes bases de données SQL pour nous dire si cela posera ou non un problème? Et si oui, quelle alternative devrions-nous choisir?

85
Dylan Karr

Les lignes par table ne seront pas un problème en soi.

Ainsi, environ 1 million de lignes par jour pendant 90 jours représentent 90 millions de lignes. Je ne vois aucune raison pour que Postgres ne puisse pas gérer cela sans connaître tous les détails de ce que vous faites.

En fonction de la distribution de vos données, vous pouvez utiliser une combinaison d'index, d'index filtrés et de partitionnement de table pour accélérer les choses, une fois que vous avez identifié les problèmes de performances que vous pouvez rencontrer ou non. Votre problème sera le même sur tout autre SGDDR que je connaisse. Si vous n'avez besoin que de 3 mois de conception de données dans un processus d'élagage des données, vous n'en avez plus besoin. De cette façon, vous aurez un volume de données cohérent sur la table. Votre chance vous savez combien de données existera, testez-le pour votre volume et voyez ce que vous obtenez. Tester une table avec 90 millions de lignes peut être aussi simple que:

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

Un autre moyen d'accélérer considérablement vos requêtes sur une table de plus de 100 millions de lignes consiste à mettre en cluster la table en heures creuses sur l'index le plus souvent utilisé dans vos requêtes. Nous avons une table avec plus de 218 millions de lignes et nous avons trouvé 30 améliorations.

En outre, pour une très grande table, il est conseillé de créer un index sur vos clés étrangères.

48
James Doherty