1
0
mirror of https://github.com/fumiama/fumidb.git synced 2026-06-11 05:30:26 +08:00

add types

This commit is contained in:
源文雨
2022-05-01 21:16:17 +08:00
parent eda10fba91
commit 67b9176615
17 changed files with 310 additions and 26 deletions

View File

@@ -3,7 +3,7 @@
由于文件内普遍以uint64作为指针因此理论最大支持文件大小为`16384PB`,在现有条件下完全足够使用。
## 文件头
文件最开头填充了固定的8字节ascii编码`FUMIDB\1\0`。前6字节必须为`FUMIDB`,表明本文件为`fumidb`数据库文件格式。7, 8字节`\1\0`作为数据库的版本是一个小端的uint16在这里表示第1版之后将依次递增。今后可能会在文件头增加更多字段。
文件最开头填充了固定的8字节ascii编码`FUMIDB\1\0`。前6字节必须为`FUMIDB`,表明本文件为`fumidb`数据库文件格式。7, 8字节`\1\0`作为数据库的版本是一个小端的uint16在这里表示第1版之后将依次递增。今后可能会在文件头增加更多字段,因此前`256`字节保留以备后用
```
0 8 16
┌───────────────────┬───────────────────┐

View File

@@ -10,6 +10,7 @@
│ ptr 000 │ ptr 001 │ ptr ... │ ptr 255 │
└─────────┴─────────┴─────────┴─────────┘
```
特别地,当值可重复时,索引指向的是一个链表的头,详见[types](/api/types.md#数字)。
## int16
> 查找速度为
> - 无该表项O(1)
@@ -39,7 +40,7 @@
│next ptr│ ptr000 │ ptr... │ ptr255 │
└────────┴────────┴────────┴────────┘
```
特别地,当值可重复时,索引指向的是一个链表的头,详见[types](/api/types.md#数字)。
## int32/float
使用B+树建立索引,每个节点大小为`4096`字节,最多可有`n=341`个扇出,`340`个值;最少则有`170`个值(根节点不遵守最少值规则)。
> 下面每格4字节

View File

@@ -1,6 +1,6 @@
# 数据表格式
## 表头
如下所示,加上文件中附加的`ptr of next table`,表头永远是`4k`对齐的其中行类型列表的No.1自动成为主键,强制应用`unique`类型修饰符;`data blocks`可以为任意数据,如索引,表项等。由于数据块均为定长,增加时直接添加或重用已删除区块,修改时直接覆盖,删除时直接在索引中移除该项,将块首地址附加到已删除块的链表即可。
如下所示,加上文件中附加的`ptr of next table`,表头永远是`4k`对齐的其中行类型列表的No.1自动成为主键,强制应用`unique`+`nonnull`类型修饰符;`data blocks`可以为任意数据,如索引,表项等。由于数据块均为定长,增加时直接添加或重用已删除区块,修改时直接覆盖,删除时直接在索引中移除该项,将块首地址附加到已删除块的链表即可。
```
┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ 0 - 7 │ 8 - 15 │ 16 -- 23 │ 24 -- 31 │ 32 -- 39 │ 40 -- 47 │ 48 -- 55 │ 56 -- 63 │

View File

@@ -7,9 +7,9 @@
### 类型列表
| 类型代号 | 类型 | 存储方式 |
| --- | --- | --- |
| 0 | int8 | 直接存储 |
| 1 | int16 | 直接存储 |
| 2 | int32 | 直接存储 |
| 0 | int8 | 下一个哈希相同的数据项的指针(当值可重复时)+int8 |
| 1 | int16 | 下一个哈希相同的数据项的指针(当值可重复时)+int16 |
| 2 | int32 | 直接存储 |
| 3 | int64 | 直接存储 |
| 4 | float | 直接存储 |
| 5 | double | 直接存储 |
@@ -19,7 +19,7 @@
### 类型列表
| 类型代号 | 类型 | 存储方式 |
| --- | --- | --- |
| 6 | string | 下一个哈希相同的数据项的指针(uint64)+该长度的数据(字节数组) |
| 6 | string | 下一个哈希相同的数据项的指针+该长度的数据(字节数组) |
## 二进制数据块
> 二进制数据块为定长不超过uint64的不参与索引的字节数组。