16 votes

Nombre maximal de lignes dans une table moteur de base de données MS Access?

Nous savons que le moteur de base de données MS Access est 'ralenti' pour permettre une taille de fichier maximale de 2 Go (ou peut-être câblé en interne pour être limité à moins de quelques puissances de 2 de pages de données de 4 Ko). Mais que signifie cela en termes pratiques?

Pouvez-vous me dire le nombre maximum de lignes pouvant être insérées dans une table du moteur de base de données MS Access pour m'aider à mesurer cela?

Pour satisfaire à la définition d'une table, toutes les lignes doivent être uniques, donc une contrainte d'unicité (par exemple, PRIMARY KEY, UNIQUE, CHECK, Macro de données, etc.) est une exigence.

EDIT: Je réalise qu'il y a une limite théorique mais ce qui m'intéresse est la limite pratique (et non nécessairement praticable) dans la vie réelle.

14voto

David-W-Fenton Points 16613

Quelques commentaires :

  1. Les fichiers Jet/ACE sont organisés en pages de données, ce qui signifie qu'il y a un certain espace inutilisé lorsque les limites de vos enregistrements ne sont pas alignées avec vos pages de données.

  2. Le verrouillage au niveau de la ligne réduira considérablement le nombre d'enregistrements possibles, car il force un enregistrement par page de données.

  3. Dans Jet 4, la taille de la page de données a été augmentée à 4 Ko (2 Ko dans Jet 3.x). Comme Jet 4 était la première version de Jet à prendre en charge Unicode, cela signifiait que vous pouviez stocker 1 Go de données double octet (c'est-à-dire 1 000 000 000 caractères en double octet), et avec la compression Unicode activée, 2 Go de données. Ainsi, le nombre d'enregistrements sera affecté par la présence ou non de la compression Unicode.

  4. Puisque nous ne savons pas combien d'espace dans un fichier Jet/ACE est occupé par les en-têtes et autres métadonnées, ni exactement combien d'espace de stockage de l'index prend, le calcul théorique sera toujours inférieur à ce qui est pratique.

  5. Pour obtenir le stockage le plus efficace possible, vous voudriez utiliser du code pour créer votre base de données plutôt que l'interface utilisateur d'Access, car Access crée certaines propriétés dont Jet pur n'a pas besoin. Cela ne veut pas dire qu'il y en a beaucoup, car les propriétés définies sur les valeurs par défaut d'Access ne sont généralement pas définies du tout (la propriété n'est créée que lorsque vous la modifiez de la valeur par défaut - cela peut être vu en parcourant la collection de propriétés d'un champ, c'est-à-dire que bon nombre des propriétés répertoriées pour un champ dans le concepteur de table Access ne sont pas présentes dans la collection de propriétés car elles n'ont pas été définies), mais vous voudrez peut-être vous limiter aux types de données spécifiques à Jet (par exemple, les champs de lien hypertexte sont propres à Access uniquement).

J'ai gaspillé une heure à manipuler cela en utilisant Rnd() pour remplir 4 champs définis comme type octet, avec PK composite sur les quatre champs, et il a fallu une éternité pour ajouter suffisamment d'enregistrements pour atteindre une partie significative des 2 Go. À plus de 2 millions d'enregistrements, le fichier faisait moins de 80 Mo. J'ai finalement arrêté après avoir atteint juste 700K 7 MILLIONS d'enregistrements et le fichier compacté à 184 Mo. Le temps nécessaire pour atteindre près de 2 Go est simplement plus que ce que je suis prêt à investir !

13voto

onedaywhen Points 24594

Voici ma tentative :

J'ai créé une table à une colonne (INTEGER) sans clé :

CREATE TABLE a (a INTEGER NOT NULL);

J'ai inséré des entiers en séquence en commençant à 1.

Je l'ai arrêté (arbitrairement après de nombreuses heures) lorsqu'il avait inséré 65 632 875 lignes. La taille du fichier était de 1 029 772 Ko.

J'ai compacté le fichier, ce qui l'a légèrement réduit à 1 029 704 Ko.

J'ai ajouté une PK :

ALTER TABLE a ADD CONSTRAINT p PRIMARY KEY (a);

ce qui a augmenté la taille du fichier à 1 467 708 Ko.

Cela suggère que le maximum se situe quelque part autour de la barre des 80 millions.

5voto

Tony Toews Points 6387

Comme d'autres l'ont indiqué, il s'agit d'une combinaison de votre schéma et du nombre d'index.

Un ami avait environ 100 000 000 cours historiques de bourse, citations de clôture quotidiennes, dans un MDB qui approchait la limite de 2 Go.

Il les a téléchargés en utilisant un code trouvé dans un article de la base de connaissances de Microsoft. J'ai été plutôt surpris que quel que soit le serveur qu'il utilisait ne l'ait pas coupé après les premiers 100 000 enregistrements.

Il pouvait voir n'importe quel enregistrement en moins d'une seconde.

2voto

Richard Points 432

Cela fait quelques années que je n'ai plus travaillé avec Access, mais les fichiers de base de données plus volumineux ont toujours eu plus de problèmes et étaient plus sujets à la corruption que les fichiers plus petits.

À moins que le fichier de base de données ne soit accessible que par une seule personne ou stocké sur un réseau robuste, vous pourriez rencontrer ce problème avant d'atteindre la limite de taille de base de données de 2 Go.

1voto

David Walker Points 771

Nous ne parlons pas nécessairement de limites théoriques ici, nous parlons des limites du monde réel de la taille maximale de fichier de 2 Go ET du schéma de base de données.

  • Votre base de données est-elle une seule table ou plusieurs?
  • Combien de colonnes chaque table a-t-elle?
  • Quels sont les types de données?

Le schéma est aussi important que le nombre de lignes pour déterminer combien de lignes vous pouvez avoir.

Nous avons utilisé des fichiers MDB Access pour stocker des exports de données MS-SQL pour l'analyse statistique par certains de nos utilisateurs professionnels. Dans ces cas, nous avons exporté notre structure de table principale, généralement quatre tables avec 20 à 150 colonnes variant de quelques dizaines d'octets par ligne à près de 8000 octets par ligne. Dans ces cas, nous atteindrions quelques centaines de milliers de lignes de données autorisées PAR MDB que nous leur enverrions.

Donc, je ne pense pas que cette question ait une réponse en l'absence de votre schéma.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X