说到数据库,以前我老师有一句很经典的话。你可以不会写SQL,但是一定不能不知道ACID。
在工业领域,SQL可以说是应用最广泛的技术。从后端到算法,从数据到DBA,再到产品,甚至连一些运营也会基本的SQL。所以如果你现在还不太会的话,我建议你用一个下午的时间找个网站好好学一下。
原本我是想直接写些Hbase相关的内容,但是我发现要想讲清楚Hbase,必须要讲noSQL数据库。如果将noSQL,则又离不开最传统的关系型数据库。所以我们一步一步来,先从基础的关系型数据库讲起。或许我这么说并不准确,因为数据库并不基础,相反它十分复杂。从索引到各种优化和设计原理,再到内部的各种算法和数据结构,涉及到的内容非常多。我们先把浩如烟海的知识放一放,先从最核心的数据库四大原则开始说起。
数据库事务ACID四大原则,A代表Atomicity,即原子性。C表示Consistency,即一致性。I表示Isolation,即隔离性。D表示Durability,即持久性。
这四个原则了解过数据库的应该都如雷贯耳。可是真正面试的时候被问起来,能一个不落说得上来,并且讲得清楚原委的就不多了。我觉得主要是因为我们的翻译过于文雅,不像英文那么直观,所以很难顾名思义。另一个原因是我们在学习的时候理解不够深入,只知道原因,不知道原因的究竟。所谓知其然,不知其所以然。
原子性
让我们先从其中最简单的原子性开始。
原子性理解起来最简单,也最常用。我就在面试当中遇见过不止一次,还有一次让我用Java写一个转账的功能,其实就是想看看我知不知道原子性。
原子两个字看起来一头雾水,其实这里不是指物理学上的基本粒子,而是指的不可分割的意思。也就是说在一个事务当中的所有操作应该被视为一个不可分割的整体,要么全成功,要么全部失败。这点用转账这个问题举例最合适。A将银行卡里的钱转100给B,很明显,数据库需要做两件事情,一件事A账户扣款100,