深入浅出计算机组成原理
徐文浩
bothub创始人
立即订阅
13019 人已学习
课程目录
已完结 62 讲
0/4登录后,你可以任选4讲全文学习。
入门篇 (5讲)
开篇词 | 为什么你需要学习计算机组成原理?
免费
01 | 冯·诺依曼体系结构:计算机组成的金字塔
02 | 给你一张知识地图,计算机组成原理应该这么学
03 | 通过你的CPU主频,我们来谈谈“性能”究竟是什么?
04 | 穿越功耗墙,我们该从哪些方面提升“性能”?
原理篇:指令和运算 (12讲)
05 | 计算机指令:让我们试试用纸带编程
06 | 指令跳转:原来if...else就是goto
07 | 函数调用:为什么会发生stack overflow?
08 | ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
09 | 程序装载:“640K内存”真的不够用么?
10 | 动态链接:程序内部的“共享单车”
11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
12 | 理解电路:从电报机到门电路,我们如何做到“千里传信”?
13 | 加法器:如何像搭乐高一样搭电路(上)?
14 | 乘法器:如何像搭乐高一样搭电路(下)?
15 | 浮点数和定点数(上):怎么用有限的Bit表示尽可能多的信息?
16 | 浮点数和定点数(下):深入理解浮点数到底有什么用?
原理篇:处理器 (18讲)
17 | 建立数据通路(上):指令+运算=CPU
18 | 建立数据通路(中):指令+运算=CPU
19 | 建立数据通路(下):指令+运算=CPU
20 | 面向流水线的指令设计(上):一心多用的现代CPU
21 | 面向流水线的指令设计(下):奔腾4是怎么失败的?
22 | 冒险和预测(一):hazard是“危”也是“机”
23 | 冒险和预测(二):流水线里的接力赛
24 | 冒险和预测(三):CPU里的“线程池”
25 | 冒险和预测(四):今天下雨了,明天还会下雨么?
26 | Superscalar和VLIW:如何让CPU的吞吐率超过1?
27 | SIMD:如何加速矩阵乘法?
28 | 异常和中断:程序出错了怎么办?
29 | CISC和RISC:为什么手机芯片都是ARM?
30 | GPU(上):为什么玩游戏需要使用GPU?
31 | GPU(下):为什么深度学习需要使用GPU?
32 | FPGA和ASIC:计算机体系结构的黄金时代
33 | 解读TPU:设计和拆解一块ASIC芯片
34 | 理解虚拟机:你在云上拿到的计算机是什么样的?
原理篇:存储与I/O系统 (17讲)
35 | 存储器层次结构全景:数据存储的大金字塔长什么样?
36 | 局部性原理:数据库性能跟不上,加个缓存就好了?
37 | 高速缓存(上):“4毫秒”究竟值多少钱?
38 | 高速缓存(下):你确定你的数据更新了么?
39 | MESI协议:如何让多核CPU的高速缓存保持一致?
40 | 理解内存(上):虚拟内存和内存保护是什么?
41 | 理解内存(下):解析TLB和内存保护
42 | 总线:计算机内部的高速公路
43 | 输入输出设备:我们并不是只能用灯泡显示“0”和“1”
44 | 理解IO_WAIT:I/O性能到底是怎么回事儿?
45 | 机械硬盘:Google早期用过的“黑科技”
46 | SSD硬盘(上):如何完成性能优化的KPI?
47 | SSD硬盘(下):如何完成性能优化的KPI?
48 | DMA:为什么Kafka这么快?
49 | 数据完整性(上):硬件坏了怎么办?
50 | 数据完整性(下):如何还原犯罪现场?
51 | 分布式计算:如果所有人的大脑都联网会怎样?
应用篇 (5讲)
52 | 设计大型DMP系统(上):MongoDB并不是什么灵丹妙药
53 | 设计大型DMP系统(下):SSD拯救了所有的DBA
54 | 理解Disruptor(上):带你体会CPU高速缓存的风驰电掣
55 | 理解Disruptor(下):不需要换挡和踩刹车的CPU,有多快?
结束语 | 知也无涯,愿你也享受发现的乐趣
免费
答疑与加餐 (5讲)
特别加餐 | 我在2019年F8大会的两日见闻录
FAQ第一期 | 学与不学,知识就在那里,不如就先学好了
用户故事 | 赵文海:怕什么真理无穷,进一寸有一寸的欢喜
FAQ第二期 | 世界上第一个编程语言是怎么来的?
特别加餐 | 我的一天怎么过?
深入浅出计算机组成原理
登录|注册

53 | 设计大型DMP系统(下):SSD拯救了所有的DBA

