Simple-DB是一个使用Java语言实现的简单关系型数据库。它仅支持整数和定长字符串数据类型,底层存储数据结构使用堆和B+树,拥有多种操作符和优化器,支持页面粒度锁定,支持事务且有rollback和recovery(事务隔离级别应该是Read Committed)。
有三个测试点未通过测试
- 单元测试BTreeNextKeyLockingTest中的nextKeyLockingTestGreaterThan()
- 系统测试 BTreeFileDeleteTest中的testRedistributeInternalPages()
- 系统测试BTreeTest
系统测试 TransactionTest 耗时过长
猜测lab4中锁设计不够好,后期再来修改
各lab功能及实现过程中关于JAVA值得一说的地方:
Lab1:实现其中数据存储相关的类;
- RandomAccessFile随机访问
Lab2:实现查询处理中的各种算子;
- Operator、Insert和Delete 装饰器模式
- LRU实现缓存池(延申->LRU优化)
Lab3:实现查询的优化相关的功能;
- 直方图处理
- 动态规划优化
- 不同数据库实现的优化算法
Lab4:实现事务处理的相关功能;
- 两段锁协议
- 读写锁设计相关(延申->JUC相关)
Lab5:实现B+树索引;
- B+树的各种操作
Lab6:实现回滚和恢复等功能;
- rollback和recover的逻辑理清
后三个lab都是简化实现,理清逻辑后就要延伸到数据库里面的八股。
GitHub Repo for http://dsg.csail.mit.edu/6.830/
We will be using git, a source code control tool, to distribute labs in 6.814/6.830. This will allow you to incrementally download the code for the labs, and for us to push any hot fixes that might be necessary.
You will also be able to use git to commit and backup your progress on the labs as you go. Course git repositories will be hosted as a repository in GitHub. GitHub is a website that hosts runs git servers for thousands of open source projects. In our case, your code will be in a private repository that is visible only to you and course staff.`
This document describes what you need to do to get started with git, and also download and upload 6.830/6.814 labs via GitHub.
If you are not a registered student at MIT, you are welcome to follow along, but we ask you to please keep your solution PRIVATE and not make it publicly available
- Learning Git
- Setting up GitHub
- Installing Git
- Setting up Git
- Getting Newly Released Labs
- Word of Caution
- Help!
There are numerous guides on using Git that are available. They range from being interactive to just text-based. Find one that works and experiment; making mistakes and fixing them is a great way to learn. Here is a link to resources that GitHub suggests: https://help.github.com/articles/what-are-other-good-resources-for-learning-git-and-github.
If you have no experience with git, you may find the following web-based tutorial helpful: Try Git.
Now that you have a basic understanding of Git, it's time to get started with GitHub.
-
Install git. (See below for suggestions).
-
If you don't already have an account, sign up for one here: https://github.com/join.
The instructions are tested on bash/linux environments. Installing git should be a simple apt-get / yum / etc install.
Instructions for installing git on Linux, OSX, or Windows can be found at GitBook: Installing.
If you are using Eclipse/IntelliJ, many versions come with git configured. The instructions will be slightly different than the command line instructions listed but will work for any OS. Detailed instructions can be found at EGit User Guide , EGit Tutorial, or IntelliJ Help.
You should have Git installed from the previous section.
-
The first thing we have to do is to clone the current lab repository by issuing the following commands on the command line:
$ git clone https://github.com/MIT-DB-Class/simple-db-hw-2021.git
Now, every time a new lab or patch is released, you can
$ git pull
to get the latest.
That's it. You can start working on the labs! That said, we strongly encourage you to use git for more than just downloading the labs. In the rest of the guide we will walk you through on how to use git for version-control during your own development.
-
Notice that you are cloning from our repo, which means that it will be inappropriate for you to push your code to it. If you want to use git for version control, you will need to create your own repo to write your changes to. Do so by clicking 'New' on the left in github, and make sure to choose Private when creating, so others cannot see your code! Now we are going to change the repo we just checked out to point to your personal repository.
-
By default the remote called
originis set to the location that you cloned the repository from. You should see the following:$ git remote -v origin https://github.com/MIT-DB-Class/simple-db-hw-2021.git (fetch) origin https://github.com/MIT-DB-Class/simple-db-hw-2021.git (push)We don't want that remote to be the origin. Instead, we want to change it to point to your repository. To do that, issue the following command:
$ git remote rename origin upstream
And now you should see the following:
$ git remote -v upstream https://github.com/MIT-DB-Class/simple-db-hw-2021.git (fetch) upstream https://github.com/MIT-DB-Class/simple-db-hw-2021.git (push) -
Lastly we need to give your repository a new
originsince it is lacking one. Issue the following command, substituting your athena username:$ git remote add origin https://github.com/[your-repo]
If you have an error that looks like the following:
Could not rename config section 'remote.[old name]' to 'remote.[new name]'Or this error:
fatal: remote origin already exists.This appears to happen to some depending on the version of Git they are using. To fix it, just issue the following command:
$ git remote set-url origin https://github.com/[your-repo]
This solution was found from StackOverflow thanks to Cassidy Williams.
For reference, your final
git remote -vshould look like following when it's setup correctly:$ git remote -v upstream https://github.com/MIT-DB-Class/simple-db-hw-2021.git (fetch) upstream https://github.com/MIT-DB-Class/simple-db-hw-2021.git(push) origin https://github.com/[your-repo] (fetch) origin https://github.com/[your-repo] (push) -
Let's test it out by doing a push of your master branch to GitHub by issuing the following:
$ git push -u origin master
You should see something like the following:
Counting objects: 59, done. Delta compression using up to 4 threads. Compressing objects: 100% (53/53), done. Writing objects: 100% (59/59), 420.46 KiB | 0 bytes/s, done. Total 59 (delta 2), reused 59 (delta 2) remote: Resolving deltas: 100% (2/2), done. To [email protected]:MIT-DB-Class/homework-solns-2018-<athena username>.git * [new branch] master -> master Branch master set up to track remote branch master from origin. -
That last command was a bit special and only needs to be run the first time to setup the remote tracking branches. Now we should be able to just run
git pushwithout the arguments. Try it and you should get the following:$ git push Everything up-to-date
If you don't know Git that well, this probably seemed very arcane. Just keep using Git and you'll understand more and more. You aren't required to use commands like commit and push as you develop your labs, but will find them useful for debugging. We'll provide explicit instructions on how to use these commands to actually upload your final lab solution.
(You don't need to follow these instructions until Lab 1.)
Pulling in labs that are released or previous lab solutions should be easy as long as you set up your repository based on the instructions in the last section.
-
All new lab and previous lab solutions will be posted to the labs repository in the class organization.
Check it periodically as well as Piazza's announcements for updates on when the new labs are released.
-
Once a lab is released, pull in the changes from your simpledb directory:
$ git pull upstream master
OR if you wish to be more explicit, you can
fetchfirst and thenmerge:$ git fetch upstream $ git merge upstream/master
Now commit to your master branch:
$ git push origin master
-
If you've followed the instructions in each lab, you should have no merge conflicts and everything should be peachy.
Git is a distributed version control system. This means everything operates offline until you run git pull
or git push. This is a great feature.
The bad thing is that you may forget to git push your changes. This is why we strongly suggest that you check
GitHub to be sure that what you want us to see matches up with what you expect.
If at any point you need help with setting all this up, feel free to reach out to one of the TAs or the instructor. Their contact information can be found on the course homepage.
参考:
https://www.kwang.top/DB/simple_db
https://blog.csdn.net/m0_53157173/category_12359831.html
https://blog.csdn.net/qq_44766883/category_10078460.html
https://zhuanlan.zhihu.com/p/161939974