2009-03-16 8 views
0

Recherche de conseils sur la sélection d'un fournisseur de base de données pour un modèle de clé spécifique.Performances avec clé primaire en augmentation séquentielle

Le seul champ de clé sera un nombre séquentiellement croissant unique pré-alloué. Au cours de chaque jour entre 50 et 100 000 éléments seront ajoutés, traités (mis à jour), puis conservés pendant une semaine environ, , après quoi généralement les enregistrements les plus bas seront supprimés. Le nombre de dossiers ne fluctue pas beaucoup de jour en jour, mais peut chuter le week-end. Les chiffres reviendront probablement à 1 après 100M environ.

J'ai besoin de trouver une implémentation de base de données où l'efficacité de la recherche d'index, d'addition et de suppression reste constante. Dois-je m'inquiéter que la performance puisse chuter alors que la plage de valeurs clés se déplace continuellement vers le haut?

+0

Vous devriez probablement renommer ceci pour indiquer que vous êtes intéressé par performance/fragmentation/indexation plutôt que de vouloir savoir si vous pouvez obtenir des clés primaires séquentielles ... – Stephen

+0

sont les enregistrements ajoutés par un seul processus, ou devez-vous gérer les conflits entre les processus? –

+0

effectivement un seul processus – frogb

Répondre

2

index recherche, ajout et la suppression reste constante

Vous pouvez vous assurer qu'il reste constant par la reconstruction des index chaque insertion (juste en permanence très lent - baisse de performance ne hors du tout :)), ou à proximité à constante en exécutant la maintenance de l'index toutes les heures/tous les jours, etc.

que les performances risquent de diminuer lorsque la plage de valeurs clés se déplace continuellement vers le haut?

Tant que vous avez un index, il doit s'agir d'une performance logN - par ex. avoir 1.000.000 lignes sera environ la moitié de la vitesse de 1000 lignes (lors de la recherche d'une valeur indexée). (1 000 000 000 000 seront à nouveau à la moitié de cette vitesse).

Alors non, vous ne devriez pas avoir à vous soucier des performances.

Les chiffres reviendront probablement à 1 après 100M environ.

Ok - si vous le souhaitez. Généralement, pas besoin vraiment - il suffit d'utiliser un gros int.

Comme toujours avec les performances: testez ce que vous voulez faire. Créez un script qui insère 10 000 000 lignes et voyez ce qui se passe. Mon point ici étant que si vous allez envelopper les identifiants à 100M dossiers, le pire que vous pouvez faire est de les avoir tous alloués. Cela représenterait la condition d'index fragmentée aussi (où vous avez seulement dis 100K enregistrements, mais ils sont distribués dans un espace de 10M) - mais vous sera la maintenance d'index/base de données droite?

+0

La seule chose que j'ai à ajouter est qu'avec le temps cette table va souffrir d'une forte fragmentation, mais cela n'a rien à voir avec les ID en soi. Une commande OPTIMIZE TABLE de temps à autre corrige les choses (tout en verrouillant la table pour les écritures dans MySQL au moins). –

+0

Oui - à peu près tout système qui alloue des ressources à partir d'un espace fini nécessite une défragmentation à un certain stade. Les systèmes de fichiers, les bases de données, la mémoire utilisée par votre programme ...C'est pourquoi tous ces systèmes ont des plans de maintenance/défragmentation d'un genre ou d'un autre – Stephen

+0

@Artem Russakovskii: "cette table va souffrir d'une forte fragmentation" - au fil du temps TOUTE table ayant un grand non. des inserts connaîtra la fragmentation; C'est pourquoi vous devriez reconstruire les index aussi souvent que possible. –

Questions connexes