是否有可能获得平均伯克利数据库记录大小

Posted

技术标签:

【中文标题】是否有可能获得平均伯克利数据库记录大小【英文标题】:Is it possible to get average Berkeley DB record size 【发布时间】:2016-03-03 13:55:39 【问题描述】:

我正在使用 db_stat 来获取 BDB 中的大致记录数(以避免对整个数据库进行迭代):

[me@home 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

是否也可以获得平均记录大小?

我想我可以使用以下信息来获取整体大小:

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

643*4096 = 2633728 Bytes(对应文件大小),得到近似记录大小2633728/2340 = 1125

所以我的问题 - 使用来自 db_stat info 的附加信息会给我更准确的结果吗?

【问题讨论】:

【参考方案1】:

您已计算出平均记录大小的上限

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

您可以通过从总数中减去所有“XXX 页面上的可用字节数”来更接近事实。这是由于填充方式效率低下而未被数据库使用的空间。 (顺便说一句,这看起来还不错,但是每当有大量溢出页面时,您可以考虑更大的页面大小。当然,更大的页面大小也有不利之处。是的,数据库!)

 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

这个数字仍然不是真正的平均记录大小,但我认为它与您可以从db_stat 获得的最接近。它包括每条记录的支持数据库结构和其他数据库开销。

【讨论】:

谢谢,这是有道理的。有相关文档吗? 我找不到任何具体描述您要查找的内容的内容。各种类型的溢出页面的概念,以及页面在数据库中的使用方式都可以进行一般性的处理。因此,您可能会在 Gray 和 Reuter 的 Transaction Processing 等数据库教科书中找到一些答案。

以上是关于是否有可能获得平均伯克利数据库记录大小的主要内容,如果未能解决你的问题,请参考以下文章

什么是伯克利 DB 幻数?

6何为伯克利数据分析栈BDASMP3

伯克利:模块化神经网络学习复杂推理(论文下载)

伯克利 DB 中的交易。快速地?

伯克利数据库环境问题

伯克利数据库的 GUI [关闭]