数据库 频道

数据库的很多内在特性已经固化在存储引擎里了

一些朋友和我讨论某个数据库产品,一旦说起来,我第一时间就会想一下这个数据库产品的存储引擎的特点是什么。存储引擎是数据库的所有外在能力的基础,虽然SQL引擎对外表现出各种各样的兼容性和相似性,不过没有存储引擎这个内在的引擎支撑,一些特性也仅仅是特性而已,并不能真正的成为能力。

从广义上看,数据库的存储引擎是数据库管理系统中用于处理不同类型的存储任务和管理数据的核心组件。它负责数据的存储、检索、更新和删除等操作。不同的存储引擎具有不同的特点和性能,以满足各种应用场景的需求。存储引擎是数据库的核心组件,存储引擎的一些特性决定了数据库的一些基本性能特性。决定存储引擎技术能力的因素不只是取决于底层数据的组织方式,作为数据库中的量大核心引擎之一,从广义上讲,存储引擎的主要作用包括:

  • 数据存储:将数据物理地存储在磁盘或其他存储介质上。

  • 数据检索:根据查询条件快速高效地检索数据。

  • 数据更新:处理数据的插入、更新和删除操作。

  • 事务管理:保证数据的一致性和完整性,通过支持事务实现原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),即ACID属性。

  • 并发控制:在多个用户并发访问时保证数据的一致性和完整性。

  • 数据备份和恢复:支持数据的备份和恢复,保障数据的安全性。

从上面的存储引擎在数据库中负责的功能上,我们可以看出,几乎所有的数据库的特性,特别是性能方面的特性都是与存储引擎相关的。很多数据库从出娘胎的时候就已经决定了其性能的上限。这也是我在《实战国产数据库》这本书里不厌其烦地介绍主流国产数据库存储引擎特点的主要原因,希望大家能够通过对国产数据库存储引擎的理解,了解这些数据库的长处和短处。

如果说有个数据库在外在形式上具有类似Oracle RAC的功能,但是其存储引擎的MVCC特性就已经决定了CACHE FUSION的性能,UNDO是按BLOCK的还是按行的?脏块是否存在PI阶段?全局资源锁是如何高效降级的?这些特性都是与存储引擎密切相关的。如果存储引擎都无法高效地解决这些问题,那么你告诉我这个数据库产品RAC方面的性能直逼O记,我是无论如何都不会相信的,因为这违背了客观规律。

分布式数据库在很多互联网应用特性上很强,不过其存储引擎是分布式的,事务管理的成本极高,在分布式环境中资源管理也复杂很多。在集中式数据库上,一条SQL缓慢地长时间运行,顶多就是消耗一些系统资源,只要系统总体资源很充足,危害也是有限的。而到了分布式数据库上,因为其分布式存储引擎的特性,这种SQL的危害性会被放大一个甚至几个数量级。在很多分布式数据库上,设置一个超时失败就是一种权衡后的结果。这个超时参数默认很小,你也可以把它设得很大,但是其带来的风险也是巨大的。最好的处置方式是修改一下你的应用,让SQL的执行时间不要那么长。

0
相关文章