- 博客(34)
- 收藏
- 关注
原创 mini-lsm通关笔记Week2Day7
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm在上一章中,您已经构建了一个完整的基于LSM的存储引擎。在本周末,我们将实现存储引擎的一些简单但重要的优化。欢迎来到Mini-LSM的第2周零食时间!
2025-02-05 21:02:07
828
原创 mini-lsm通关笔记Week2Day6
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2025-02-05 21:01:26
880
原创 MySQL训练营-慢查询诊断问题
此例中返回了 1 行数据给客户端,说明查询结果的数据量比较小,不过查询耗时却很长,这就提示可能是查询执行过程中的其他环节(比如函数执行等情况)导致了整体的缓慢,而非数据量太大需要大量传输的原因。元数据写锁是排他锁,意味着在持有该锁期间,其他事务无法获取该表的任何元数据锁(包括读锁和写锁)。指的是该查询在获取锁资源上所花费的时间,单位同样是秒。这里显示为 0 秒,意味着这个查询在执行过程中基本没有因为等待获取锁而耗费时间,即没有遇到锁等待的情况,能直接获取到所需的锁进行后续的操作。MySQL 中的一个参数。
2025-01-23 22:13:53
741
原创 mini-lsm通关笔记Week2Day5
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-11-20 21:26:16
694
原创 mini-lsm通关笔记Week2Day4
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-11-19 22:16:10
635
原创 mini-lsm通关笔记Week2Day3
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-09-25 19:45:22
942
原创 mini-lsm通关笔记Week2Day2
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-09-25 19:39:04
739
原创 mini-lsm通关笔记Week2Overview
合并策略通常的目的是控制排序的run层数,从而使读放大保持在一个合理的数量。通常有两类合并策略:分级(leveled)和分层(tiered在分级合并中,用户可以指定最大级别数,即系统中排序的run的层数(L0除外)。例如,RocksDB通常在分级合并模式下保持6级(排序的run在合并过程中,来自两个相邻层的SST将被合并,然后产生的SST将被放到两个层的较低层。因此,在分级合并中,您通常会看到一个小的排序的run与一个大的排序的run合并。排序的run。
2024-09-25 18:57:25
828
原创 MIT6.824 课程-PrimaryBackupReplication
鉴于虚拟机和计算机底层原理不是我所感兴趣的内容,论文 3.3 节以后的内容我也只是简单地浏览了一遍,这篇文章中也没有总结这些内容,有兴趣的读者可自行查阅论文的原文。尽管如此,此文仍然是主从备份话题的一次不错的 case study,也确实系统地描述和对比了 Primary-Backup Replication 两种常见的解决思路。稍微了解过市面上常用的数据库系统的同学就会了解,主从备份可以说是数据库系统必备的高可用方案之一。
2024-09-10 22:06:19
1007
原创 MIT6.824 课程-GFS
存储(Storage)是一个非常关键的抽象,用途广泛。GFS 论文还提到了很多关于容错、备份和一致性的问题。GFS 本身是 Google 内部一个很成功的实用系统,其关键点被很好的组织到一块发表成为了学术论文,从硬件到软件,涵盖了很多问题,值得我们学习。
2024-09-10 22:05:11
1051
原创 MIT6.824 课程-MapReduce
在过去五年里,作者以及许多其他在谷歌工作的人已经实现了数百种用于特殊目的的计算。它们可以用来处理大量原始数据,例如:爬取的文档,网页请求日志等等。并以此来计算出各种衍生数据,例如:倒排索引,Web文档的各种图表示,每台主机所抓取页面数的摘要,以及特定某天中最频繁的查询集等等。大部分这种计算从概念上来讲都很简单。但是,输入的数据量通常非常巨大,并且为了能在一个合理的时间内完成,计算任务也不得不分配给成百上千台机器去执行。
2024-09-10 22:04:30
1209
原创 mini-lsm通关笔记Week2Day1
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-09-09 21:27:33
1023
原创 mini-lsm通关笔记Week1Day7
根据需要,您可能需要向结构中添加新的字段,而不是在启动器代码中提供的字段。现在,在get读取路径上,我们还可以使用布隆过滤器来忽略不包含用户想要查找的key的SST,从而减少从磁盘读取文件的数量。您可以将键添加到布隆过滤器中,并且您可以知道在添加到布隆过滤器中的键集合中,哪些键可能存在/一定不存在。由于SST文件是按顺序存储键的,所以有可能用户存储的是相同前缀的键,我们可以在SST编码中对前缀进行压缩,以节省空间。根据需要,您可能需要向结构中添加新字段,而不是在启动器代码中提供的字段。
2024-09-03 22:15:24
800
原创 mini-lsm通关笔记Week1Day6
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-09-02 21:21:48
889
原创 mini-lsm通关笔记Week1Day5
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-08-26 21:47:07
1191
原创 sql优化-错误强制类型转换导致索引失效
是类型转换操作符,用于将一个表达式的值转换为另一种数据类型。声明其为主键,数据库会默认为其建立索引。创建下面表,仅有一个字段。类型,也就无法使用索引。
2024-08-26 21:41:45
184
原创 mini-lsm通关笔记Week1Day4
项目地址:https://github.com/skyzh/mini-lsm个人实现地址:https://gitee.com/cnyuyang/mini-lsm。
2024-08-21 23:11:13
987
原创 mini-lsm通关笔记Week1Day3
由于键值条目以原始格式存储,偏移量存储在单独的数组中,这减少了解码数据时不必要的内存分配和处理开销——您需要做的是简单地将原始块数据复制到数据数组中,并每隔2个字节解码条目偏移量,而不是创建类似Vec将所有的键值对存储在内存中的一个块中。块的大小通常为4 KB(大小可能因存储介质而异),这相当于操作系统中的页面大小和SSD上的页面大小。如果到达块的末尾,我们可以将key设置为空,并从is_valid返回false,这样调用者可以在可能的情况下切换到另一个块。,它将定位在块中的第一个键。
2024-06-22 01:48:24
745
原创 mini-lsm通关笔记Week1Day2
但是,当我们走出if条件并将错误返回给调用者时,PeekMut的drop将尝试在堆中移动元素,这导致访问无效的迭代器。在PeekMut的范围内。你可以简单地用memtable迭代器构造一个LSM迭代器(记得把最新的memtable放在merge迭代器的前面),然后你的存储引擎就可以处理扫描请求了。您需要首先在单个memtable上创建迭代器,然后在所有memtable上创建合并迭代器,最后实现迭代器的范围限制。然而,在我们的情况下,我们不希望在迭代器上有这样的生命周期,以避免使系统过于复杂(并且难以编译…
2024-06-22 01:47:00
797
原创 libfort中文教程-翻译
属性可以设置为默认值(用于将来创建的表中的所有单元格)、用于指定表的所有单元格、用于指定某一行的单元格、用于指定某一列中的单元格以及用于指定表的特定单元格。libfort有许多内置的边框样式。要更改libfort表的边框样式,可以使用。所有用来写数据的函数都是成对的:(默认情况下,在libfort表中创建的所有单元格都将具有相同的属性。表都有一个当前单元格——在下一次写操作中将向其写入数据。在表生存期中分配的所有资源将在析构函数中自动释放。可以向表单元写入任意数量的字符串参数。向一组连续的单元格写入数据,
2024-01-18 22:22:35
1076
原创 CMU 14-445/645 Project #2 Hash Index
在fall2019的版本中需要实现的hash table的测试代码()已经被注释掉了,所以这里实现的是fall2023版本中的可扩展哈希。
2024-01-11 22:52:38
1698
原创 手搓zookeeper样例实现记录
在学习zookeeper过程中,学习了一个监听节点状态变化,而开始、停止计数的案例。看懂了不代表就会了,于是想自己实现一个简单的版本。在自己实现的过程中也遇到了一些问题,在这里记录一下。
2023-06-02 21:06:06
139
1
原创 CMU15-445/645 Lecture#7 Tree Indexes I
Tree Indexes I构建索引的另一种方式就是通过Tree。B+ Tree有一个称为B树的特定数据结构。人们还使用该术语来泛指一类平衡树数据结构:→ B-Tree (1971)→ B+Tree (1973)→ B*Tree (1977?)→ B^link-Tree (1981)相关资料关于B树及B+树可以通过以下两篇文章了解:漫画:什么是B-树?https://juejin.im/post/5c31f64c6fb9a049ac794ffc漫画:什么是B+树?https://mp
2020-06-06 16:48:39
345
原创 CMU15-445/645 Lecture#6 Hash Tables
Hash Tables哈希表实现了将键映射到值的无序关联数组。它使用哈希函数为给定键计算数组的偏移量,从该偏移量可以可以找到值。空间复杂度:O(n)操作复杂度:→平均:O(1)→最差:O(n)Static Hash Tables分配一个巨大的数组,该数组为您需要存储的每个元素分配一个插槽。要查找条目,请通过%n以找到数组中的偏移量前提您会提前知道元素的数量每个键都是唯一的最完美的的哈希函数:→ 如果key1 ≠ key2,则 hash(key1) ≠ hash(key2)Ha
2020-05-10 20:50:30
312
原创 CMU15-445/645 Lecture#5 Buffer Pools
双重环境前端采用OLTP型数据库,负责数据的查询、修改。后端采用OLAP型数据库,负责数据的分析。Buffer Pool ManagerBuffer Pool 组织内存区域组织为固定大小的页面数组。数组条目称为frame。当DBMS请求页面时,将精确的副本放置在这些frame之一中。Buffer Pool元数据page table跟踪当前在内存中的页面。每页还维护其他元数据:→Dirty Flag→Pin/Reference 计数器LOCKS VS LATCHES在讨论DBM
2020-05-08 17:36:50
354
原创 CMU15-445/645 Lecture#4 Database Storage II
日志结构的文件组织DBMS只存储日志记录,而不是在页面中存储元组。系统将日志记录追加到有关如何修改数据库的文件中:→插入存储整个元组。→删除将元组标记为已删除。→更新仅包含已修改属性的增量。建立索引以使其跳至日志中的位置。定期压缩日志。数据表示元组本质上是字节序列。DBMS的工作是将这些字节解释为属性类型和值。DBMS的目录包含有关表的模式信息,系统使用这些表来确定元组的...
2020-05-08 17:30:58
222
原创 CMU15-445/645 Lecture#3 Database Storage I
面向磁盘的DBMS数据库全部在磁盘上,数据库文件中的数据被组织成页面,第一页是目录页面。 为了对数据进行操作,DBMS需要将数据带入内存。它通过具有一个缓冲池来实现此目的,该缓冲池管理着磁盘和内存之间的来回移动。 DBMS还具有将执行查询的执行引擎。 执行引擎将向缓冲池询问特定的页面,并且缓冲池将负责将该页面带入内存并为执行引擎提供指向内存中页面的指针。 当执行引擎在该内存上运行时,缓冲池管理器...
2020-05-08 17:15:46
296
原创 CMU15-445/645 Lecture#2 Advanced SQL
SQL的历史最新的SQL规范:2016→ SQL:2016 → JSON, Polymorphic tables→ SQL:2011 → Temporal DBs, Pipelined DML→ SQL:2008 → TRUNCATE, Fancy sorting→ SQL:2003 → XML, windows, sequences, auto-gen IDs.→ SQL:1999 ...
2020-05-08 16:34:38
363
原创 CMU15-445/645 Lecture#1 Course Introduction and the Relational Model
关系性数据库提出的背景刚开始是没有数据库这概念的.当数据量比较少时用一个啥txt文本文件就差不多就能搞定了.但数据量稍微多一点时,而且数据保存在不同的文件中.比如啥txt,doc,excel等文件.此时要处理数据还是手动去查询更改就非常之麻烦.可能得再整个简单应用程序帮你做些事了.只给你提供一些简单的用户界面.封装背后的一些复杂操作.此时数据的组织和保存还是主要依靠操作系统的文件系统.应用程序只...
2020-05-08 16:16:05
248
原创 CMU 14-445/645 Project #1 Buffer Pool
Lab1 Buffer Pool时钟更换策略时钟的组成对于单个frame应当有以下三部分组成:frame_id、Ref、PIN。frame_id:唯一确定id,与buffer pool相对应。Ref:该frame最近是否使用过。使挑选的frame尽量是很久之前使用的(类似与LRU)PIN:该frame是否正在使用。?> 注:该时钟不包含任何page信息,真正的page是存储在...
2020-05-08 15:36:19
1112
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人