首页 > 数据库 > 数据库开发技术 > 七座城堡①OLTP【下】
往期回顾
老王:OK,说说索引具体是如何实现的吧。
老柯:好的,咱们依然用仓库来举例,设法解释清楚索引如何?
老王:“好,咱们就聚焦这个需求, 如何 在仓库里找符合某种尺寸的货物?
老柯:嗯,前面我们提到一种思路,即让这些货物以尺寸为依据进行有序存储,这样就可快速定位到您所要的货物。不由于这种有序存储货物方式无法满足多样化需求,且有不少额外的开销,所以这样的方式我们需要谨慎使用。
老王:是啊,您提到的索引就不一样了,是建辅助数据来实现,就想听你讲讲具体怎么做呢?
老柯:咱们可以把每个货物的尺寸和位置信息记录在小卡片上,姑且把这个卡片称之为尺寸卡片。 同时让每张卡片一直保持有序的排列,然后就可以了。
老王:什么,说完了,我还没反应过来就结束了?这也太快了吧。
老柯:是啊,假设您开始 要找某特定尺寸的物品,首先您先去找这个尺寸卡片,由于卡片排序过了,您一下就定位到哪些卡片符合您要的物品都尺寸,同时卡片上有货物的位置信息,于是轻而易举的找到您要的物品了。 同理,你要找特定价位的就找价位卡片。
老王:哦,等等,卡片上还有记录位置信息,那你是怎么知道位置信息呢?
老柯:这个简单,数据库表中每一行都有特定位置编码的,如果一定要用生活中来类比,任何物品不是都有一个空间坐标位置吗?
老王:我想想,好像是啊,就这么简单?”
老柯:从索引原理上来说,就这么简单,当然了到了具体的数据库体系结构中,索引是以一种二叉树的形式存在,分为根茎叶三层节点,叶子节点存储的就是需要排序的列的值,这里就是尺寸。同时还保存了这个值对应的这一行记录的地址。说起来或许复杂一些,但是本质就是我描述的这些卡片。
老王:我好像明白了,感觉可能很复杂的东西没想到说起来就这么简单。
老柯:技术和生活其实是相通的,没有什么技术问题是生活中解释不了的,大道至简!
老柯:老王,其实咱们这个OLTP数据库还有一个很精彩的特性我没说,即ACID特征。其中A代表原子性,C代表一致性,I代表隔离性,D代表持久性......
“等等,老柯你说慢点,啥ACID,啥原子性? ” 老王打断了 老 柯的话。
老王:明白了,听起来很有趣。对了,一致性呢,也解释解释。
老柯:原子性关注的是事务内部的操作,确保这些操作是不可分割的, 而一致性关注的是事务对数据库状态的影响,确保数据库始终保持数据完整性。 这两者之间的联系在于,原子性为实现一致性提供了基础。只有当事务具有原子性时,我们才能确保数据库在事务结束后达到一致性状态。
老王:我明白了,从查询那个时刻起,所有的值都应该不能变化了,有实际变化也要回到那个时刻的值,否则永远不会有正确的结果。
老柯:太棒了,至于数据库内部如何实现,有MVCC机制或者回滚段等多种方式,这里就不赘述了,您能把解决思路需求准确描述出来,真是厉害!此外另外两个特性, 隔离性是一种保护机制隔离性主要是通过并发控制机制来实现的,如通过锁等方式来确保多个会话之间对同一数据的操作不会相互干扰,保证数据的完整性和一致性。如session1更新表的某一行(如:update t set name='abc' where id=2 )再还没提交成功时,session2也在更新该表同一行记录的进程如(update t set salary=10000 where id =2 )必须等待,直至session1 提交成功。
老王:OLTP数据库城堡真是挺有趣的,希望给我们来更多惊喜。
“会的!” 老 柯自信的回应,并与 老王约定了下次城堡再聚的时间。
未完待续...
公众号:收获不止数据库
微信:ljbyxl1213
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9091385/viewspace-3080317/ ,如需转载,请注明出处,否则将追究法律责任。