2016-03-03 1 views
1

J'utilise db_stat pour obtenir le nombre approximatif d'enregistrements dans le BDB (pour éviter l'itération sur la base de données entière):Est-il possible d'obtenir la taille record moyenne Berkeley DB

[[email protected] magic]$ db_stat -d random.db 
Thu Mar 3 13:38:25 2016  Local time 
61561 Hash magic number 
8  Hash version number 
Little-endian Byte order 
     Flags 
643  Number of pages in the database 
4096 Underlying database page size 
0  Specified fill factor 
2340 Number of keys in the database 
2340 Number of data items in the database 
299  Number of hash buckets 
303540 Number of bytes free on bucket pages (75% ff) 
15  Number of overflow pages 
39282 Number of bytes free in overflow pages (36% ff) 
114  Number of bucket overflow pages 
322730 Number of bytes free in bucket overflow pages (30% ff) 
0  Number of duplicate pages 
0  Number of bytes free in duplicate pages (0% ff) 
1  Number of pages on the free list 

Est-il possible d'obtenir en moyenne taille d'enregistrement aussi bien?

Je suppose que je peux utiliser les informations ci-dessous pour obtenir la taille globale:

643  Number of pages in the database 
4096 Underlying database page size 

643 * 4096 = 2633728 octets (correspond à la taille du fichier) et obtenir la taille d'enregistrement approximative 2633728/2340 = 1125

Donc, ma question - l'utilisation d'informations supplémentaires à partir de info db_stat me donnerait un résultat plus précis?

Répondre

1

Vous avez calculé la limite supérieure de la taille d'enregistrement moyenne:

643 pages * 4096 bytes/page = 2633728 bytes total 
2633728 bytes/2340 keys (records) = 1126 bytes/record 

Vous pouvez vous rapprocher de la vérité par soustrayant tous les « octets libres sur les pages XXX » de la totale. C'est un espace qui n'est pas utilisé par la base de données en raison de l'inefficacité de la façon dont il a été rempli. (En passant, cela ne semble pas trop mal, mais chaque fois qu'il y a un nombre important de pages de débordement, vous pouvez envisager une taille de page plus grande.Bien sûr, il y a des inconvénients à des tailles de page plus grandes aussi.Yay, bases de données!)

2633728 bytes 
- 303540 bytes free on bucket pages 
- 39282 bytes free in overflow pages 
- 322730 bytes free in bucket overflow pages 
-  0 bytes free in duplicate pages 
-------- 
1968176 bytes total/2340 keys = 841 bytes/record 

Ce chiffre n'est pas vraiment la taille moyenne de l'enregistrement, mais je pense que c'est aussi proche que vous pouvez obtenir de db_stat. Il inclut la structure de base de données de support pour chaque enregistrement, et d'autres frais généraux de base de données.

+0

Merci, cela a du sens. Y a-t-il de la documentation à ce sujet? –

+0

Je ne trouve rien qui décrive spécifiquement ce que vous cherchez. Le concept de pages de débordement de différents types et la façon dont les pages sont utilisées dans une base de données peuvent être traités de manière générale. Ainsi, vous trouverez peut-être des réponses dans un manuel de base de données tel que _Transaction Processing_ de Gray et Reuter. –