假设有一个文件包含未分类的学生信息列表,其中包括学生ID号以及其他信息。
我想制作一个程序,根据学生ID号检索学生信息。为了提高效率,我将学生ID存储在B树中。
因此,当我输入学生ID号时,它会搜索B树以查看其是否存在。它还做了一件事。如果它找到学生ID号,那么它也会返回该学生信息所在的文件中的位置。这是次要密钥。该程序使用此信息来查找学生的其余信息并将其打印到屏幕上。
可以这样做吗?这是b树的工作原理吗?
答案 0 :(得分:1)
B树的工作原理是对键存储值,并允许您以对数时间查找给定键及其关联值。所以第二件事没有被称为二级密钥,它只是价值。在这种情况下,它是文件的偏移量,这使它基本上成为指向值的指针。
这是使用B树的完全合理且非常常见的方式。
答案 1 :(得分:1)
你描述的内容与B树无关(BTW,你确定你明白B-tree是什么吗?很多人把它们与二叉树混淆了),文件位置不是“二级密钥“,它是学生ID映射到的值。
但是,关系数据库内部的工作方式确实与您描述的方式非常相似 - 数据库记录存储在可用空间的任何位置,索引将索引列中的值映射到记录的位置。
答案 2 :(得分:0)
B-Tree是一个索引。使用B树,您可以使用索引找到非常有效的值。索引本身有节点和叶子。每个节点都有以组织树的内容。节点指针指向到其他节点或叶子。 因此节点持有一些值和一些指针。节点指针是对索引文件的偏移。叶子还包含值和指针。区别在于叶子中的指针是数据文件的偏移量并指向真实的文件。
因此,当您搜索正在使用索引的值时,为了返回存储实际记录的文件偏移量。例如,您要查找ID = 1的记录,您将获得偏移量10240 ,如果您有1KB块,则打开数据文件以读取块10.然后从该偏移量中,您可以访问记录中的所有数据,例如Username!
另一个实现是使用BTrees,其中Leafs没有指向另一个文件,但是它们只是持有第二个colunum。例如,如果你需要使用id找到Username,你可以有一个B树,其中leafs具有以下结构:第一个值是id,第二个是用户名,因此您可以从索引中获取用户名。
你也可以使用B + Tree.B +树像B树一样实现,但它们将叶子保存在列表中。所以你可以使用你的索引作为操作符,例如>,<。