From 53da4d14ffe078ccdf38fec75b046c88f03a2430 Mon Sep 17 00:00:00 2001 From: cyq <1056374449@qq.com> Date: Sat, 23 Nov 2024 18:03:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=83=B3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++++ 设计文档.md | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c4b2425..9e34c6c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,7 @@ # Build directory. build/ out/ + +# clangd +.cache/ +compile_commands.json \ No newline at end of file diff --git a/设计文档.md b/设计文档.md index 45adb28..63c6f71 100644 --- a/设计文档.md +++ b/设计文档.md @@ -11,7 +11,7 @@ leveldb中的存储原本只支持简单的字节序列,在这个项目中我 在这一基础上,我们对序列化进行了简单的优化:将字段名排序后,一一调用leveldb中原本的编码方法`PutLengthPrefixedSlice`存入value。这样不会有额外的空间开销,而好处在于遍历一个value的字段时,如果得到的字段名比目标大,就可以提前结束遍历。 最终db类提供了新接口`putFields`, `getFields`,分别对传入的字段序列化后调用原来的`put`, `get`接口。 **`FindKeysByField`调用`NewIterator`遍历所有数据,field名和值符合则加入返回的key中。这里的问题在于遍历中可能符合条件的key之前已经被删了,所以还要维护一个被删的key数组?总感觉这个玩意性能有点太差了** - +**cyq:如果考虑mvcc的话,感觉好像不用担心遍历过程中的问题** ## 2.2 二级索引 设计目标:对某个字段或属性建立索引,提高对该字段的查询效率。需考虑索引的创建、删除、维护。 @@ -38,6 +38,7 @@ class FieldDb { 有`fieldWithIndex`中有的字段,则直接对`kvDb`调用一个(多个)`put`。 `delete`也是如此,创建删除索引时新来的要delete的数据由`tmpDeletekvs`维护。 **只考虑到这,理论上每个数据库内部的日志、快照、合并等模块不会互相影响(创建的那些current、manifest文件名好像会冲突)** +**cyq:这个问题比较好解决,其实只要把两个数据库放到两个不同的子目录里面就可以了。 但是这里有个问题是,先putfields后,index加入tmpAddkvs前有对于索引的读取,那么会不会有不一致的问题** # 3. 数据结构设计 `indexDb`的kv编码:**暂时考虑助教文档那种**