一文解析数据库的三生三世( 二 )


类似于不同功能的汽车 , 有货车 , 有客车 , 有MPV , 有SUV , 有皮卡 , 有燃油车 , 有新能源车等等 。 车的核心功能是一致的 , 只是为了适应不同的场景和需求 , 不同的车会有不同的架构设计和调教 , 如此而已 。
那么数据库应该有哪些核心功能呢?
首先 , 数据库、数据库 , 必须要把数据保存下来 。 要把数据按照合理的格式 , 安全保存在可持久化的存储介质里面 , 要保证数据的正确性、完整性和安全性 。 这是所有数据系统最核心的功能 。 换句话说 , 把数据交给数据库 , 数据库要保证数据不丢、不错 。 这个是最最起码的要求 。 正如粮仓 , 不能粮食存进去都发霉了 , 被耗子吃了 。
其次 , 数据库要尽可能提高数据存取效率 。 要用更有效率的方式存储数据 , 让数据存储得更快 , 更易于使用者理解 , 更方便上层业务的使用 。 查询数据时效率更高 , 更快给出结果 。 就像有人来送粮食入库 , 要快速地称重、烘干、质检、打包、入库 , 不能让人家等一礼拜 。 有人要买小麦 , 有人要买玉米 , 必须按照要求快速找到相应的存放地点把粮食交给粮商 。
再次 , 数据库要提供丰富的数据分析算法 , 尽可能把跟数据密切相关的计算在数据库中完成 , 减少数据传输的开销 , 减轻上层业务逻辑的计算压力 。 就像粮库要提供完善的粮食处理措施 , 比如称重、烘干、打包、品质分级等 , 方便粮食交易 。
最后 , 数据库要提供易于使用的接口 , 降低数据分析人员的使用门槛 , 能够支持各种数据分析工具 , 让使用数据更加方便 。 就像粮库要有方便的停车场、清晰的指示牌、专业友好的工作人员等 。
数据库的核心组件有哪些
为了实现这些核心功能 , 通常数据库会包括以下核心组件:
a. 存储管理
数据用什么样的方式来组织、存储 , 是key-value还是关系型 , 是按行存还是按列存 , 支不支持压缩 , 支不支持删除和修改 , 支持什么样的数据类型和存储接口 , Posix还是对象存储 。 是否要支持计算存储分离 , 是否要支持分布式存储 , 是否支持事物处理 , 是否支持多副本 , 采用什么算法来加速数据的检索(索引)等等 。 存储管理是数据库的核心组件 , 解决了存储管理问题 , 数据库的问题就解决了一半了 。
一文解析数据库的三生三世
文章图片

b. 查询优化器
要提高数据查询的效率 , 数据库必须找到一条最优化的执行路径 , 比如 , 查询时是否需要使用索引 , 如果有多个索引 , 应该选择哪一个 , 如果数据分布在不同的存储单元(表、集合等)里 , 应该按照什么顺序来访问效率最高等等 。 优化器面对的问题可能是一个极其复杂的路径规划问题 , 需要它在很短的时间里计算出最优路径 , 需要大量核心优化算法 。 属于数据库中复杂程度最高的部分 。
举个例子 , 你要带着全家人 , 包括老人、小孩一起从上海去海南旅行 , 要制作一个性价比最好、家人满意度最高的计划 , 那么在计划时需要考虑哪些因素呢 , 首先 , 怎么去 , 是开车去 , 还是火车去 , 还是飞机去 。 开车 , 路上要花多久 , 中间需要休息几次 , 你和太太有没有时间 , 老人孩子是不是受得了 , 汽油费用 , 过路费用;飞机 , 怎么去机场 , 行李有多少 , 带不带的下 , 机票有没有打折 , 下了飞机怎么办等等 。 住什么酒店 , 去什么景点 , 老人喜欢去人多的人文景观 , 太太喜欢安静的地方和方便购物的地方 , 小孩喜欢有游乐场的地方 , 要不要酒店+景点一起订 , 会不会有优惠 , 要不要租车 , 租什么车......说到这里 , 是不是可以体会一个查询优化器需要考虑的问题有多少?

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。