# Disk Queue
## Access Pattern
In the beginning, there are a lot more write requests than read requests but
as items are added, there will be less and less item to be added. So toward
the end, there will be more read requests.
## File Layout
We use a page size of 4KB (4096 bytes).
```
+--------------------------------------------------------+
```
The metadata page and write page is mmap-ed for efficient file write.
## Page Layout
### Metadata Page
```
+---------------------------+
| Number of pages (8 bytes) |
|---------------------------|
| Number of items (8 bytes) |
|---------------------------|
| Read cursor (10 bytes) |
|---------------------------|
| Write cursor (10 bytes) |
|---------------------------|
| Empty space |
+---------------------------+
```
A cursor is (page, slot) tuple which takes 8 + 2 bytes.
### Record Page
We call write page as well as page 1 to (page N - 1) as record page. Note
that write page is actually page N (the tail page).
```
+---------------------------+ <- offset = 0
| Record 1 (variable sized) |
|---------------------------|
| ... |
|---------------------------|
| Record N (variable sized) |
|---------------------------|
| Empty space |
|---------------------------|
| Offset, size N (4 bytes) |
|---------------------------|
| ... |
|---------------------------|
| Offset, size 1 (4 bytes) |
|---------------------------|
| Num of records (2 bytes) |
+---------------------------+
```