旧·时光 | Time

Something that stays in your mind will someday spring up in your life.

MySQL 索引背后的隐藏之道

索引的 “哲学思想” 我们为什么需要索引? 显而易见,使用索引可以加快我们检索数据的速度,生活中书籍的目录、图书馆里的各种书架编号、号码簿上的检索页等,都少不了索引的身影。 回到计算机的世界,任何一种数据结构都不是凭空产生的,一定会有它的诞生背景和解决的问题。我们先举个最简单的例子,下图是一个有序递增的数组,里面包含十个元素,没有重复。 如果我想要查找元素 24 ,该怎么...

先锋之矛 —— MySQL InnoDB 中的锁

写在前面 数据库本质上是一种共享资源,因此在最大程度提供并发访问性能的同时,仍需要确保每个用户能以一致的方式读取和修改数据。锁机制(Locking)就是解决这类问题的最好武器。

写在前面 数据库本质上是一种共享资源,因此在最大程度提供并发访问性能的同时,仍需要确保每个用户能以一致的方式读取和修改数据。锁机制(Locking)就是解决这类问题的最好武器。 首先新建表 test,其中 id 为主键,name 为辅助索引,address 为唯一索引。 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREME...

黎明号角 —— MySQL InnoDB 存储引擎

MySQL 得益于开放的可插拔设计,允许替换不同的底层存储引擎,InnoDB 就是其中涌现的代表,自 5.5.8 以来已经成为 MySQL 的默认存储引擎

InnoDB 存储引擎 MySQL 得益于开放的可插拔设计,允许替换不同的底层存储引擎,InnoDB 就是其中的代表,最初由第三方公司开发后被 Oracle 收购,是 OLTP 场景下核心表的首选存储引擎,自 5.5 以来已经成为 MySQL 的默认存储引擎。 InnoDB 是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方...

基于 “不可变类” 实现一个线程安全的 Integer 计数器

不可变对象最核心的地方在于不给外部修改共享资源的机会,从而避免多线程情况下由于争抢共享资源导致的数据不一致

写在前面 众所周知,java.lang.String 类没有任何强制同步的代码,但它是线程安全的,原因在于它是不可变类,每次对其操作都是返回一个新的 String 对象。合理使用不可变对象可以达到 lock-free 的效果。 不可变对象最核心的地方在于不给外部修改共享资源的机会,从而避免多线程情况下由于争抢共享资源导致的数据不一致,又是 lock-free 的,避免了用锁带来的性能损耗...

用 Wait 和 Notify 实现 “生产者-消费者” 模型

在实际开发过程中,经常会碰到如下场景:某个模块负责产生数据,然后经由某个共享的缓冲区进行流转,最后这些数据由另一个模块来负责处理

写在前面 在实际开发过程中,经常会碰到如下场景:某个模块负责产生数据,然后经由某个共享的缓冲区进行流转,最后这些数据由另一个模块来负责处理。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者,中间的仓库可以抽象成任何缓冲区类型的存储介质。 那么这种模型有什么优点呢?第一是解耦,可以将生产者和消费者分隔开,耦合度降低;二是支持并发,生产者把制造出来的数据往缓冲区一丢,就可以...