mirror of
https://github.com/fumiama/fumidb.git
synced 2026-06-09 04:30:34 +08:00
半完成bucket
This commit is contained in:
50
api/index.md
50
api/index.md
@@ -50,8 +50,8 @@
|
||||
## int32/float
|
||||
> 查找速度为O(logn)
|
||||
|
||||
使用B+树建立索引,每个节点大小为`4096`字节,最多可有`n=341`个扇出,`340`个值;最少则有`170`个值(根节点不遵守最少值规则)。
|
||||
> 下面每格4字节
|
||||
- 使用B+树建立索引,每个节点大小为`4096`字节,最多可有`n=341`个扇出,`340`个值;最少则有`170`个值(根节点不遵守最少值规则)。
|
||||
> 下面每格4字节, next node ptr 将所有块连接起来以便全部遍历(如删除)。
|
||||
```
|
||||
0 8 12 20
|
||||
┌───────────────────┬─────────┬───────────────────┬─────────┐
|
||||
@@ -69,11 +69,31 @@
|
||||
└───────────────────┴───────────────────┘
|
||||
4088 4096
|
||||
```
|
||||
> 备选方案
|
||||
|
||||
- 使用哈希桶作索引,允许溢出桶,同样每个桶大小为`4096`字节,可装`340`个值。共`256`个桶,初始占用`1M`空间,后续由于溢出可能会增加。
|
||||
```
|
||||
0 8 12 20
|
||||
┌───────────────────┬─────────┬───────────────────┬─────────┐
|
||||
0│ pointer 001 │ key 001 │ pointer 002 │ key 002 │
|
||||
├───────────────────┼─────────┼───────────────────┼─────────┤
|
||||
24│ pointer 003 │ key 003 │ pointer 004 │ key 004 │
|
||||
├───────────────────┼─────────┼───────────────────┼─────────┤
|
||||
48│ pointer 005 │ key 005 │ pointer 006 │ key 006 │
|
||||
├───────────────────┼─────────┼───────────────────┼─────────┤
|
||||
xxx│ pointer xxx │ key xxx │ pointer xxx │ key xxx │
|
||||
├───────────────────┼─────────┼───────────────────┼─────────┤
|
||||
4056│ pointer 339 │ key 339 │ pointer 340 │ key 340 │
|
||||
├───────────────────┼─────────┴─────────┬─────────┴─────────┘
|
||||
4080│ overflow ptr │ next node ptr │
|
||||
└───────────────────┴───────────────────┘
|
||||
4088 4096
|
||||
```
|
||||
## int64/double
|
||||
> 查找速度为O(logn)
|
||||
|
||||
使用B+树建立索引,每个节点大小为`4096`字节,最多可有`n=256`个扇出,`255`个值;最少则有`128`个值(根节点不遵守最少值规则)。
|
||||
> 下面每格8字节
|
||||
- 使用B+树建立索引,每个节点大小为`4096`字节,最多可有`n=256`个扇出,`255`个值;最少则有`128`个值(根节点不遵守最少值规则)。
|
||||
> 下面每格8字节, next node ptr 将所有块连接起来以便全部遍历(如删除)。
|
||||
```
|
||||
0 8
|
||||
┌───────────────────┬───────────────────┐
|
||||
@@ -91,7 +111,27 @@
|
||||
└───────────────────┴───────────────────┘
|
||||
4088 4096
|
||||
```
|
||||
> 备选方案
|
||||
|
||||
- 使用哈希桶作索引,允许溢出桶,同样每个桶大小为`4096`字节,可装`255`个值。共`1024`个桶,初始占用`4M`空间,后续由于溢出可能会增加。
|
||||
```
|
||||
0 8
|
||||
┌───────────────────┬───────────────────┐
|
||||
0│ pointer 001 │ key 001 │
|
||||
├───────────────────┼───────────────────┤
|
||||
16│ pointer 002 │ key 002 │
|
||||
├───────────────────┼───────────────────┤
|
||||
32│ pointer 003 │ key 003 │
|
||||
├───────────────────┼───────────────────┤
|
||||
xxx│ pointer xxx │ key xxx │
|
||||
├───────────────────┼───────────────────┤
|
||||
4064│ pointer 255 │ key 255 │
|
||||
├───────────────────┼───────────────────┤
|
||||
4080│ overflow ptr │ next node ptr │
|
||||
└───────────────────┴───────────────────┘
|
||||
4088 4096
|
||||
```
|
||||
## string
|
||||
> 查找速度为O(logn)
|
||||
|
||||
先将其哈希为int64再按int64进行查找。具体哈希方法为取字符串`md5`的前8位作为小段`uint64`。冲突时,根据string表项附带存储的[下一个哈希相同的数据项的指针(uint64)](/api/types.md#字符串)可依次遍历到所有项目,然后找到真正与查询内容相同的项。
|
||||
先将其哈希为int64再按int64进行查找。具体哈希方法为取字符串`md5`的前8位作为小端`uint64`。冲突时,根据string表项附带存储的[下一个哈希相同的数据项的指针(uint64)](/api/types.md#字符串)可依次遍历到所有项目,然后找到真正与查询内容相同的项。
|
||||
|
||||
Reference in New Issue
Block a user