53 | 设计大型DMP系统(下):SSD拯救了所有的DBA
该思维导图由 AI 生成,仅供参考
关系型数据库:不得不做的随机读写
- 深入了解
- 翻译
- 解释
- 总结
SSD硬盘的普及对数据库系统性能产生了重要影响,尤其是在高并发场景下。本文深入探讨了传统关系型数据库和分布式KV数据库Cassandra的设计原理和性能优化。文章首先介绍了关系型数据库的存储模型和索引机制,指出其灵活性导致大量的随机读写请求,限制了高并发处理能力。随后,详细解析了Cassandra的数据模型和读写操作,强调了其通过顺序写入和内存缓存优化,有效解决了随机写入和随机读取的性能挑战。此外,文章还介绍了Cassandra的列族概念和BloomFilter技术,以及对硬盘上数据文件的合并和查询优化。通过对比传统关系型数据库和Cassandra的设计原理和性能特点,读者能够深入了解SSD对数据库系统性能的重要影响,以及Cassandra在高并发场景下的优势。文章内容深入浅出,适合技术人员了解数据库系统的底层原理和性能优化技术。文章还强调了SSD硬盘的普及对数据库系统性能的重要影响,尤其是在高并发场景下。通过对比传统关系型数据库和Cassandra的设计原理和性能特点,读者能够深入了解SSD对数据库系统性能的重要影响,以及Cassandra在高并发场景下的优势。
《深入浅出计算机组成原理》,新⼈⾸单¥68
全部留言(21)
- 最新
- 精选
- xindoo我想起来一个段子,某大厂对外宣称把mysql的性能提升了十几倍,其实是改用了SSD。
作者回复: 哈哈,其实在10-15年这段时间,这样的性能提升和解决方案是常态
2019-09-04340 - 免费的人用户态程序 怎么控制顺序写还是随机写?
作者回复: 只追加不修改,一般操作系统和文件系统会为你处理好顺序写的问题的。 修改特定文件中间的内容,那自然就是随机写啦。
2019-09-04233 - leslie提出一点质疑希望老师不要介意啊,毕竟学习的过程以及和老师交互还是比较愉快:老师用CSV格式去说MYSQL好像不太合适吧,mysql其实很少会导出成CSV格式-oracle的特性,至少5.5和5.6都会导成sql格式,sql server都很少会用这种格式去导成CSV文件-导入不太方便,Oracle倒是这种形式最方便且速度方面最稳定。 老师说马上就要完课了:这门课还有多久啊?真正沉浸学习中发现课程结束的都超快,两门课结合着学习-发现时光如梭,前天刘老师的课刚收尾,老师的课就要结束了;真快。
作者回复: 欢迎多质疑,我写的内容其实也还是有不少错漏的。 嗯,其实我用CSV来举例子是希望简化描述问题。MySQL这样得数据库,底层的存储自然不是一个CSV这样的格式。 不过作为一门入门的课程,直接再去讲MySQL里面的存储格式,无论是篇幅还是难度可能对大部分同学都大了一些。 也许用更简单的数据库,比如SQLite的底层B+树的存储格式可能更合适一些。 课程内容到今天已经写完了,接下来会把写文章的时间回复掉大家所有的问题,做一些内容的订正,以及根据反馈再发几篇FAQ和加餐。
2019-09-0427 - 安排b+ 树索引中会存储每行数据在硬盘中的物理地址吗?这个物理地址是不是由好几部分组成,比如柱面,磁道,扇区的组合。 那B+ 树索引本身又是怎么存放的呢?b+树要存到硬盘上的话需要做特殊的序列化吗?怎么才能保证从硬盘读入索引数据后快速的在内存生成一棵B+树呢?
作者回复: 可以这样做也可以不这样做。一般来说大部分都不会直接存放物理地址。仍然是通过操作系统的文件系统来管理的。 B+树序列化地存放在文件里面,反序列化加载的过程就是B+树生成的过程啊。
2019-09-0467 - 山间竹我想问一下,Cassandra在hdd上删除重写是个怎么样的机制呢?会不会出现碎片,然后直接影响到顺序大块写?
作者回复: 山间竹同学, 你好,Cassandra最新版本的代码我没有那么熟悉。不过早期版本的Cassandra用过很长一段时间,如果我没有记错的话,基本的逻辑是这样的。 1. 通过Write Ahead Log的方式先把操作写入到日志 2. 再写入数据到内存里面 3. 内存定期会Dump到磁盘上 4. 后台有进程做Compact来减少Dump的数据和日志 在做Compaction的过程中,顺序写的性能和在线访问的性能都会受一定影响。不过主要是磁盘IO,而不是碎片问题。可以认为Compaction其实就是不停做碎片整理。
2020-01-0644 - 易儿易透过现象看本质,跟着老师的讲解一层层剥离原理,知其然,并知所以然~希望以后自己也能深度分析技术原理进行技术选型,而不是盲从大流以及试试看不行就换……
作者回复: 👍加油
2019-09-084 - fcb的鱼你好,问下 1.Cassandr 数据库在数据读取层面,通过内存缓存+ BloomFilte+硬盘的机制来保证随机读的问题。想问下这个随机读的过程中,请求只查询内存的数据占多大比例呢?在Cassandr数据库的架构里边,这个内存占用率是多少(比如是不是硬盘是10G,内存是1G).这种架构。 2.如果mysql在不考虑随机写的场景下,使用这种内存+硬盘的方案是不是也可以的?
作者回复: fcb的鱼同学, 你好 1. 对应比例要看实际的数据访问分布,并没有一个固定答案,其实可以回头重新看看讲存储分层里面的案例,你可以根据你的实际应用场景来估算。 内存占用也是要看你的硬件配置,你只配1G内存当然用不了2G对不对 2. 我不是MySQL的专家,没有仔细研读过MySQL的代码。不过MySQL肯定也会用类似BloomFilter机制,以及必然会有缓存,来减少对于磁盘的访问。以提升整个数据库在实际应用中的表现。
2020-02-081 - 暴风雪中途一度落后了20多节课,然后每天都看一两篇再度追上了进度,课程越后面越精彩
作者回复: 谢谢
2019-09-051 - 吴宇晨列式存储是按同一列数据cun
作者回复: 能更具体一点么?
2019-09-051 - 学而不思则惘之前一直没有研究过Cassandra,看了这篇文章才知道,原来和hbase等系列的日志型nosql基本一致,同样的lms树的随机读取效率低,同样的内置布隆过滤器,内置的查询缓存,还有同样的compact,甚至大文件拆分,Google的BigTable还真是影响深远啊2020-08-0412