1
0
mirror of https://github.com/fumiama/fumidb.git synced 2026-06-09 04:30:34 +08:00

finish insert row & find row by pk

This commit is contained in:
源文雨
2022-05-04 13:48:57 +08:00
parent b33e5dbe73
commit 9a589ea33e
5 changed files with 331 additions and 22 deletions

View File

@@ -31,6 +31,8 @@
> 区块长度固定,但是不同索引类型有所不同
详见[索引格式](/api/index.md)。
### 表项
> 实现时为了性能考虑,建表时限制数据栏数小于`128`
> 区块长度固定,为`8+len(row 1)+len(row 2)+...+len(row N)`字节
> 由于存在可变长的 string 和 binary不同区块长度有可能不同

View File

@@ -15,27 +15,34 @@
| 5 | double | 直接存储 |
## 字符串
> 字符串为变长的可索引的字节数组长度最大不超过uint16(65535字节)。
> 字符串为变长的可索引的字节数组长度最大不超过uint16(65535字节)。实际上出于性能考虑,实现时限制长度不超过`2048`字节。
> 一旦字符串插入表中,其长度就不再可变。如需改变需要删除再添加。
### 类型列表
| 类型代号 | 类型 | 存储方式 |
| --- | --- | --- |
| 6 | string | 下一个哈希相同的数据项的指针+uint16长度+该长度的数据(字节数组) |
## 二进制数据块
> 二进制数据块为变长的不参与索引的字节数组长度最大不超过uint32
> 二进制数据块为变长的不参与索引的字节数组长度最大不超过uint16(65535字节)。实际上出于性能考虑,实现时限制长度不超过`2048`字节
> 一旦二进制数据块插入表中,其长度就不再可变。如需改变需要删除再添加。
### 类型列表
| 类型代号 | 类型 | 存储方式 |
| --- | --- | --- |
| 7 | binary | uint32长度+直接存储的数据(字节数组) |
| 7 | binary | uint16长度+直接存储的数据(字节数组) |
## 类型修饰符
> 类型修饰符占据类型代号的高2位通过或运算与基础代号结合
> 对于可空属性,会在其值前添加一字节,指示其是否为空,如果为空则为 true
> 对于外键修饰符,将会在表头标明其外键连接到的表头指针
| 类型代号 | 类型 | 说明 |
| --- | --- | --- |
| 0x00 | null | 无修饰:允许重复、可空、非外键 |
| 0x40 | unique | 不允许重复 |
| 0x80 | nonnull | 非空 |
| 0xc0 | foreignkey | 外键 |
| 0x10 | unique | 不允许重复 |
| 0x20 | nonnull | 非空 |
| 0x40 | foreignkey | 外键 |
特别地,对于外键修饰符,将会在表头标明其外键连接到的表头指针。