From 41f811ee916e3f3e4209f6ec60cf3fc5b6b9a5e1 Mon Sep 17 00:00:00 2001 From: feathercyc Date: Sat, 2 Mar 2024 00:14:54 +0800 Subject: [PATCH] initial gsoc-2024 proposal --- 2021/11/24/J1900-setting/index.html | 4 +- 2023/09/24/cmu-15445-1/index.html | 4 +- 2023/10/12/cmu-15445-2/index.html | 4 +- 2023/11/06/cmu-15445-3/index.html | 4 +- 2023/12/01/codetop100note/index.html | 39 +++- 2023/12/04/raft-interview-exp/index.html | 4 +- 2023/12/04/single-db-interview-exp/index.html | 4 +- 2023/12/14/golang-std-function/index.html | 4 +- 2023/12/17/db-paper-readnote/index.html | 4 +- 2024/03/02/gsoc-2024-proposal-cn/index.html | 216 ++++++++++++++++++ archives/2021/11/index.html | 4 +- archives/2021/index.html | 4 +- archives/2023/09/index.html | 4 +- archives/2023/10/index.html | 4 +- archives/2023/11/index.html | 4 +- archives/2023/12/index.html | 4 +- archives/2023/index.html | 4 +- archives/2024/03/index.html | 162 +++++++++++++ archives/2024/index.html | 162 +++++++++++++ archives/index.html | 4 +- img/codetop/lc240.png | Bin 0 -> 112215 bytes .../Overlapping-rules-simple.png | Bin 0 -> 30306 bytes img/gsoc-2024-proposal/Overlapping-rules.png | Bin 0 -> 106978 bytes index.html | 17 +- tags/15445/index.html | 4 +- tags/database/index.html | 4 +- tags/golang/index.html | 4 +- tags/leetcode/index.html | 4 +- .../raft\345\215\217\350\256\256/index.html" | 4 +- 29 files changed, 631 insertions(+), 49 deletions(-) create mode 100644 2024/03/02/gsoc-2024-proposal-cn/index.html create mode 100644 archives/2024/03/index.html create mode 100644 archives/2024/index.html create mode 100644 img/codetop/lc240.png create mode 100644 img/gsoc-2024-proposal/Overlapping-rules-simple.png create mode 100644 img/gsoc-2024-proposal/Overlapping-rules.png diff --git a/2021/11/24/J1900-setting/index.html b/2021/11/24/J1900-setting/index.html index 1caed37..5d5eac5 100644 --- a/2021/11/24/J1900-setting/index.html +++ b/2021/11/24/J1900-setting/index.html @@ -161,7 +161,7 @@ } } detectApple() - })(window)

记一次折腾J1900的经历

第一次整软路由,笔者正处于大创报账时期,虽然不知道能不能报上去,反正挑了个合适价位的J1900的软路由买回来一阵折腾。由于怀着着折腾的心思,买的是裸主机,这意味着内存和硬盘都没有自带,同时openwrt系统就更不用说了,肯定得自己装上去。在收货当天笔者就开始了各项工作,结果还是花了好几天踩坑才将一切搞定,故记下这次极其耗神的工作。

+ })(window)

记一次折腾J1900的经历

第一次整软路由,笔者正处于大创报账时期,虽然不知道能不能报上去,反正挑了个合适价位的J1900的软路由买回来一阵折腾。由于怀着着折腾的心思,买的是裸主机,这意味着内存和硬盘都没有自带,同时openwrt系统就更不用说了,肯定得自己装上去。在收货当天笔者就开始了各项工作,结果还是花了好几天踩坑才将一切搞定,故记下这次极其耗神的工作。

软路由是什么

