数据库课程设计实验心得
第六组 16340198 孙肖冉
1. 数据结构的设计
A) 一开始构想时完全不理解如何实现磁盘中的页的形式,在 TA 的提醒以及其他组同
学的帮助下,我们设计了两个类 Vector (用来存储向量的信息:id,空间位置),Page(包
含页码,vector 数组(slot),以及向量的信息(以数组的形式进行存储))。一开始设计
类的这种结构时,也考虑到了这种结构可以在完成第二部分时增添所需的函数。
B) 根据要求我们通过计算可以得到 MNIST 每页可以存储 20 个向量及其信息,glove
每页可以存储 54 个向量及信息;因为两组数据的读写方式基本相同,所以在实现时,虽
然用不同的代码文件,但是只需要改变一些宏定义值的量即可。
C) 在查询最近值时我们设计了一个 Node(存储向量的 id,以及与测试向量的距离
distance)
2. 二进制文件读写
为了实现在磁盘中的存储,所以文件在读取写入时要以二进制的形式。
在进行实验之前,并没有接触过二进制文件读写的有关知识。所以花费了一点时间去查
找相关资料
在本次实验中主要运用了:fopen(),fscanf(),fread(),fwrite(),fseek(),fclose(),rewind()函数
在利用 fseek()函数进行文件指针移动之后,然后利用 fread()对二进制的文件进行读取数
据的操作时,得到的仍然是文件开头的数值。后来找到了解决方法,但是仍是不能理解。先
写入心得中以防之后忘记。
每个函数成功时的返回值不尽相同,例如 fseek()的返回值是 0(被这个坑了好久)。
函数的实现在网上都有很多资料,在此就不赘述了。
3. 性能的优化
评论0