数据库计算器
结构控制
数据库计算器由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字段的最大长度。 |