按笔者目前理解,软路由就是一台至少带了多个网口的过时主机,CPU、内存、硬盘等基本一应俱全。笔者手里这台就是J1900CPU、四网口的一台软路由,双十二期间价钱720+就拿下来了。
拥有复数个网口后,只要在主机上装一个openwrt系统,再给网口分配LAN口和WAN口,这台主机就是软路由了。换言之,只要有两个网口,任何电脑都可以改成软路由,只是功耗等不尽相同罢了。
与软路由相对的就是——硬路由,也就是一般我们称呼的路由器,软路由一般应用在有线网中,至于无线网则会靠额外连接一个无线AP来实现,而硬路由则集成这两项功能且更简单易用,当然价钱多少会高上一点。
J1900_joker.jpg

J1900路由器介绍

先来张内部结构图:
Inked20220325164917_LI.jpg
图中的已经装好了内存条,可以看到硬盘上圈出来的分别是网卡接口(WIFI),msata硬盘接口(MSATA)和SATA硬盘接口,网卡口和msata接口一摸一样以至于笔者搞混了很多次,咨询了客服后才发现主板上的白字。。

按这篇博客的说法,网卡模块可以直接无视,只建议直接再买一个无线AP而不是无线网卡,毕竟有四个网口。

@@ -222,4 +222,4 @@

通过ssh连接至J1900路由器

进入192.168.0.1路由器管理界面,从上边栏进入 /系统/Software,点击SSH访问。
J1900_003.jpg
最后点击保存并应用
这一步主要是处理mentoHUST在路由器上运行命令行时显示中文乱码,cmd下中文则会正常显示,当然一般大家买路由器也是没有屏幕的(笔者使用的是之前树莓派遗留下来的屏幕),所以也需要配置ssh以访问路由器进行一些操作。

至此,完结撒花

-

文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2021/11/24/J1900-setting/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
\ No newline at end of file +
文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2021/11/24/J1900-setting/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
\ No newline at end of file diff --git a/2023/09/24/cmu-15445-1/index.html b/2023/09/24/cmu-15445-1/index.html index 1cf339f..66c9276 100644 --- a/2023/09/24/cmu-15445-1/index.html +++ b/2023/09/24/cmu-15445-1/index.html @@ -161,7 +161,7 @@ } } detectApple() - })(window)

CMU15445 C++学习笔记-其一(Project 0)

换设备了之后hexo源文件丢失了,笔者竟然忘记(没意识到)可以在github仓库里新开一个hexo branch存放源文件。

+ })(window)

CMU15445 C++学习笔记-其一(Project 0)

换设备了之后hexo源文件丢失了,笔者竟然忘记(没意识到)可以在github仓库里新开一个hexo branch存放源文件。

前言

这篇文章里写好的注册课程提交课程流程笔者就不写了。

CMU 15-445/645 (Spring 2023) Database Systems 通关指北

笔者想学C++但找不到做完会有成就感的项目所以一直耽搁着没学,Modern C++的名声在外让笔者同样畏惧。虽然笔者看了许多C++的源码也学会了不少语言,但是Modern C++这座大山一直没敢爬,这是本科的情况。

@@ -183,4 +183,4 @@

1
2
3
auto Clone() const -> std::unique_ptr<TrieNode> override {
return std::make_unique<TrieNodeWithValue<T>>(children_, value_);
}

这句代码中的std::make_unique(children_,value_);就是通过值复制的方式传递函数参数的,要真的达到笔者说的那种效果,应该将代码改为std::make_unique(std::move(children_),std::move(value_));,当然,这是错误的,这么做就办不到COW了,毕竟内存中就应该存在这个节点的两个备份,一份被读,一份被写。

看上去很麻烦,但也没办法。那么这段代码中的其他std::move起到一个什么作用呢?自然就是真正的节省内存了,毕竟无论是std::map还是value本身,=赋值操作也都是值复制,这里不使用std::move应该也没什么问题,就是内存开销大点,过了构造函数那块内存自然就被释放掉了,主要还是课程本身限制必须使用std::move。

-

文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2023/09/24/cmu-15445-1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
\ No newline at end of file +
文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2023/09/24/cmu-15445-1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
\ No newline at end of file diff --git a/2023/10/12/cmu-15445-2/index.html b/2023/10/12/cmu-15445-2/index.html index 57f4df5..f1cca30 100644 --- a/2023/10/12/cmu-15445-2/index.html +++ b/2023/10/12/cmu-15445-2/index.html @@ -161,5 +161,5 @@ } } detectApple() - })(window)

