作者回复: 只追加不修改,一般操作系统和文件系统会为你处理好顺序写的问题的。
修改特定文件中间的内容,那自然就是随机写啦。
作者回复: 哈哈,其实在10-15年这段时间,这样的性能提升和解决方案是常态
作者回复: 可以这样做也可以不这样做。一般来说大部分都不会直接存放物理地址。仍然是通过操作系统的文件系统来管理的。
B+树序列化地存放在文件里面,反序列化加载的过程就是B+树生成的过程啊。
作者回复: 山间竹同学,
你好,Cassandra最新版本的代码我没有那么熟悉。不过早期版本的Cassandra用过很长一段时间,如果我没有记错的话,基本的逻辑是这样的。
1. 通过Write Ahead Log的方式先把操作写入到日志
2. 再写入数据到内存里面
3. 内存定期会Dump到磁盘上
4. 后台有进程做Compact来减少Dump的数据和日志
在做Compaction的过程中,顺序写的性能和在线访问的性能都会受一定影响。不过主要是磁盘IO,而不是碎片问题。可以认为Compaction其实就是不停做碎片整理。
作者回复: 欢迎多质疑,我写的内容其实也还是有不少错漏的。
嗯,其实我用CSV来举例子是希望简化描述问题。MySQL这样得数据库,底层的存储自然不是一个CSV这样的格式。
不过作为一门入门的课程,直接再去讲MySQL里面的存储格式,无论是篇幅还是难度可能对大部分同学都大了一些。
也许用更简单的数据库,比如SQLite的底层B+树的存储格式可能更合适一些。
课程内容到今天已经写完了,接下来会把写文章的时间回复掉大家所有的问题,做一些内容的订正,以及根据反馈再发几篇FAQ和加餐。
作者回复: fcb的鱼同学,
你好
1. 对应比例要看实际的数据访问分布,并没有一个固定答案,其实可以回头重新看看讲存储分层里面的案例,你可以根据你的实际应用场景来估算。
内存占用也是要看你的硬件配置,你只配1G内存当然用不了2G对不对
2. 我不是MySQL的专家,没有仔细研读过MySQL的代码。不过MySQL肯定也会用类似BloomFilter机制,以及必然会有缓存,来减少对于磁盘的访问。以提升整个数据库在实际应用中的表现。
作者回复: 👍加油
作者回复: 谢谢
作者回复: 能更具体一点么?