需知:就算有的逻辑判断觉得没必要,也不妨写出来,因为多线程的运行确实难以预测,我能相信的只有拿着锁的时候。 二、debug 心得 (这里的 心得 不是技术向的)上面那个 bug 花了我很大功夫打上 log 来排查,并且从打完 log 到发现 bug,解释 bug 修改 bug 又经历了一个痛苦的过程。甚至连定位错误都是一种奢望,...
工作之余完成这个实验还是花费了我不少的时间, 时间跨度巨大, 但是这个实验收获还是蛮多的, 从最开始的各种数据结构的复习, 到C++移动构造函数这些语法的学习, 不管是学习还是复习, 用的还是蛮多的, 还有就是 Debug, 学会了使用LOG_DEBUG就开始偷懒提交到 GradeScope, 然后判断是否通过, 偷看一些中间日志, 不过有...
LOG_DEBUG("I/O error reading past end of file");// std::cerr << "I/O error while reading" << std::endl;}else{// set read cursor to offsetdb_io_.seekp(offset); db_io_.read(page_data, PAGE_SIZE);if(db_io_.bad()) { LOG_DEBUG("I/O error while reading");return; }// ...
还有一些DEBUG技巧,踩坑等等,包括使用gdb查看coredump,使用prof生成火焰图分析性能瓶颈。 整体代码规范、可读性很高。使用clang-format , clang-tidy规范代码(吐槽一下,函数返回值一定要用尾置返回)。cmake文件结构层次明了,cmake可以借鉴移植到自己的项目中。第三方库用到gtest、fmt、argparse等,还有一些自制的工具类...
{CMAKE_CXX_FLAGS} -std=c++1y") else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++1y support. Please use a different C++ compiler.") endif() # Create a new pre-processor macro __VTableFILE__ that has a truncated # path to reduce the size of the debug log ...
数据库系统的Buffer Pool和虚拟内存机制相似,但是目标却不同。因为数据库系统的数据本身就是存储在磁盘中,虚拟内存机制是为了在逻辑层面扩展计算机的计算资源,而Buffer Pool机制则是为了减少磁盘的I/O操作。(注意,Buffer Pool位于InnoDB存储引擎层,与MySQL8.0 版本摒弃的查询缓存不是同一个东西) ...
log_manager: 不用管 page_table_: 页表,用于映射页到页框 replacer_: 之前写的LRU-K策略 free_list_: 空闲链表,维护可用空间 latch_: 锁 下面说几个 tips 需要注意: 1. pages_ 维护的是页框,所以用 frame_id 作下标 2. 您是否真的想清楚 pin_count 的含义? 如:当一个线程 fetchpage 时,如果这...
值得注意的是:你需要根据undo log的is_delete_以及TupleMeta的is_delete_判断此时重建是否成功。成功重建的情况有:undo_logs为空但tuple没有被删除 undo_logs不为空且最后一个undo_log没有被删除(无需考虑tuple是否被删除)在遍历undo logs时,你也无需考虑undo_log是否被删除,只需应用修改。
2022年大二暑假无意间发现了新天地——一位北大信科学长创建的自学全家桶,CS自学指南 (csdiy.wiki)。当时苦于C++代码能力极差,院内绩点内卷痛苦,不知道朝哪个方向学习,这份自学指南给了我相当的一份慰藉。 当时大二下学完了数据库,本校数据库系统课程不错,激发了我对这方面的兴趣,但是很可惜因为笔者读的是软院...
从10.6到今天(12.25)总共花了接近三个月的时间完成了cmu15445,WakaTime的code计时是53hrs39mins,但是因为前两个project忘了计时,再算上debug和看网课的时间,实际用时应该超过100个小时。亲身体验,难度确实和迟先生说的一样是逐渐递增的。 You should focus on other important things in your life before coming ba...