数据库计算器
结构控制
数据库计算器由mco_calc_t 结构控制,在mcodbcalc.h
中定义如下:
参数 | 说明 |
---|---|
db | 要计算的数据库的数据库句柄。 |
cls | 注册类列表。 |
ncls | 注册类数量。 |
dict | 数据库字典。 |
oid_val | 用于在执行 mco_calc_fill_db() 期间创建 OID 值。 |
pg_size | 数据库页面大小。 |
ops | 计算得出的最优页面大小。 |
total_pgs | 数据库页面的总数。 |
free_pgs | 空闲页面的总数。 |
dsl | 包含动态字段长度的结构(见下文)。 |
信息获取
下面是mco_cc_info_t结构体的定义,用来获取计算器生成的该类的信息:
参数 | 说明 |
---|---|
nobjs | 数据库中此类对象的数量。 |
pages_min | 此类对象将使用的最小页数。 |
pages_cur | 此类当前使用的页对象数量。 |
pages_max | 此类对象使用的最大页数。 |
bytes_cur | 此类当前使用的内存对象数量。 |
bytes_min | 此类内存对象将使用的最小数量。 |
bytes_max | 此类内存对象使用的最大数量。 |
nvecs | 此类向量的数量。 |
nstrs | 此类中的字符串数量。 |
nblobs | 此类中的二进制大对象(BLOB)的数量。 |
is_pers | 如果此类是持久化的,则为真。 |
有关此结构的使用示例,请参阅函数 mco_calc_get_class_info()
以及下文回调函数示例。
回调函数
数据库计算器函数 mco_calc_cinfo_browse()
和 mco_calc_iinfo_browse()
需要回调函数来处理与特定类或索引相关的信息。
回调函数结构如下:
typedef void (*mco_calc_cinfo_h)(
mco_calc_t * calc,
mco_cc_t * cls,
mco_cc_info_t * info,
void * ctx
);
typedef void (*mco_calc_iinfo_h)(
mco_calc_t * calc, // 用于允许将特定于应用程序的其他数据传递到处理函数
mco_index_stat_t * istat, // mco.h 文件中定义的 mco_index_stat_t
void * ctx
);
以下是此类处理函数的示例:
static void class_print(mco_calc_t *calc, mco_cc_t *cls,
mco_cc_info_t *info, void *unused)
{
printf(" -> %s%s:\n", (info->is_pers ? "[PERSISTENT] " : ""), cls->cc_name);
...
}
static void index_print(mco_calc_t *calc, mco_cc_t *cls,
mco_index_stat_t *istat, void *unused)
{
int tmp, psize = 0;
char *str = NULL, c;
if ((istat->type & MCO_IDXST_TYPE_MASK) == MCO_IDXST_TYPE_MEM) {
str = "Inmem";
psize = calc->pg_size;
}
else if ((istat->type & MCO_IDXST_TYPE_MASK) == MCO_IDXST_TYPE_DISK) {
str = "Disk";
psize = _disk_page_size;
}
printf(" -> %s [%s ", istat->plabel, str);
...
}
动态字段长度
元素 mco_calc_t.dsl
是一种包含动态字段最小和最大长度的结构。定义如下:
参数 | 说明 |
---|---|
v_lmin | 向量字段的最小长度。 |
v_lmax | 向量字段的最大长度。 |
s_lmin | 字符串字段的最小长度。 |
s_lmax | 字符串字段的最小长度。 |
b_lmin | BLOB字段的最小长度。 |
b_lmax | BLOB字段的最大长度。 |