深入浅出计算机组成原理
徐文浩
bothub 创始人
70433 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
深入浅出计算机组成原理
15
15
1.0x
00:00/00:00
登录|注册

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

Cassandra的读写设计
DMP系统的需求
传统关系型数据库的不足
Cassandra的读写设计
SSD硬盘的优势
Cassandra的读操作
Cassandra的写操作
Cassandra的数据模型
随机读写请求的挑战
索引的作用
最简单的关系型数据库设计
课后思考
推荐阅读
总结延伸
SSD:DBA们的大救星
Cassandra:顺序写和随机读
关系型数据库:不得不做的随机读写
为什么说SSD拯救了所有的DBA?

该思维导图由 AI 生成,仅供参考

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

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

我们先来想一想,如果现在让你自己写一个最简单的关系型数据库,你的数据要怎么存放在硬盘上?
最简单最直观的想法是,用一个 CSV 文件格式。一个文件就是一个数据表。文件里面的每一行就是这个表里面的一条记录。如果要修改数据库里面的某一条记录,那么我们要先找到这一行,然后直接去修改这一行的数据。读取数据也是一样的。
要找到这样数据,最笨的办法自然是一行一行读,也就是遍历整个 CSV 文件。不过这样的话,相当于随便读取任何一条数据都要扫描全表,太浪费硬盘的吞吐量了。那怎么办呢?我们可以试试给这个 CSV 文件加一个索引。比如,给数据的行号加一个索引。如果你学过数据库原理或者算法和数据结构,那你应该知道,通过 B+ 树多半是可以来建立这样一个索引的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

SSD硬盘的普及对数据库系统性能产生了重要影响,尤其是在高并发场景下。本文深入探讨了传统关系型数据库和分布式KV数据库Cassandra的设计原理和性能优化。文章首先介绍了关系型数据库的存储模型和索引机制,指出其灵活性导致大量的随机读写请求,限制了高并发处理能力。随后,详细解析了Cassandra的数据模型和读写操作,强调了其通过顺序写入和内存缓存优化,有效解决了随机写入和随机读取的性能挑战。此外,文章还介绍了Cassandra的列族概念和BloomFilter技术,以及对硬盘上数据文件的合并和查询优化。通过对比传统关系型数据库和Cassandra的设计原理和性能特点,读者能够深入了解SSD对数据库系统性能的重要影响,以及Cassandra在高并发场景下的优势。文章内容深入浅出,适合技术人员了解数据库系统的底层原理和性能优化技术。文章还强调了SSD硬盘的普及对数据库系统性能的重要影响,尤其是在高并发场景下。通过对比传统关系型数据库和Cassandra的设计原理和性能特点,读者能够深入了解SSD对数据库系统性能的重要影响,以及Cassandra在高并发场景下的优势。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出计算机组成原理》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(21)

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

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

    2019-09-04
    3
    40
  • 免费的人
    用户态程序 怎么控制顺序写还是随机写?

    作者回复: 只追加不修改,一般操作系统和文件系统会为你处理好顺序写的问题的。 修改特定文件中间的内容,那自然就是随机写啦。

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

    作者回复: 可以这样做也可以不这样做。一般来说大部分都不会直接存放物理地址。仍然是通过操作系统的文件系统来管理的。 B+树序列化地存放在文件里面,反序列化加载的过程就是B+树生成的过程啊。

    2019-09-04
    6
    7
  • 山间竹
    我想问一下,Cassandra在hdd上删除重写是个怎么样的机制呢?会不会出现碎片,然后直接影响到顺序大块写?

    作者回复: 山间竹同学, 你好,Cassandra最新版本的代码我没有那么熟悉。不过早期版本的Cassandra用过很长一段时间,如果我没有记错的话,基本的逻辑是这样的。 1. 通过Write Ahead Log的方式先把操作写入到日志 2. 再写入数据到内存里面 3. 内存定期会Dump到磁盘上 4. 后台有进程做Compact来减少Dump的数据和日志 在做Compaction的过程中,顺序写的性能和在线访问的性能都会受一定影响。不过主要是磁盘IO,而不是碎片问题。可以认为Compaction其实就是不停做碎片整理。

    2020-01-06
    4
    4
  • 易儿易
    透过现象看本质,跟着老师的讲解一层层剥离原理,知其然,并知所以然~希望以后自己也能深度分析技术原理进行技术选型,而不是盲从大流以及试试看不行就换……

    作者回复: 👍加油

    2019-09-08
    4
  • fcb的鱼
    你好,问下 1.Cassandr 数据库在数据读取层面,通过内存缓存+ BloomFilte+硬盘的机制来保证随机读的问题。想问下这个随机读的过程中,请求只查询内存的数据占多大比例呢?在Cassandr数据库的架构里边,这个内存占用率是多少(比如是不是硬盘是10G,内存是1G).这种架构。 2.如果mysql在不考虑随机写的场景下,使用这种内存+硬盘的方案是不是也可以的?

    作者回复: fcb的鱼同学, 你好 1. 对应比例要看实际的数据访问分布,并没有一个固定答案,其实可以回头重新看看讲存储分层里面的案例,你可以根据你的实际应用场景来估算。 内存占用也是要看你的硬件配置,你只配1G内存当然用不了2G对不对 2. 我不是MySQL的专家,没有仔细研读过MySQL的代码。不过MySQL肯定也会用类似BloomFilter机制,以及必然会有缓存,来减少对于磁盘的访问。以提升整个数据库在实际应用中的表现。

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

    作者回复: 谢谢

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

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

    2019-09-05
    1
  • 学而不思则惘
    之前一直没有研究过Cassandra,看了这篇文章才知道,原来和hbase等系列的日志型nosql基本一致,同样的lms树的随机读取效率低,同样的内置布隆过滤器,内置的查询缓存,还有同样的compact,甚至大文件拆分,Google的BigTable还真是影响深远啊
    2020-08-04
    12
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部