zoukankan      html  css  js  c++  java
  • 再读simpledb 之 元数据管理(3)

    接着前面的,本节介绍剩下的索引信息管理和视图信息管理。

    3、(IndexMgr)索引信息管理

    IndexMgr随着系统启动而创建,如果系统已经有idxcat.tbl,说明事先已经创建过索引信息表,直接读取文件内容即可,否则需要创建一个新的索引信息表。表结构如下:

    indexName tableName fieldName

    新创建索引的时候,需要向idxcat.tbl文件中添加一条记录。

    支持返回指定表上创建的所有索引信息,返回的是一个<fieldName,indexINfo>的字典。

    IndexInfo维护着某个列上添加的索引的信息,包括:

    a. 指定表的指定列中非重复值的数目;

    b. 按照某个值在该列上搜索时,访问磁盘块Block个数的估计值;

    c. 按照某个值在该列上搜索时,查询得到的记录条数的估计值。

    • 指定表的指定列中非重复值的数目

    如果参数中的列名与索引列名相同,则值为1;否则,为统计信息记录的索引列的非重复值和本索引输出记录数的最小值。这里理解上有点问题,稍后在Index中一并解释下。

    public int distinctValues(string fname)
    {
        if (fldname.Equals(fname))
            return 1;
        else
            return System.Math.Min(si.distinctValues(fldname), recordsOutput());
    }
    • 按照某个值在该列上搜索时,访问磁盘块Block个数的估计值

    首先计算出每个磁盘块中可容纳的记录条数rpb;

    然后用统计信息记录的记录条数除以rpb,得到需要访问的块的数目;

    最后用Hash索引来估计下使用索引是需要访问的块的数目。

    • 按照某个值在该列上搜索时,查询得到的记录条数的估计值

    用统计信息记录的总记录数除以不重复记录条数,得到每个搜索值可得到的输出记录数

    除了上面的信息之外,IndexInfo还提供open()方法,返回一个index对象。该对象默认为HashIndex,不可更改。如果想用BTreeIndex,稍后会详细说明。

    Index是一个特殊的表,表模式如下:

    blockNumber idNumber dataValue

    可以理解为[ RID | dataVal ],其中RID由两部分组成,真实记录在真实数据表中的块号 和 块内的编号。

    关于索引的如何使用,稍后会有详细说明。

    4、(ViewMgr)视图信息管理

    同样视图信息管理随系统启动而创建。视图信息保存在viewcat.tbl表中,表的模式如下:

    viewName viewDef

    创建视图时,将视图信息按照上面的默写,写入到文件中。

    注意,可以看下前面对simpledb支持的SQL的语法,这里的viewDef实际上就是一条SQL语句。

    在必要的时候,通过扫面viewcat.tbl文件,根据视图名称,得到视图的定义信息viewDef。

  • 相关阅读:
    pytorch 文本输入处理
    理解 on-policy 和 off-policy
    Monte Carlo与TD算法
    Monte Calro Tree Search (MCTS)
    强化学习概览
    linux 服务器 keras 深度学习环境搭建
    sed和awk学习整理
    linux shell编程进阶学习(转)
    gdb调试:
    MySQL C API 访问 MySQL 示例
  • 原文地址:https://www.cnblogs.com/YFYkuner/p/2691720.html
Copyright © 2011-2022 走看看