数据库的核心组件有哪些

  为了实现这些核心功能,通常数据库会包括以下核心组件:

  a. 存储管理

  数据用什么样的方式来组织、存储,是 key-value 还是关系型,是按行存还是按列存,支不支持压缩,支不支持删除和修改,支持什么样的数据类型和存储接口,POSIX 还是对象存储。是否要支持计算存储分离,是否要支持分布式存储,是否支持事物处理,是否支持多副本,采用什么算法来加速数据的检索(索引)等等。存储管理是数据库的核心组件,解决了存储管理问题,数据库的问题就解决了一半了。

  

 

  b. 查询优化器

  要提高数据查询的效率,数据库必须找到一条最优化的执行路径,比如,查询时是否需要使用索引,如果有多个索引,应该选择哪一个,如果数据分布在不同的存储单元(表、集合等)里,应该按照什么顺序来访问效率最高等等。优化器面对的问题可能是一个极其复杂的路径规划问题,它需要在很短的时间里计算出最优路径,需要大量核心优化算法,属于数据库中复杂程度最高的部分。郑州哪家医院看心理咨询好http://www.hyde8871.com/

  举个例子,你要带着全家人,包括老人、小孩一起从上海去海南旅行,要制作一个性价比最好、家人满意度最高的计划,那么在计划时需要考虑哪些因素呢?首先,怎么去,是开车去,还是火车去,还是飞机去。开车,路上要花多久,中间需要休息几次,你和太太有没有时间,老人孩子是不是受得了,汽油费用,过路费用;飞机,怎么去机场,行李有多少,带不带得下,机票有没有打折,下了飞机怎么办等等。住什么酒店,去什么景点,老人喜欢去人多的人文景观,太太喜欢安静的地方和方便购物的地方,小孩喜欢有游乐场的地方,要不要酒店 + 景点一起订,会不会有优惠,要不要租车,租什么车......说到这里,是不是可以体会一个查询优化器需要考虑的问题有多少?

  

 

  当然,这部分工作可以有相对简单的实现(基于规则),比如太太说了,时间确定、飞机来回、五星酒店、带私人沙滩,这样计划就会简单很多。然而,这份工作也可能复杂到难以想象(基于机器学习、基于实际开销等等),比如太太说你全权负责,具体时间不确定,大概在 8月 - 9月,要少花钱多办事,多做调研,找一个最优方案。那么做这个计划就会非常复杂,需要的支持决策信息就会非常多。这样做出来的决策大概率相对会优化,比基于规则实现的计划能适应更多场景。

  c. 执行模块

  优化器做好了执行计划后,接下来就会有执行的模块按照执行计划对数据进行相关的计算,包括数据的存取、常规的加减乘除、排序、平均值、哈希,也会包括一些机器学习的算法,数据的压缩/解压缩,最后将计算完成的结果返回给客户端。

  

 

  d. 内部管理和调度

  数据库要正常地工作,还会需要一些内部协调管理的模块,比如内存和存储同步,存储空间整理,元数据管理,集群状态检测,容错和故障恢复等。

  e. 管理工具和接口

  为了提高易用性,数据库都需要提供一套管理工具,比如备份/恢复、状态检测、运行时监控、资源隔离、权限管理、安全审计、自定义接口、各种数据访问接口等。

posted @ 2021-11-29 13:19  顾延笙  阅读(1375)  评论(0编辑  收藏  举报