当前位置: 首页 > news >正文

水利工程建设信息网站鞍山网站怎么做出来的

水利工程建设信息网站,鞍山网站怎么做出来的,求网址,网站架构基本知识数据库原理与使用全解析:从理论到实践 文章大纲 数据库基础概念 数据库的定义与核心特性数据库管理系统(DBMS)的作用SQL语言的角色与分类 数据库体系结构 三级模式结构(外模式/模式/内模式)数据独立性原理&#xff08…

数据库原理与使用全解析:从理论到实践


文章大纲

  1. 数据库基础概念

    • 数据库的定义与核心特性
    • 数据库管理系统(DBMS)的作用
    • SQL语言的角色与分类
  2. 数据库体系结构

    • 三级模式结构(外模式/模式/内模式)
    • 数据独立性原理(逻辑/物理)
    • 客户端-服务器架构
  3. 存储引擎与数据存储

    • 常见存储引擎对比(InnoDB vs MyISAM)
    • 数据页结构与B+树索引
    • 事务日志(Redo/Undo Log)
  4. SQL语法与优化

    • DDL/DML/DQL/DCL详解
    • 索引设计与执行计划分析
    • 慢查询优化策略
  5. 事务与并发控制

    • ACID特性与事务隔离级别
    • 锁机制(共享锁/排他锁)
    • MVCC多版本并发控制
  6. 高可用与分布式

    • 主从复制原理
    • 分库分表策略
    • CAP理论与BASE原则

7.总结与模型对比


第一部分:数据库基础概念


1.1 什么是数据库?

定义:数据库(Database)是结构化数据的集合,通过计算机系统实现持久化存储和管理。
核心特性

  • 持久性:数据断电不丢失
  • 共享性:多用户并发访问
  • 独立性:逻辑与物理存储分离
45% 30% 20% 5% 数据库核心组件占比 数据文件 索引结构 日志文件 缓存池

1.2 数据库管理系统(DBMS)

三大核心功能

  1. 数据定义:通过DDL创建表结构
  2. 数据操纵:通过DML增删改查
  3. 数据控制:通过DCL管理权限
应用程序
DBMS
磁盘数据文件
查询缓存
事务管理器

1.3 SQL语言分类

类型全称示例语句
DDLData Definition LangCREATE TABLE students (...)
DMLData Manipulation LangINSERT INTO students VALUES
DQLData Query LangSELECT * FROM students
DCLData Control LangGRANT SELECT ON db TO user

第二部分:数据库体系结构


2.1 三级模式结构

映射
映射
外模式
+用户视图
+局部逻辑结构
模式
+全局逻辑结构
+表关系定义
内模式
+物理存储结构
+文件组织方式

数据独立性

  • 逻辑独立性:修改模式不影响外模式
  • 物理独立性:修改内模式不影响模式

2.2 C/S架构通信流程

Client Server Storage SQL查询请求 读取数据页 返回原始数据 执行查询优化 返回结果集 Client Server Storage

第三部分:存储引擎与数据存储


3.1 InnoDB vs MyISAM

特性InnoDBMyISAM
事务支持支持ACID不支持
锁粒度行级锁表级锁
外键支持不支持
崩溃恢复通过Redo Log恢复需手动修复

3.2 B+树索引结构

根节点
内部节点1
内部节点2
叶子节点1
叶子节点2
叶子节点3
叶子节点4

特点

  • 叶子节点形成有序双向链表
  • 非叶子节点只存储索引键
  • 所有数据存储在叶子节点

3.3 数据存储示例

CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),age INT
) ENGINE=InnoDB;
内存缓冲池
数据页
行数据:id=1,name='Alice',age=25
行数据:id=2,name='Bob',age=30
Undo Log
Redo Log

4. select实战案例:TCP服务端多客户端管理

4.1 场景需求与设计目标

  • 需求:单线程服务端同时处理多个客户端连接,实现消息转发
  • 核心挑战
    1. 动态管理客户端连接集合
    2. 高效检测可读/可写事件
    3. 正确处理连接断开和异常

4.2 代码框架设计