CMU15445 C++学习笔记-其二(Project 1)

0.png
大力出奇迹,函数大锁。
1.png
修改了NewPage,在写入Evict的页释放了函数大锁,主要目的是测试bug。
2.png
在FlushPage的时候释放函数大锁加页锁,在DeletePage写入Delete的页时释放了函数大锁,结果更差了。
3.png
// 分配一个空闲block;
// buf_pool_mutex_enter;
// 持有page_hash x lock;
// 检查page_hash中是否已被读入,如果是,表示另外一个线程已经完成了io,则忽略本次io请求,退出;
// 持有block->mutex,对block进行初始化,并加入到page hash中;
// 设置IO FIX为BUF_IO_READ;
// 释放hash lock;
// 将block加入到LRU上;
// 持有block s lock;
// 完成IO后,释放s lock;

-
文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2023/10/12/cmu-15445-2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
\ No newline at end of file + })(window)

CMU15445 C++学习笔记-其二(Project 1)

0.png
大力出奇迹,函数大锁。
1.png
修改了NewPage,在写入Evict的页释放了函数大锁,主要目的是测试bug。
2.png
在FlushPage的时候释放函数大锁加页锁,在DeletePage写入Delete的页时释放了函数大锁,结果更差了。
3.png
// 分配一个空闲block;
// buf_pool_mutex_enter;
// 持有page_hash x lock;
// 检查page_hash中是否已被读入,如果是,表示另外一个线程已经完成了io,则忽略本次io请求,退出;
// 持有block->mutex,对block进行初始化,并加入到page hash中;
// 设置IO FIX为BUF_IO_READ;
// 释放hash lock;
// 将block加入到LRU上;
// 持有block s lock;
// 完成IO后,释放s lock;

+
文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2023/10/12/cmu-15445-2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
\ No newline at end of file diff --git a/2023/11/06/cmu-15445-3/index.html b/2023/11/06/cmu-15445-3/index.html index a628bf7..0fd612d 100644 --- a/2023/11/06/cmu-15445-3/index.html +++ b/2023/11/06/cmu-15445-3/index.html @@ -161,5 +161,5 @@ } } detectApple() - })(window)

CMU15445 C++学习笔记-其三(Project 2)

array_ 是零长数组,解释参见(https://blog.csdn.net/gatieme/article/details/64131322)初始化的时候在内存里是不占空间的,但是它真正能使用到的空间就是固定的 page 大小减去前面成员变量之后所剩的空间。因为实际上 BUCKET_ARRAY_SIZE 是固定的,为了不使内存溢出,注释也强调了不要在下面再加别的成员了(所以挺困惑我的一点就是既然总的 page 空间大小和数组 size 都定下来了,为什么不直接在初始化的时候就申请那么大的空间呢)

-
文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2023/11/06/cmu-15445-3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
\ No newline at end of file + })(window)

CMU15445 C++学习笔记-其三(Project 2)

array_ 是零长数组,解释参见(https://blog.csdn.net/gatieme/article/details/64131322)初始化的时候在内存里是不占空间的,但是它真正能使用到的空间就是固定的 page 大小减去前面成员变量之后所剩的空间。因为实际上 BUCKET_ARRAY_SIZE 是固定的,为了不使内存溢出,注释也强调了不要在下面再加别的成员了(所以挺困惑我的一点就是既然总的 page 空间大小和数组 size 都定下来了,为什么不直接在初始化的时候就申请那么大的空间呢)

+
文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2023/11/06/cmu-15445-3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
\ No newline at end of file diff --git a/2023/12/01/codetop100note/index.html b/2023/12/01/codetop100note/index.html index 8bd1a33..2b23cd2 100644 --- a/2023/12/01/codetop100note/index.html +++ b/2023/12/01/codetop100note/index.html @@ -7,7 +7,7 @@ - + @@ -58,7 +58,7 @@ isHome: false, isHighlightShrink: false, isToc: true, - postUpdate: '2023-12-18 22:26:59' + postUpdate: '2023-12-21 14:40:31' }

