是否有可能获得平均 Berkeley DB 记录大小
Is it possible to get average Berkeley DB record size
我正在使用 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 信息中的附加信息会给我更准确的结果吗?
您计算了平均记录大小的上限:
643 pages * 4096 bytes / page = 2633728 bytes total
2633728 bytes / 2340 keys (records) = 1126 bytes / record
你可以通过从总数中减去所有"bytes free on XXX pages"来更接近真相。这是 space 数据库未使用的数据库,因为它的填充方式效率低下。 (顺便说一句,这看起来还不错,但是当有大量溢出页面时,您可以考虑更大的页面大小。当然,更大的页面大小也有缺点。耶,数据库!)
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
得到的最接近的数字。它包括每个记录的支持数据库结构,以及其他数据库开销。
我正在使用 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 信息中的附加信息会给我更准确的结果吗?
您计算了平均记录大小的上限:
643 pages * 4096 bytes / page = 2633728 bytes total
2633728 bytes / 2340 keys (records) = 1126 bytes / record
你可以通过从总数中减去所有"bytes free on XXX pages"来更接近真相。这是 space 数据库未使用的数据库,因为它的填充方式效率低下。 (顺便说一句,这看起来还不错,但是当有大量溢出页面时,您可以考虑更大的页面大小。当然,更大的页面大小也有缺点。耶,数据库!)
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
得到的最接近的数字。它包括每个记录的支持数据库结构,以及其他数据库开销。