mirror of
https://github.com/fumiama/fumidb.git
synced 2026-06-05 00:32:44 +08:00
edit doc
This commit is contained in:
@@ -94,4 +94,4 @@
|
||||
## string
|
||||
> 查找速度为O(logn)
|
||||
|
||||
先将其哈希为int64再按int64进行查找。冲突时根据string表项附带存储的[下一个哈希相同的数据项的指针(uint64)](/api/types.md#字符串)进行遍历。
|
||||
先将其哈希为int64再按int64进行查找。具体哈希方法为取字符串`md5`的前8位作为小段`uint64`。冲突时,根据string表项附带存储的[下一个哈希相同的数据项的指针(uint64)](/api/types.md#字符串)可依次遍历到所有项目,然后找到真正与查询内容相同的项。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 数据表格式
|
||||
## 表头
|
||||
如下所示,加上文件中附加的`ptr of next table`,表头永远是`4k`对齐的,其中行类型列表的No.1自动成为主键,强制应用`unique`+`nonnull`类型修饰符;`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 │
|
||||
@@ -32,6 +32,9 @@
|
||||
详见[索引格式](/api/index.md)。
|
||||
### 表项
|
||||
> 区块长度固定,为`8+len(row 1)+len(row 2)+...+len(row N)`字节
|
||||
|
||||
> 由于存在可变长的 string 和 binary,不同区块长度有可能不同
|
||||
|
||||
为方便遍历,数据表项以uint64的指针开头,代表下一项的地址。接下来按照[数据类型](/api/types.md)中规定的存储格式依次附加第一项、第二项直到第N项的值。
|
||||
#### 表项的增加
|
||||
优先附加到上一个表项末尾。如无法实现,则从空区块选取一个,或附加到整个文件末尾。
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
| 5 | double | 直接存储 |
|
||||
|
||||
## 字符串
|
||||
> 字符串为定长的带索引的字节数组,长度最大不超过uint32(65535字节)。
|
||||
> 字符串为变长的可索引的字节数组,长度最大不超过uint32(65535字节)。
|
||||
### 类型列表
|
||||
| 类型代号 | 类型 | 存储方式 |
|
||||
| --- | --- | --- |
|
||||
| 6 | string | 下一个哈希相同的数据项的指针+uint32长度+该长度的数据(字节数组) |
|
||||
|
||||
## 二进制数据块
|
||||
> 二进制数据块为定长(不超过uint64)的不参与索引的字节数组。
|
||||
> 二进制数据块为变长的不参与索引的字节数组,长度最大不超过uint64。
|
||||
### 类型列表
|
||||
| 类型代号 | 类型 | 存储方式 |
|
||||
| --- | --- | --- |
|
||||
|
||||
Reference in New Issue
Block a user