Skip to content
Snippets Groups Projects
Commit 7e4403db authored by Peter J. Keleher's avatar Peter J. Keleher
Browse files

auto

parent 47ea4768
No related branches found
No related tags found
No related merge requests found
## Project 5: B+-trees
### Due Oct 20, 2023, 11:59PM
*The assignment is to be done by yourself.*
### Setup
Download files for Assignment 5 [here](https://sedna.cs.umd.edu/424/assign/assignment5Dist.tgz?1").
*We do not provide a new Vagrant file as you can use your existing VM's with this project, or just natively on your computer.*
### Overview
In this project, you will modify a very simple database system that we have written to illustrate some of the B+-Tree algorithms.
The database system is written in Python3 and attempts to simulate how a database system would work, including what blocks it would read from disk, etc.
* `disk_relations.py`: This module contains the classes Block, RelationBlock, Relation, and a few others helper classes like Pointer. A Block is a base class,
that is subclassed by RelationBlock and BTreeBlock (in `btree.py` file). A RelationBlock contains a set of tuples, and a Relation contains a list of RelationBlocks.
* `btree.py`: Code that implements some of the BTree functionality including search, insert, and delete (partially). The main class here is the BTreeBlock class, that captures the information stored in a BTree node.
There are a set of parameters that control how many tuples can be stored in each RelationBlock, how many key/ptrs can be stored in each BTreeBlock, etc. You can't set those directly, but you can set the "blockSize" and also the size of a key, etc. Those parameters are in the class `Globals`, and can be modified to constructs trees of different fanouts.
**Important Note: The B+-Tree code isn't fully debugged and there may be corner cases where it fails. Let us know if you see unexpected behavior.**
### How to Use the Files
The directory also contains two other files:
* `create_sample_databases.py`: Creates a sample database with 2 relations and 2 indexes.
* `testing-btree.py`: Shows the execution of some simple btree tasks using the sample data.
The simplest way you can run this is by just doing: `python3 testing-btree.py`
That will run all the code in the `testing-btree.py` file.
A better option is to do: `python3 -i testing-btree.py`. This will execute all the code in `testing-btree.py` file and then it will open a Python3 shell. In that shell, you can start doing more operations (e.g., you can play with the index to add/delete tuples, etc.)
### Your Task
Your task is to finish one unfinished piece in the `btree.py` file.
* Function `redistributeWithBlock(self, otherBlock)` in `btree.py`: The delete code does not handle the case where an underfull node borrows entries from one of its siblings.
You are to implement this function. **Note that `redistributeWithBlock` is called on the right child for this project.** Refer to Figure 14.21 from the textbook (7th edition) in the textbook for guidance. You will need to cover 4 cases:
* When the right (self) child is underfull and (1) it's a leaf node and (2) it's not a leaf node
* When the left (other) child is underfull and (3) it's a leaf node and (4) it's not a leaf node
Note that you only need to return the value that will update kprime.
### Submission
Submit the modified `btree.py` file [here](https://www.gradescope.com/courses/535193/assignments/2852230).
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment