数据库的锁定机制是为了确保数据一致性而设计的重要规则。通过锁定机制,数据库管理系统能够管理并发访问数据时可能产生的冲突,确保数据的正确性和完整性。另一方面,MySQL也存在多种数据存储引擎,每种存储引擎的锁机制都是为各自的特定场景而优化设计,所以各存储引擎的锁机制也有较大区别。
我们可能听过Mysql各种叫法的锁,他们大部分是从不同维度来去划分而命名的,如下图。
内存模型描述了程序执行的规范。在golang中,这些规范由 goroutine 执行组成,而 goroutine 的执行又由一系列内存操作构成。golang的内存模型规定了多个goroutine读取变量时候,变量的可见性情况。
内存操作可以从以下四个方面进行详细描述:
为了确保多核、多线程环境下的正确性和一致性,内存模型确保了以下几点:
比较有意思的是,Golang Memory Model 文章作者并不希望读者通过 Memory Model 来理解自己程序的运行方式,如果必须要这样做的话,很可能是程序的编写方式有问题,很可能意味着高昂的维护成本)
索引是用来快速检索出具有特定值的记录,它可以大大提高查询速度。如果没有索引,数据库就必须从第一条记录开始进行全表扫描来找到相关的行。数据越多,成本就越高,检索时如果表的列存在索引,那么MySQL就能快速到达指定位置去搜索数据文件,而不必查看所有数据。
索引是存储引擎快速找到记录的一种数据结构,例如 MyISAM 引擎和 Innodb 引擎都使用 B+ Tree 作为索引结构。 ——《高性能MySQL》
MySQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关;MyISAM 和 InnoDB存储引擎只支持 BTREE 索引,MEMORY/HEAP 存储引擎可以支持HASH和BTREE索引。
在Go语言中,数组是一种固定长度的数据结构,一旦创建,长度就不能改变。这在某些情况下可能会限制它的使用。为了提供更灵活的数据结构,Go引入了切片(slice),它基于数组实现,但具有动态调整大小的能力。
切片的内部结构在src/runtime/slice.go
中定义,如下图,它包含三个主要部分:
如果你对Netflix网飞不太熟悉,可以把它看作“美国版的爱奇艺”,但规模大得多,市值接近2000亿美元,与迪士尼平起平坐,是全球顶尖的娱乐公司之一。许多经典剧集如《纸牌屋》和《鱿鱼的游戏》都是网飞出品的。有消息称,网飞已经获得了刘慈欣小说《三体》的电视剧改编权,正在筹备拍摄。
Netflix,中文翻译成网飞,也有叫奈飞
网飞在内容创作方面非常出色,但你知道吗?在1997年刚成立时,网飞的主营业务是通过互联网出租DVD光碟。那时,没人会想到网飞会发展成今天的模样。网飞之所以成为传奇,是因为它在短短20多年里,完成了四次惊人的进化: