第五届青训营后端第七天学习笔记| 青训营笔记

61 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

一、本堂课重点内容:

  • 作业讲解

二、作业讲解

  1. 写入存储系统的粒度太大,会不会导致数据原子性问题?例如一次性写100MB,如果系统突然crash,会不会只有一部分数据持久化了,另一部分丢失了?如果要解决原子性问题,一般会设计什么机制?

答: 会导致数据原子性问题,为了解决这个问题,一般会采用分布式事务机制,通过拆分的方式,将一次性写入的大的数据块拆成许许多多粒度合适的小块,而这每个小块都要经过事务处理,我们知道,事务是保证原子性的操作,通过事务操作,确保每个数据小块能够持久化,因此保证整体数据的原子性。

2.在从应用程序到存储介质的链路上,无论读还是写,数据可能要被拷贝好几次,这几次拷贝能不能去掉?如果我们去掉大部分拷贝操作,会有什么副作用,要怎么缓解副作用?

答:可以但是不建议。例如可以采用内存映射文件技术(MMF),将应用程序的内存直接映射倒储存介质,从而避免数据拷贝。但是这种技术也会带来一些副作用,例如安全性问题和性能问题,为了缓解这些副作用,可以使用安全机制,例如加密和访问控制,来保护数据安全,并使用缓存技术来提高性能

3.一个关系型数据库大概率是会被并发访问的,如果要保证并发安全,除了在行数据上加悲观锁还有其他方式吗?

答:除了悲观锁还有乐观锁。我们需要知道悲观锁和乐观锁是同时存在的,如果用到乐观锁的情境下,就需要考虑是否能够使用悲观锁,反之亦然。乐观锁通过在每次更新操作前检查数据的版本号来实现,如果版本号不匹配,则拒绝更新操作,从而避免数据的不一致性问题。此外,还可以使用分布式锁来保证并发安全,它可以通过在多个节点上同步锁定数据来实现。

4.在数据库领域,把数据按行存和按列存各有好处,你能从性能优先的角度设计出一种混合存储格式吗?

答:混合使用,对于行存性能好的就行存,反之亦然。

二、参考引用

1.www.bilibili.com/read/cv2168…