zoukankan      html  css  js  c++  java
  • 关系型数据库的工作原理(二)

    数据库概览

    ·数据库不是简单的一堆文件叠加整理在一起,而是有多个组件相互合作而成。忽略具体某种数据库,一般数据库由以下组件构成:

    Fig. 8

        核心组件:

            进程管理器:很多数据库需要许多进程/线程同时都运行,所以搞了一个进程/线程池来管理这些进程/线程。 比如,有些数据库为了得到纳秒( nanoseconds) 信息,不直接使用操作系统的线程,而是通过自己创建的线程来实现。

            网络管理器:网络 I/O 是一个大问题,尤其是分布式数据库。 所以,许多数据库有自己的网络管理器。

            文件系统管理器: 磁盘 I/O 是数据库的最常见的瓶颈所在。 数据库有自己的文件系统管理器,可以更好的解决数据库与操作系统的文件系统之间数据交换, 甚至替换操作习惯的文件系统。

            内存管理器: 为了避免磁盘 I/O 的效率低下的问题,大量的内存的使用肯定很有价值。但是,如果操作大量内存时,必须一个独立的高效的内存管理器。特别是, 同一时间有很多查询都在存取内存时,显得尤为必要。

     安全管理器: 用户身份的鉴定和权限管理。

       客户端管理器: 管理多个客户端连接。

        工具:

            备份管理器: 备份和恢复一个数据库

            恢复管理器: 数据库发生崩溃后重启,需要把数据库的所有数据做到一致状态

       监控管理器: 使用 log 记录数据库的所有行为,并且提供工具和信息用以监控数据库

       Administration manager:恢复数据库的原数据( 比如某个表的表名和结构),提供工具和信息用以管理数据库、 Schemas(模式) 和表空间

      数据管理器:

          事务管理器:处理事务

          Cache 管理器: 在数据被使用前先加载到内存,保存将要写入数据库的数据

          数据存取管理器: 存取磁盘上的数据

       查询管理器:

           查询解析: 检查一个查询是否有效

     查询重写: 预优化一个查询

     查询优化: 优化一个查询

     查询执行: 编译以及执行一个查询

        

        现在回到最初的问题,即:数据库是如何处理一个 SQL 查询的,从客户端管理器->查询管理器->事务管理器三个部分来解释改问题。

    客户端管理器:

        数据库的客户端管理器,负责处理来自客户的连接。客户,可以是一个服务器,或 Web 服务器, 或者一个终端用户和终端软件。 客户端管理器实现了各种不同的访问数据库的接口,比如众所周知的: JDBC, ODBC, OLE-DB,以及其他专用数据库接口。

    Fig. 9

        当客户端连接数据库:

    1. 检查用户登陆验证信息(账号和密码),以及检查用户是否有访问数据库权限;
    2. 检查是否有空余线程/进程处理该连接;
    3. 检查数据库负载如何(是否过重);
    4. 如果连接需要等待,当超过等待时间,将返回可读的错误提示;
    5. 如果连接可用,查询将传递给查询管理器
    6. 由于查询处理是一个"all or noting"过程,故当查询到数据后,查询结果将部分存入缓存并开始发送给客户端。
    7. 客户端连接意外断开时,会收到可读接受,并释放连接的资源。
  • 相关阅读:
    msado15.tlh中重要的枚举(精简)
    VC连接SQL2005(例子ADO_2)
    [转]VC++创建一个线程并传递参数
    vc实现文件的打印--BOOL Print_html(const char *sURL)
    求一个整数n对16求商和余数
    vc下文件的创建--使用fstream和CFile
    vc连接Access2003
    Goldengate Parameter SUPPRESSTRIGGERS & DEFERREFCONST
    DEFERRED_SEGMENT_CREATION
    Duplicate standby database from active database
  • 原文地址:https://www.cnblogs.com/space-place/p/6559012.html
Copyright © 2011-2022 走看看