徐文浩 2019-09-04
上一讲里,根据 DMP 系统的各个应用场景,我们从抽象的原理层面,选择了 AeroSpike 作为 KV 数据库,Kafka 作为数据管道,Hadoop/Hive 来作为数据仓库。
不过呢,肯定有不信邪的工程师会问,为什么 MongoDB,甚至是 MySQL 这样的文档数据库或者传统的关系型数据库不适用呢?为什么不能通过优化 SQL、添加缓存这样的调优手段,解决这个问题呢?
今天 DMP 的下半场,我们就从数据库实现的原理,一起来看一看,这背后的原因。如果你能弄明白今天的这些更深入、更细节的原理,对于什么场景使用什么数据库,就会更加胸有成竹,而不是只有跑了大量的性能测试才知道。下次做数据库选型的时候,你就可以“以理服人”了。

关系型数据库:不得不做的随机读写

我们先来想一想,如果现在让你自己写一个最简单的关系型数据库,你的数据要怎么存放在硬盘上?
最简单最直观的想法是,用一个 CSV 文件格式。一个文件就是一个数据表。文件里面的每一行就是这个表里面的一条记录。如果要修改数据库里面的某一条记录,那么我们要先找到这一行,然后直接去修改这一行的数据。读取数据也是一样的。
要找到这样数据,最笨的办法自然是一行一行读,也就是遍历整个 CSV 文件。不过这样的话,相当于随便读取任何一条数据都要扫描全表,太浪费硬盘的吞吐量了。那怎么办呢?我们可以试试给这个 CSV 文件加一个索引。比如,给数据的行号加一个索引。如果你学过数据库原理或者算法和数据结构,那你应该知道,通过 B+ 树多半是可以来建立这样一个索引的。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入浅出计算机组成原理》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(10)

  • 免费的人
    用户态程序 怎么控制顺序写还是随机写?

    作者回复: 只追加不修改,一般操作系统和文件系统会为你处理好顺序写的问题的。

    修改特定文件中间的内容,那自然就是随机写啦。

    2019-09-04
    7
  • xindoo
    我想起来一个段子,某大厂对外宣称把mysql的性能提升了十几倍,其实是改用了SSD。

    作者回复: 哈哈,其实在10-15年这段时间,这样的性能提升和解决方案是常态

    2019-09-04
    3
  • leslie
    提出一点质疑希望老师不要介意啊,毕竟学习的过程以及和老师交互还是比较愉快:老师用CSV格式去说MYSQL好像不太合适吧,mysql其实很少会导出成CSV格式-oracle的特性,至少5.5和5.6都会导成sql格式,sql server都很少会用这种格式去导成CSV文件-导入不太方便,Oracle倒是这种形式最方便且速度方面最稳定。
           老师说马上就要完课了:这门课还有多久啊?真正沉浸学习中发现课程结束的都超快,两门课结合着学习-发现时光如梭,前天刘老师的课刚收尾,老师的课就要结束了;真快。

    作者回复: 欢迎多质疑,我写的内容其实也还是有不少错漏的。

    嗯,其实我用CSV来举例子是希望简化描述问题。MySQL这样得数据库,底层的存储自然不是一个CSV这样的格式。


    不过作为一门入门的课程,直接再去讲MySQL里面的存储格式,无论是篇幅还是难度可能对大部分同学都大了一些。

    也许用更简单的数据库,比如SQLite的底层B+树的存储格式可能更合适一些。

    课程内容到今天已经写完了,接下来会把写文章的时间回复掉大家所有的问题,做一些内容的订正,以及根据反馈再发几篇FAQ和加餐。

    2019-09-04
    1
    1
  • 安排
    b+ 树索引中会存储每行数据在硬盘中的物理地址吗?这个物理地址是不是由好几部分组成,比如柱面,磁道,扇区的组合。
    那B+ 树索引本身又是怎么存放的呢?b+树要存到硬盘上的话需要做特殊的序列化吗?怎么才能保证从硬盘读入索引数据后快速的在内存生成一棵B+树呢?

    作者回复: 可以这样做也可以不这样做。一般来说大部分都不会直接存放物理地址。仍然是通过操作系统的文件系统来管理的。

    B+树序列化地存放在文件里面,反序列化加载的过程就是B+树生成的过程啊。

    2019-09-04
    2
    1
  • 随心而至
    只有明白1+1,才可以推到公式,读这篇文章有种酣畅淋漓的感觉,赞赞赞
    2019-10-24
  • prader
    cassendra (通过优化随机读取) 和ssd 硬盘可以更好的支持并发。
    2019-10-18
  • 活的潇洒
    坚持到最后、你会收获不一样的自己、加油

    day53 笔记:https://www.cnblogs.com/luoahong/p/11514616.html
    2019-09-15
  • 易儿易
    透过现象看本质,跟着老师的讲解一层层剥离原理,知其然,并知所以然~希望以后自己也能深度分析技术原理进行技术选型,而不是盲从大流以及试试看不行就换……

    作者回复: 👍加油

    2019-09-08
  • 暴风雪
    中途一度落后了20多节课,然后每天都看一两篇再度追上了进度,课程越后面越精彩

    作者回复: 谢谢

    2019-09-05
  • 吴宇晨
    列式存储是按同一列数据cun

    作者回复: 能更具体一点么?

    2019-09-05
收起评论
10
返回
顶部