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。

  • 相关阅读:
    jsp int转String or String转int 方法
    log4j详细使用教程
    SQL 查询当天,本月,本周的记录
    1012Linux流编程的一些知识点
    myeclipse过期以后提示过期以后怎么办?!
    mysql常用命令
    Myeclipse文件没出错,但是项目上显示有错的解决办法
    java的一些命名规范吧
    mysql 按照时间查询
    struts1.x和struts2.x之间的一些区别
  • 原文地址:https://www.cnblogs.com/YFYkuner/p/2691720.html
Copyright © 2011-2022 走看看