domain有三种工作类型:
unix domain:每个socket地址是个文件路径
ipv4 domain:每个socket是ipv4:port
ipv6 domain:每个socket是ipv6:port
函数和过程:有返回值为函数。无返回值的称为过程。
I/O:进程调用请求发起之后是否会被挂起
阻塞:进程发起I/O调用,recvfrom未完成之前,进程会被挂起,在数据未完成前该进程不能做任何工作;
非阻塞:进程发起I/O调用,被调用函数完成不会阻塞当前进程,而是立即返回;
同步:进程发起一个过程或函数调用后,在没有得到结果之前,该调用将不会返回;
异步:进程发起一个过程或函数调用后,即使被调用者不能立即结果准备好,但也会返回结果(未完成),内核通知调用者结果什么时候会OK;
5种I/O模型:
同步阻塞:进程发起I/O调用由用户模式转为内核模式,进程进入不可中断睡眠,内核准备数据,数据准备完成后把数据从内核内存复制到进程内存中,复制完成后唤醒进程,
同步非阻塞:进程发起I/O调用并处于忙等待状态,进程频繁和内核交互查询数据准备情况,内核数据准备好后,进程由非阻塞(忙等待过程中)转为阻塞状态等待内核复制数据到进程内存中才能继续工作
I/O复用:prefork工作于复用I/O模型,当I/O请求发给进程后,进程使用select调用子进程接收请求并阻塞请求I/O准备数据,数据准备完成后通知进程,并用recvform进行数据复制,进程用(select | poll)同时监控多个I/O,实现一个进程可以同时处理多个I/O, 信号驱动I/O:event 工作于信号驱动I/O,进程发起SIGIO(sigaction)调用,进程处于非阻塞状态,数据准备完成后会通知进程,并返回给请求I/O,请求I/O发起recvform进行数据复制
异步I/O:nginx支持异步I/O,I/O请求发给进程,进程使用aio传给内核,内核完成数据准备和数据复制后通知进程。该进程一直处于非阻塞模型,文件请求可以异步,网络I/O无法异步
套接字:监听套接字、连接套接字
sendfile和sendfile64:可以在内核中直接构建发送报文通过tcp响应客户端请求,实现静态文件直接内核响应
mmap()--内存隐射:磁盘数据映射到内核内存中,在映射到进程内存中加快客户端请求响应
事件驱动机制:信号通知(水平触发、边缘触发(轻量级触发机制、灵活高效))
二、数据库基础理论
静态资源:
动态资源:由某编程语言,编写的代码能读入数据,对数据进行加工,而后输出结果(通常包含html标记,使得生成的结果能被浏览器解析,并显示用户期望的样子)
程序是由数据和指令组成,
程序是由算法和数据结构组成,
开发一个程序,指令存在什么地方,数据存在什么地方?
指令:程序文件
数据:变量、数组、 文件、数据管理系统(如果大量数据有一定的规格,通过管理系统组织在一起存在磁盘上,能够高效的查询和调用,这个管理系统就是数据库)
管理工具(系统)都有 编程接口和交互式接口供程序员和用户使用。程序员使用API接口,Linux内核是C语言编写,如果想用JAVA来编写Linux内核,就的重新封装Java成C语言兼容接口。
SQL:结构化查询语言(Structure Query Language)
数据模型(发展):
层次模型(树状结构)---->网状模型(缺点:独立性受限制)---->关系模型(二维表)
约束:候选键(主键)、 唯一键(主键的数据可以为空,唯一键不能为空)、 组合主键
DBMS的有点:
数据独立性、
高效的数据存取、
数据完整性和安全性
数据管理
并发存储和故障恢复
开发周期缩短
DBMS管理系统的结构:C/S模式
SQL 语句
I
计划执行器 分析器
操作求解器 优化器
事务管理器 文件和存取接口
锁管理器 缓冲管理器
磁盘空间管理器
磁盘
三、MySQL理论基础及LAMP平台
关系型数据库:Oracle、DB2、Sqlserver、MySQL--->MariaDB
Oracle:(sybase,infomin 曾经三足鼎立),开源大敌,
DB2::只在IBM系统盛行,IBM硬件、操作系统、数据库都是开发。
SQL server:sybase和微软合作产生SQL server,后来sybase退出
MySQL:(sun公司收购MySQL,oracle有收购sun公司保存了MySQL的开源)---->MariaDB
MariaDB: Mysql分支 redhat 7 、centos7默认安装MariaDB(MySQL被oracle收购后不再受欢迎了,哈哈)
pgsql(postgresql):
SQLite:
MySQL---->MariaDB ,MYSQL有客户端包和服务器包 #
关系型数据库组件:
库:表的集合,每个表都有一个唯一的名字,
表:(关系) 行 (raw,record,tuple)和列(field,column,attribute)
行:代表一组之间的联系
列:有起允许取值的集合,称之为该属性的域,包括空(null)
数据库模式和数据库实例:逻辑角度
约束:
候选键(码)
主键(primary key):标识唯一身份
唯一键(unique key)不能为空
外键(foreign key):引用性约束
关系型查询语言:sql ,仅针对单张表实施的查询,简单查询
关系运算:
选择:挑选出符合条件的行
投影:挑选出关心的列
连接运算:
笛卡尔积:从两个输入关系中输出所有的元组对(无论它们在共同的属性上取值是否相同),因此,也被称为交叉连接;
自然连接: 从两个输入关系中输出这样的元组对:它们在相同的名字的所有属性上取值相同;
SQL:最早有IBM研发,叫做sequel,ANSI,ISO :SQL-86,SQL-89,SQL-92,SQL-99,SQL-03
SQL语言有如下几个部分组成:
数据定义语言:DDL(CREATE, DROP, ALTER, GRANT(授权), REVOKE(取消授权))
数据操纵语言:DML(INSERT, DELETE, UPDATE(修改数据), SELECT(查询语句))
事务控制:创建事务和结束事务
SQL的数据定义:
创建关系,即创建表:
每个关系模式;###有多少个模式
每个属性的取值类型; ###数值还是字符,比如 存储年龄
完整性约束;###定义主键、外键、唯一键
索引的集合;### 有几个索引都要创建出来
表的安全性和权限信息;###