gsoc-2024-proposal-cn

如图所示:
+Overlapping rules

+

考虑STxn-0put操作(注意,这里的put并不包括STxn-0的子事务如GsTxn-*put操作),它不应该与图中标为红色的delput相交,同时,它又可以与图中标为蓝色的delput相交(换言之,这些背景是绿色的区域需要被排除)。这是因为ThenElse的语义注定了这两个分支只会选择一个执行,所以即使它们重叠了也无所谓。

+

方案一

+

首先考虑putdel相交的问题:

+

最好的办法莫过于构筑一棵包含了所有的del的区间树,然后遍历put进行查询。但如上所说,有一些del是需要被排除的,若是只存区间而不存事务间的父子兄弟关系,这将无法识别该排除什么。考虑到Xline作为一个metadata数据库,他的事务不应该有很多的嵌套结构以及很多的子事务,使用额外空间存一些信息是应当被允许的。

+

上面那张图有些复杂,实际上putdel的父子兄弟关系可以简化如下图:
+Overlapping Rules Simplified

+

考虑属于STxn-0Then分支的put,它仍然不能与红色区域内的del相交,但可以与蓝色区域的del相交。

+

笔者需要解释一下为什么可以这么简化:

+
    +
  • 目前只考虑del,因此,其他的put就可以先隐藏掉,同时*Txn List也可以省略掉了
  • +
  • ThenElse本身包含del,因此它们会有颜色
  • +
  • 而对于GsTxn-*这类事务节点,由于无论是它们的Then分支还是Else分支,要么全可以,要么全不可以与put相交,因此它们可以直接涂成红/蓝色
  • +
  • 紫色节点只是笔者为了画面和谐涂上去的,因为红+蓝=紫。也代表该节点的ThenElse需要分开处理
  • +
+

那么显然这就是一颗多叉树。先考虑直接对其进行编码。比如,以节点在其父节点的Txn List的顺序依次编号0,1,2...,然后ThenElse分别为01。对于属于STxn-0Then分支的put来说,它的编码就是00 00,而对于属于FatherTxn-Then-(STxn-0)-Else-(GsTxn-1)-Thendel来说,它的编码就是00 01 10

+

举几个具体的例子:

+
    +
  • 对于编码为00 00put,其应当排除的编码集合是[01 *, 00 01 *],其中*代表任意编码。
  • +
  • 对于编码为01 20 11put,其应当排除的编码集合是[00 *, 01 21 *, 01 20 10 *]。
  • +
+

那么完全可以总结出一条规则:求putdel的LCA节点,该节点若是*Txn*这类节点,则putdel不相交;若是Then或者Else节点,那么putdel相交。

+

再进一步,考虑建一颗多叉树,FatherTxn作为root节点,depth=0depth=0。则易知:当LCA节点的depth%2==0depth\%2==0时,则putdel不相交;当depth%2==1depth\%2==1时,那么putdel相交。

+

那么判断putdel相交的步骤就可以确定了,如下:

+
    +
  1. 构建一棵全局的区间树数据结构。这个数据结构应有以下的性质: +
      +
    • 该区间树可以存(Range,Value)二元组,Value可以是多叉树的路径编码,也可以是一个多叉树节点的引用
    • +
    • 该区间树插入(RangeA,Value1)和(RangeA,Value2)两个区间后,查询的时候应返回[Value1,Value2]两个值,因为不同子事务之间可能会有一模一样的区间,这两个区间的编码信息不应该被覆盖。
    • +
    +
  2. +
  3. 开始递归的遍历各个子事务的各分支的put数组。对于每个put,查询del区间树,遍历查询到的区间集合根据上述的LCA或路径编码进行重叠检测。
  4. +
+

现在考虑put之间相交的问题:

+

