From 9b156a2d8f6349b7156457edc84081cb3ac949ec Mon Sep 17 00:00:00 2001
From: jpwang
Date: Sun, 3 Mar 2024 15:56:58 +0800
Subject: [PATCH] Site updated: 2024-03-03 15:56:58
---
2024/03/01/DB04-Storage/index.html | 27 +++++++++++++++++++++++++--
atom.xml | 4 ++--
2 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/2024/03/01/DB04-Storage/index.html b/2024/03/01/DB04-Storage/index.html
index 2f4fdd1..72965fb 100644
--- a/2024/03/01/DB04-Storage/index.html
+++ b/2024/03/01/DB04-Storage/index.html
@@ -222,7 +222,7 @@ Block
用数据结构组织未分配的位置(链表/树/...)
因为插入和删除的位置可以是任意的,所以用数组就会很呆。如果做过 oslab
-就会知道需要加 header 各种挤 metadata 的空间
+就会想到加 header 各种挤 metadata 的空间
fixed-length
这时候 fixed-length tuple 的假设就非常好了,回想 slab-page + bit flag
的设计,这里对应就是 block-tuple + bit flag
@@ -232,6 +232,29 @@ variable-length
的问题了
书上还列举了很多比较具体的做法,都不是很难
File
+和 block 管理是类似的,不同之处在于一些假设
+Unordered
+即 tuple 的顺序无所谓,每个 block
+都是同等地位的。这个和内存分配是一样的
+Ordered
+要求 tuple 之间按照某个 key 排序。由于目前的架构是 tuple-block-file
+三层的,这实际上提出了两个要求:
+
+- block 内部的 tuple 要(逻辑上)有序
+- file 内部的 block 要(逻辑上)有序
+
+解决办法:
+
+- 如果用数组就可以直接移动位置排序,如果用链表就可以操作引用来排序。总之是排个序
+- 数组可以定时合并,链表可以横跨 block 排序
+
+如果比我聪明的话应该马上就能想到用 B 树这样的数据结构来维护
+树-结点-数据 这样的三层结构了。
+Tricks
+
+- prejoin:意思是把某些实际上相关的表提前 join 在一起
+- partitioning:意思是把某些表划分成子表,这些子表内部满足一些性质(比如有序),以此利用查询时的局部性
+
@@ -276,7 +299,7 @@ File
目录
diff --git a/atom.xml b/atom.xml
index ea4f423..12de063 100644
--- a/atom.xml
+++ b/atom.xml
@@ -6,7 +6,7 @@
- 2024-03-01T12:53:06.361Z
+ 2024-03-03T07:56:50.115Z
http://example.com/
@@ -21,7 +21,7 @@
http://example.com/2024/03/01/DB04-Storage/
2024-03-01T11:47:15.000Z
- 2024-03-01T12:53:06.361Z
+ 2024-03-03T07:56:50.115Z