// 初始化监听socket
int listen_fd = socket(AF_INET, SOCK_STREAM, 0);// 绑定并监听
bind(listen_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(listen_fd, 5);// 创建fd_set集合
fd_set read_fds;
int max_fd = listen_fd;while(1) {FD_ZERO(&read_fds);FD_SET(listen_fd, &read_fds);// 添加所有客户端socket到集合for(int i=0; i<MAX_CLIENTS; i++) {if(client_fds[i] > 0) {FD_SET(client_fds[i], &read_fds);max_fd = (client_fds[i] > max_fd) ? client_fds[i] : max_fd;}}// select等待事件int ret = select(max_fd+1, &read_fds, NULL, NULL, NULL);// 处理新连接if(FD_ISSET(listen_fd, &read_fds)) {int new_fd = accept(listen_fd, ...);add_client(new_fd);}// 处理客户端消息for(int i=0; i<MAX_CLIENTS; i++) {if(FD_ISSET(client_fds[i], &read_fds)) {handle_client_message(client_fds[i]);}}
}

4.3 关键技术点解析

Client1 Server Client2 内核 connect() add to fd_set connect() add to fd_set select() 返回就绪事件 read() send data write() loop [select循环] Client1 Server Client2 内核

5. select模型深入解析与性能优化

5.1 select的局限性及突破方案

FD_SETSIZE限制(Linux默认1024)
graph TDA[FD_SETSIZE限制] --> B[方案1:重新编译内核]A --> C[方案2:使用动态数组管理]A --> D[方案3:改用epoll/kqueue]C --> C1[自定义fd集合结构]C --> C2[多select线程分区处理]
时间复杂度O(n)问题
  • 线性扫描缺陷:每次调用select需遍历所有fd
  • 优化方案
    1. 维护活跃fd列表
    2. 使用位图快速定位
    3. 分批次处理

5.2 内核实现原理揭秘

内核空间
用户空间
遍历fd集合
检查设备就绪状态
修改就绪位图
唤醒进程
调用select
拷贝fd_set到内核

5.3 性能调优实践

  1. 超时参数动态调整
    struct timeval timeout;
    timeout.tv_sec = (active_clients > 100) ? 0 : 1;
    timeout.tv_usec = 500000;
    
  2. 事件处理优先级队列
    if(FD_ISSET(high_priority_fd, &read_fds)) {process_high_priority();
    }
    
  3. 批量读写操作
    while(bytes_read = read(fd, buf, BUF_SIZE) > 0) {// 持续读取直到EAGAIN
    }
    

6. 跨平台差异与开发注意事项

6.1 不同系统实现差异

特性LinuxWindowsmacOS
fd_set类型位数组结构体位数组
最大fd数1024641024
超时参数精度微秒级毫秒级微秒级
异常检测支持部分支持完全支持

6.2 常见错误处理

  1. EBADF错误
    if(FD_ISSET(fd, &read_fds)) {if(getsockopt(fd, SOL_SOCKET, SO_ERROR, &err, &len) == 0) {// 安全操作}
    }
    
  2. EINTR信号中断
    ret = select(...);
    if(ret == -1 && errno == EINTR) {// 重新调用select
    }
    
  3. 内存覆盖问题
    fd_set tmp_fds;
    memcpy(&tmp_fds, &read_fds, sizeof(fd_set)); // 防止原始集合被修改
    

7. 总结与模型对比

7.1 各I/O模型性能对比

barCharttitle 连接数 vs 吞吐量xAxis 100连接 1000连接 10000连接series "select" 90 85 30series "epoll" 95 93 90series "kqueue" 96 92 88

7.2 select适用场景

  1. 跨平台兼容性要求高
  2. 连接数 < 1000
  3. 简单事件检测需求
  4. 嵌入式系统开发

扩展阅读

  • 《UNIX网络编程 卷1》
  • Linux man-pages select(2)
  • epoll原理深度分析(见下期专题)

希望本文能对你有所帮助!

http://www.dtcms.com/a/579042.html

相关文章:

  • python做网站好处网络平台推广的好处
  • 建设一个境外网站网站建设仟首先金手指13
  • 如何开网站详细步骤接做网站私活
  • python做网站入门做网站文字怎么围绕图片
  • 操作系统原理:实验1进程观测
  • WGCLOUD的监控数据会自动清理吗
  • 西双版纳建设局网站庆阳网站设计制作
  • 如何解决 pip install 安装报错 [WinError 32] 文件被占用(杀毒/占用进程)问题
  • 雄县阿里巴巴网站建设wordpress 字段插件
  • 网站ip解析wordpress控制列表页
  • Zabbix基于LNMP架构部署与管理
  • Nginx 代理apk下载,重定向问题
  • 企业自己的网站天津建站模板搭建
  • 网站建设开票内容官方网站内容可做证据吗
  • gazobo
  • 机器学习中交叉验证(CV)、CV fold(交叉验证折) 和 数据泄露
  • 制造业数字化转型实践:如何构建企业级项目数字化运营体系
  • RFID 赋能卫生陶瓷高压成型全流程数据采集与管控应用
  • 网站制作策划方案企业解决方案参考网站
  • 电子商务网站建设期末试题吉林省建设厅门户网站
  • Docker 常用命令与时区配置指南
  • 天津网站开发公司电话北京网站建设公司那个好
  • 常用网站网址网站优化企业排名
  • 国际物流公司网站有奖竞猜网站建设
  • 怎样创建网站教程长春高铁站
  • 如何网站推广广东建设协会网站首页
  • 如何上传网站源码小程序app开发软件定制
  • CTFHub Web进阶-PHP:Bypass_disable_function通关4之PHP-FPM
  • 培训学做网站要多久东莞seo排名扣费
  • iis 网站压缩厦门建设局网站首页