对于put来说,由于它是一堆点的集合,用hashmap构建重叠检测会更快一些。而且它们不需要担心顺序问题,完全可以在判断putdel相交的第二步,即递归遍历put数组的时候一起进行。

+

方案二

+

若是想少一些空间复杂度,应当有很多方法。比如,在递归地收集del的过程中,考虑直接进行重叠检测,笔者的简要思路如下:

+
    +
  1. 若是递归遍历到最底层的*Txn*。应确保它的ThenElse分支一定可以通过重叠检测,然后将这两个分支的delput合成一个delput
  2. +
  3. 然后两两比较与该*Txn*的处于同一级的其他*Txn*delput,注意到,这些*Txn*又处于它们父事务的ThenElse分支,因此可以跳回1
  4. +
+

细节不再阐述,像这样做的话,由于单独处理了ThenElse分支,所以不再需要记录这些事务的父子兄弟关系。

+

方案优劣比较

+

这两个方案用了很经典的时空复杂度互换的思想。

+
    +
  • 方案一增加了额外的空间复杂度,大致计算就是多用了8Numdel8*Num_{del}字节,NumdelNum_{del}del中所有区间的总数。假如想更快一点,可以再建一颗子节点指向父节点以及记录了depthdepth信息的多叉树。
  • +
  • 方案二不希望记录这些关系,结果就是时间复杂度的增加。对于每个*Txn*,它需要首先对自己的del建一颗区间树,然后要合并它所有子事务创建的区间树。而且,当它两两比较同级的del时,本质上是在nn棵小区间树上搜索,时间复杂度也会大于在一颗包含所有del的大区间树上搜索的时间复杂度。
  • +
+

笔者更倾向于使用第一种方案。因为Xline是一个metadata数据库,如前所述,他们不应该有很复杂的事务结构。方案一的空间复杂度实际由事务总数和del总数决定,del总数还可以通过区间合并减少一些。所以它的空间复杂度在可控的范围。

+

考虑方案一的极端情况下(实际上也是区间树的极端情况),遍历put一个值时查询到了非常多的del区间,无论最终重没重叠,这时都要一个一个的遍历这些区间判断是否重叠,即使区间树查询是logNlogN的时间复杂度,整个流程的时间复杂度此时会无限趋于NN。方案二则不会有这种情况,它单独处理了ThenElse分支,对于两两比较的场景,只要查询到任意区间,这都意味着重叠发生,可以返回DuplicatedKeyError了。

+

但是Xline仍然是一个metadata数据库,要是出现这种极端情况,笔者认为这应当是事务创建者的问题,而非Xline需要处理好的事。

+
文章作者: 羽殇之舞
文章链接: http://gg2002.github.io/2024/03/02/gsoc-2024-proposal-cn/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 羽殇之舞的个人博客
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
\ No newline at end of file diff --git a/archives/2021/11/index.html b/archives/2021/11/index.html index 9310ef2..31eec7c 100644 --- a/archives/2021/11/index.html +++ b/archives/2021/11/index.html @@ -55,7 +55,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2023-12-18 22:27:23' + postUpdate: '2024-03-02 00:14:31' }
文章总览 - 1
2024
gsoc-2024-proposal-cn
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
最新文章
网站资讯
文章数目 :
10
本站总字数 :
15.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git a/archives/2024/index.html b/archives/2024/index.html new file mode 100644 index 0000000..561b755 --- /dev/null +++ b/archives/2024/index.html @@ -0,0 +1,162 @@ +2024 | 羽殇之舞的个人博客 + + + + + + + + + +
文章总览 - 1
2024
gsoc-2024-proposal-cn
avatar
羽殇之舞
大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧
Follow Me
最新文章
网站资讯
文章数目 :
10
本站总字数 :
15.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git a/archives/index.html b/archives/index.html index f256998..2f4281e 100644 --- a/archives/index.html +++ b/archives/index.html @@ -55,7 +55,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2023-12-18 22:27:23' + postUpdate: '2024-03-02 00:14:31' }