Nginx 的讲解和案例示范
一、基础理解
1.1 Nginx 是什么?
Nginx是一个高性能的 Web 服务器和反向代理服务器,同时也可以作为邮件代理服务器。Nginx 以其高并发处理能力、低内存消耗和丰富的功能受到广泛欢迎。
主要功能:
- 静态资源服务:高效地提供 HTML、CSS、JavaScript、图片等静态资源。
- 反向代理:将客户端请求转发到后端服务器并将响应返回给客户端。
- 负载均衡:在多台服务器之间分配请求,以提高可用性和可靠性。
- HTTP 缓存:对响应进行缓存以减少后端负载和加速响应速度。
- SSL/TLS 加密:支持 HTTPS 协议,提供安全的传输通道。
1.2 Nginx 的工作原理
Nginx 的工作原理基于事件驱动模型,这使其能够高效地处理大量并发连接。与传统的多进程或多线程模型不同,Nginx 使用了非阻塞 I/O 操作,通过单个线程处理多个请求,降低了系统资源的占用。
- 事件循环:Nginx 在后台使用事件循环监听连接请求,并在数据可读或可写时执行相关处理。
- 异步处理:通过非阻塞方式,Nginx 可以在等待 I/O 操作的同时处理其他请求,提高了整体吞吐量。
- 模块化架构:Nginx 的功能通过模块进行扩展,可以根据需要选择加载不同的模块,从而实现灵活的功能组合。
二、反向代理
2.1 什么是反向代理?
反向代理是指代理服务器接收客户端请求并将其转发到内部服务器,再将服务器的响应返回给客户端。与正向代理不同,客户端并不知道请求是通过代理进行的。
2.2 Nginx 如何实现反向代理?
在 Nginx 中实现反向代理非常简单,只需在配置文件中使用 proxy_pass
指令。
server {listen 80;server_name example.com;location / {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
主要指令解释:
- proxy_pass:指定后端服务器的地址。
- proxy_set_header:设置请求头,将客户端的信息传递给后端服务器。
2.3 反向代理的好处
- 负载均衡:通过将请求分发到多台服务器,提高整体处理能力。
- 安全性:隐藏内部服务器的真实 IP,增加安全性。
- 统一入口:提供统一的访问入口,便于管理和监控。
- 缓存:在代理服务器上缓存响应,减轻后端压力并加快响应速度。
三、负载均衡
3.1 Nginx 的负载均衡策略
Nginx 提供了多种负载均衡策略,以下是主要策略的详细说明及其具体配置示例:
-
轮询(Round Robin):
-
描述:请求依次分配给后端服务器。
-
配置示例 :
upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com; }server {listen 80;server_name example.com;location / {proxy_pass http://backend;} }
-
说明:上述配置将客户端请求按顺序分配给
backend1
、backend2
和backend3
。
-
-
最少连接(Least Connections):
-
描述:将请求分配给当前连接数最少的服务器。
-
配置示例:
upstream backend {least_conn; # 使用最少连接策略server backend1.example.com;server backend2.example.com;server backend3.example.com; }server {listen 80;server_name example.com;location / {proxy_pass http://backend;} }
-
说明:配置中加入
least_conn
,Nginx 将优先将请求转发到当前连接数最少的服务器。
-
-
IP 哈希(IP Hash):
-
描述:根据客户端的 IP 地址计算哈希值,将请求分配给特定的后端服务器。
-
配置示例:
upstream backend {ip_hash; # 使用 IP 哈希策略server backend1.example.com;server backend2.example.com;server backend3.example.com; }server {listen 80;server_name example.com;location / {proxy_pass http://backend;} }
-
说明:每个来自相同 IP 的请求将始终被发送到同一台后端服务器,适用于需要保持会话的场景。
-
-
加权轮询(Weighted Round Robin):
-
描述:为后端服务器设置不同的权重,权重越高的服务器接收的请求越多。
-
配置示例:
upstream backend {server backend1.example.com weight=3; # 权重3server backend2.example.com weight=2; # 权重2server backend3.example.com weight=1; # 权重1 }server {listen 80;server_name example.com;location / {proxy_pass http://backend;} }
-
说明:权重配置后,Nginx 将按照指定的比例分配请求,例如
backend1
将接收大约 50% 的请求,而backend3
仅接收约 16.67% 的请求。
-
3.2 负载均衡策略的适用场景
- 轮询:适用于服务器性能相似的简单网站,如内容展示型网站。
- 最少连接:适合处理复杂请求的应用,如文件上传或数据处理服务,确保负载均匀分配。
- IP 哈希:适合需要会话保持的应用,如电商购物车、社交网站,确保用户请求持续到同一服务器。
- 加权轮询:适合服务器性能差异明显的情况,比如一台高配置服务器与多台低配置服务器共同处理请求。
3.3 配置 Nginx 的负载均衡
以下是完整的 Nginx 配置示例,展示如何实现负载均衡:
http {upstream backend {server backend1.example.com weight=3; # 高性能服务器server backend2.example.com; # 中等性能服务器server backend3.example.com weight=1; # 低性能服务器}server {listen 80;server_name example.com;location / {proxy_pass http://backend; # 将请求转发到后端服务器proxy_set_header Host $host; # 设置请求头proxy_set_header X-Real-IP $remote_addr; # 真实客户端 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 转发 IP}}
}
配置详解:
upstream backend
:定义了后端服务器组,其中包括三台服务器,并为它们设置了不同的权重。listen 80
:指示 Nginx 在 80 端口监听 HTTP 请求。proxy_pass
:将请求转发到定义的后端服务器组。proxy_set_header
:设置请求头信息,确保后端能够获取真实的客户端信息。
四、静态资源服务
4.1 Nginx 作为静态资源服务器的优势
- 高性能:Nginx 采用事件驱动架构,可以同时处理大量并发请求。
- 低内存消耗:使用极少的内存资源处理请求,适合于高并发场景。
- 高效的缓存机制:能够快速响应静态资源请求,减少后端服务器的压力。
4.2 优化 Nginx 对静态资源的处理
为了优化 Nginx 对静态资源的处理,可以采取以下措施:
- 开启 Gzip 压缩:通过压缩响应内容,减少传输数据量。
- 设置缓存:使用
expires
指令设置缓存时间,减少不必要的请求。 - 使用 HTTP/2:支持更高效的请求/响应处理。
示例配置:
server {listen 80;server_name example.com;location /static/ {alias /var/www/static/;expires 30d;gzip on;gzip_types text/css application/javascript;}
}
五、性能优化
5.1 Nginx 性能优化的了解
Nginx 性能优化可以通过多种方式进行,包括调整配置参数、优化请求处理等。
- 工作进程:根据服务器 CPU 核心数设置工作进程数,通常设置为与 CPU 核心数相同。
- keepalive:配置保持连接的时间,减少连接建立的开销。
- 优化缓冲区:调整
client_body_buffer_size
、proxy_buffer_size
等参数。
5.2 Nginx 如何处理高并发请求
Nginx 通过异步处理和事件驱动模型,能够高效处理大量并发请求。此外,合理配置缓存和负载均衡,可以进一步提升系统的响应能力。
示例优化配置:
worker_processes auto;
events {worker_connections 1024;
}
http {keepalive_timeout 65;
}
六、实际应用
6.1 项目中使用 Nginx 的案例
在一个在线教育平台中,Nginx 被用作反向代理和负载均衡器,管理来自数千用户的并发请求。系统架构包括多台应用服务器和一台数据库服务器。
实际案例:
-
初始配置:项目初期,使用简单的轮询策略进行负载均衡,配置如下:
upstream backend {server app1.example.com;server app2.example.com; }server {listen 80;server_name example.com;location / {proxy_pass http://backend;} }
-
问题识别:随着用户量增加,系统开始出现响应延迟。通过监控发现某些服务器的 CPU 使用率异常高,导致请求处理缓慢。
-
优化方案:将负载均衡策略从轮询改为最少连接,并增加服务器实例。新的配置如下:
upstream backend {least_conn; # 使用最少连接策略server app1.example.com;server app2.example.com;server app3.example.com; # 新增服务器 }server {listen 80;server_name example.com;location / {proxy_pass http://backend;} }
-
结果:优化后,用户请求的响应时间显著下降,系统在高并发情况下的稳定性得到了提高。
6.2 Nginx 故障排查
在实际应用中,Nginx 可能会出现一些常见故障。及时排查和解决这些问题非常重要。
故障排查步骤:
-
502 Bad Gateway:
-
描述:表示后端服务器不可用,通常发生在后端服务崩溃或未响应时。
-
排查方法:
- 检查后端服务状态,确保其正常运行。
- 查看 Nginx 错误日志,通常位于
/var/log/nginx/error.log
,寻找相关错误信息。
-
-
403 Forbidden:
-
描述:请求被拒绝,可能是由于权限问题。
-
排查方法 :
- 检查 Nginx 配置文件中的权限设置,确保
location
块中的路径正确。 - 确保文件或目录的访问权限正确,Nginx 有权访问相关资源。
- 检查 Nginx 配置文件中的权限设置,确保
-
-
504 Gateway Timeout:
-
描述:后端服务器响应超时。
-
排查方法:
-
检查后端服务的性能,确保其在合理的时间内处理请求。
-
增加 Nginx 的超时设置,例如
proxy_read_timeout 60s; # 设置读取响应的超时时间
-
-
通过上述案例和故障排查步骤,能够更有效地利用 Nginx 的负载均衡功能,提升系统的性能和可用性。
七、如何实现 HTTPS
7.1 HTTPS 简介
HTTPS(超文本传输安全协议)是对 HTTP 的安全扩展,通过 SSL/TLS 协议为 HTTP 提供加密传输,确保数据在客户端和服务器之间的安全传输。使用 HTTPS 可以防止数据在传输过程中被窃取或篡改,提高用户的信任度。
7.2 Nginx 中实现 HTTPS 的步骤
要在 Nginx 中实现 HTTPS,需要遵循以下步骤:
- 获取 SSL 证书:可以从受信任的证书颁发机构(CA)获取 SSL 证书,或者使用自签名证书进行测试。
- 配置 Nginx:在 Nginx 配置文件中添加 SSL 配置。
- 重定向 HTTP 到 HTTPS:确保所有 HTTP 请求都重定向到 HTTPS。
7.3 配置示例
以下是一个完整的 Nginx 配置示例,展示如何配置 HTTPS:
server {listen 80;server_name example.com;# 重定向所有 HTTP 请求到 HTTPSreturn 301 https://$host$request_uri;
}server {listen 443 ssl; # 监听 HTTPS 端口server_name example.com;# SSL 配置ssl_certificate /etc/ssl/certs/example.crt; # SSL 证书路径ssl_certificate_key /etc/ssl/private/example.key; # SSL 密钥路径# 强化 SSL 设置ssl_protocols TLSv1.2 TLSv1.3; # 支持的 TLS 协议ssl_ciphers HIGH:!aNULL:!MD5; # 选择的加密算法ssl_prefer_server_ciphers on; # 优先使用服务器端的加密算法location / {proxy_pass http://backend; # 代理到后端服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
7.4 配置详解
- HTTP 重定向:
- 首先,设置一个服务器块,监听 80 端口,将所有 HTTP 请求重定向到 HTTPS。
- 使用
return 301 https://$host$request_uri;
实现 301 重定向,确保用户访问时自动转到安全的 HTTPS 地址。
- HTTPS 配置:
- 在第二个服务器块中,使用
listen 443 ssl;
指定监听 443 端口,并启用 SSL。 ssl_certificate
和ssl_certificate_key
分别指定 SSL 证书和密钥的路径。- 配置
ssl_protocols
和ssl_ciphers
来增强安全性,确保使用强加密。
- 在第二个服务器块中,使用
- 代理设置:
proxy_pass
指令将 HTTPS 请求代理到后端服务器,保持应用的原有逻辑。proxy_set_header
指令确保在转发请求时,保持客户端真实的请求信息。
7.5 测试和验证
配置完成后,可以通过以下步骤进行测试:
- 重启 Nginx:使用命令
sudo systemctl restart nginx
重启 Nginx,以使配置生效。 - 访问网站:在浏览器中输入
https://example.com
,查看是否能成功加载网页,并检查地址栏是否显示安全锁标志。 - SSL 测试工具:使用在线 SSL 测试工具(如 SSL Labs)检查配置的安全性,查看 SSL 证书和配置是否合规。
通过以上步骤,Nginx 可以有效地实现 HTTPS,加密用户与服务器之间的通信,提升网站的安全性和用户信任度。
相关文章:
Nginx 的讲解和案例示范
一、基础理解 1.1 Nginx 是什么? Nginx是一个高性能的 Web 服务器和反向代理服务器,同时也可以作为邮件代理服务器。Nginx 以其高并发处理能力、低内存消耗和丰富的功能受到广泛欢迎。 主要功能: 静态资源服务:高效地提供 HTM…...
微信小程序元素水平居中或垂直居中
最近在做一个微信小程序的项目,其中涉及到css样式实现将<navigator>标签内的图片和文本元素垂直排列,并水平居中。在尝试实现的过程中,将元素在标签内的所有排列情况都顺带实现了。上代码: index.wxml <navigator url&…...
ClickHouse 神助攻:纽约城市公共交通管理(MTA)数据应用挑战赛
本文字数:13198;估计阅读时间:33 分钟 作者:The PME Team 本文在公众号【ClickHouseInc】首发 我们一向对开放数据挑战充满热情,所以当发现 MTA(城市交通管理局)在其官网发起了这样的挑战时&…...
ELK + Filebeat + Spring Boot:日志分析入门与实践(二)
目录 一、环境 1.1 ELKF环境 1.2 版本 1.3 流程 二、Filebeat安装 2.1 安装 2.2 新增配置采集日志 三、logstash 配置 3.1 配置输出日志到es 3.2 Grok 日志格式解析 3.2 启动 logstash 3.3 启动项目查看索引 一、环境 1.1 ELKF环境 springboot项目:w…...
使用 Docker Compose 将数据版 LobeChat 服务端部署
LobeChat 是一个基于 TypeScript 的开源聊天机器人项目,支持本地部署和接入多个大语言模型。本文介绍如何使用 Docker Compose 将 LobeChat 服务端及其数据库部署到生产环境,让您拥有一个私有化的、可定制的 AI 聊天助手。 一、部署前准备 服务器&…...
python如何完成金融领域的数据分析,思路以及常见的做法是什么?
引言 在现代金融领域,数据分析已成为决策支持的重要工具。随着金融市场的复杂性和数据量的激增,传统的分析方法已无法满足需求。 Python作为一种强大的编程语言,凭借其丰富的库和工具,成为金融数据分析的首选语言之一。 本文将探讨如何利用Python进行金融数据分析,包括…...
密码管理工具实现
该文档详细描述了实现一个简单的密码管理工具的过程,工具基于PHP和MySQL构建,支持用户注册、密码存储、管理以及角色权限控制等核心功能。 系统架构设计 技术栈:PHP(后端逻辑)、MySQL(数据存储)…...
构造函数和new操作符 - 2024最新版前端秋招面试短期突击面试题【100道】
构造函数和new操作符 - 2024最新版前端秋招面试短期突击面试题【100道】 🏗️ 在JavaScript中,构造函数和new操作符是创建对象的重要方式。深入理解它们的基本概念和用法,可以帮助你更有效地使用JavaScript进行开发。以下是关于构造函数和ne…...
6.Linux按键驱动-阻塞与非阻塞
默认打开文件时候是阻塞的 当设置打开方式为非阻塞时,无数据时会返回。 当设置打开方式为阻塞时,无数据的时候会等待1.设置打开方式为非阻塞 立即返回,无法读出,返回-1 2.设置为阻塞 核心在于驱动程序中的.read函数的支持 …...
Mac打开环境变量配置文件,source ~/.zshrc无法打开问题解决
本文将会介绍,Mac如何打开zshrc环境变量配置文件。 在搭建开发环境的时候,通常我们需要配置环境变量,例如:ANDROID_HOME、nvm等。 具体的做法是把配置环境变量的命令加入到 shell 的配置文件中。如果你的 shell 是 zshÿ…...
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-23目录1. Advancements in Visual Language Models for Remote Sensing: Datasets, Capabilities, and Enhancement Techniques摘…...
【C#】搭建环境之CSharp+OpenCV
在我们使用C#编程中,对图片处理时会用到OpenCV库,以及其他视觉厂商提供的封装库,这里因为OpenCV是开源库,所以在VS资源里可以直接安装使用,这里简单说明一下搭建的步骤及实现效果,留存。 1. 项目创建 1.1…...
100种算法【Python版】第25篇——Bidirectional Search算法
本文目录 1 算法原理2 路径计算的算法步骤3 python代码4 算法应用1 算法原理 Bidirectional Search(双向搜索)算法是为了解决图中最短路径问题而提出的一种搜索策略,旨在提高搜索效率。该算法的核心思想是同时从起点和终点进行搜索,直到两个搜索相遇。这种方法有效地减少了…...
WebSocket与Socket
一、定义与用途 Socket Socket(套接字)是一个抽象层,用于在网络上执行进程间的通信。它为应用程序提供了发送和接收数据的机制,通过IP和端口号来标识网络中唯一的位置。Socket可以使用TCP进行面向连接的可靠通信,也可以…...
Python 3 维护有序列表 bisect
在Python 3中,bisect模块提供了用于维护有序列表的函数,主要用于在有序序列中进行二分查找以及插入操作,以下是其常见用法的介绍: 1. 导入模块 首先需要导入bisect模块: import bisect2. 主要函数及用法 bisect.bi…...
vue版本太低无法执行vue ui命令
连接 ui和create目前都只支持3.0以后得版本才能使用 https://blog.csdn.net/m0_67318913/article/details/136775252?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-136775252-blog-121204604.235v43pc_blog_bottom_relevance…...
数据结构 之 二叉树的遍历------先根遍历(五)
提示:本篇章主要讲解数据结构中树的相关知识。 文章目录 二叉树的遍历为什么要提出这么多遍历方法?先根遍历二叉树(TLR)先根遍历二叉树的递归算法(重点)先根遍历二叉树的非递归算法(了解,但是得…...
Xss_less靶场攻略(1-18)
xss-lab-less1 ur特殊字符转义 存在url中 转义符为 %2B& 转义符为 %26空格 转义符为 或 %20/ 转义符为 %2F? 转义符为 %3F% 转义符为 %25#转义符为 %23 转义符为 %3Dimg 标签懒加载 在XSS攻击中,img标签的src属性是一个常见的攻击向量,因为它可以…...
【AI语音克隆整合包及教程】声临其境,让想象成为现实——第二代GPT-SoVITS引领语音克隆新时代!
随着人工智能技术的飞速发展,曾经只能在科幻小说中出现的场景逐渐走进了我们的日常生活。其中,语音克隆技术以其独特魅力,成为了人们关注的焦点。GPT-SoVITS作为一款前沿的语音克隆工具,由RVC变声器创始人“花儿不哭”与AI音色转换…...
echarts属性之dataZoom
dataZoom-slider 滑动条型数据区域缩放组件(dataZoomInside) 滑动条型数据区域缩放组件提供了数据缩略图显示,缩放,刷选,拖拽,点击快速定位等数据筛选的功能。下图显示了该组件可交互部分 所有属性 data…...
SQLite 语法
SQLite 语法 SQLite 是一种轻量级的数据库管理系统,它遵循 SQL(结构化查询语言)标准。SQLite 的语法相对简单,易于学习和使用。本文将详细介绍 SQLite 的基本语法,包括数据定义语言(DDL)、数据…...
逗号运算符应用举例
在main.cpp里输入程序如下: #include <iostream> //使能cin(),cout(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用set…...
Android 玩机知识储备
基础知识 安卓刷机:https://post.smzdm.com/p/724098/安装分区(视频): https://www.bilibili.com/video/BV1BY4y1H7Mc/安卓分区(文章): https://www.cnblogs.com/unixcs/p/16398969.html开机过程:https://…...
MyBatis 学习记录(六)之逆向工程
MyBatis 学习记录(六) MyBatis的逆向工程1、创建逆向工程添加依赖和插件创建逆向工程的配置文件执行MBG插件的generate目标最终生成的效果 2、QBC查询 MyBatis的逆向工程 **正向工程:**先创建Java实体类,由框架负责根据实体类生成…...
深度了解flink(七) JobManager(1) 组件启动流程分析
前言 JobManager是Flink的核心进程,主要负责Flink集群的启动和初始化,包含多个重要的组件(JboMaster,Dispatcher,WebEndpoint等),本篇文章会基于源码分析JobManagr的启动流程,对其各个组件进行介绍&#x…...
PostgreSQL 约束
PostgreSQL 约束 介绍 PostgreSQL 是一种功能强大的开源对象关系数据库系统,它提供了多种约束来确保数据的完整性和一致性。约束是数据库规则,用于限制表中数据的类型和操作。在 PostgreSQL 中,约束可以分为几种类型,包括主键约…...
【Redis】
1、Redis 概述 远程字典服务器(Remote Dictionary Server,Redis):一个开源的、高性能的、轻量级、使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,通过提供多种键值数据类型来试音不同场景下的缓…...
大厂面试真题-MVCC有哪些不好
MVCC(Multi-Version Concurrency Control,多版本并发控制)虽然具有提高数据库并发性能、避免脏读等优势,但也存在一些缺点。以下是对MVCC缺点的详细归纳: 一、存储开销增加 MVCC需要为每个数据行存储多个版本&#x…...
一篇教你多排轮播效果
多排轮播 提示:demo案例 效果看看把 这些都是可以单独左右滑动的 文章目录 多排轮播前言一、上才艺总结 前言 今天想着想着 看着别人这样 哎还挺好看,就自己弄了 提示:以下是本篇文章正文内容,下面案例可供参考 一、上才艺 &…...
安全警告您正在访问危险网站怎么关闭
在上网时,很多人可能遇到过“安全警告:您正在访问危险网站”的提示。这类警告通常由浏览器或安全软件自动弹出,旨在保护用户免受钓鱼网站、恶意软件等潜在安全威胁的侵害。这篇文章将带您了解这种安全警告的来源、关闭提示的步骤以及应采取的…...
龙之向导外贸经理人网站/全面网络推广营销策划
一、实例变量 也叫对象变量、类成员变量;从属于类由类生成对象时,才分配存储空间,各对象间的实例变量互不干扰,能通过对象的引用来访问实例变量。但在Java多线程中,实例变量是多个线程共享资源,要注意同步…...
吉首网站制作/百度运营公司
因为我之前在apache上配置域名跳转时,因为我系统安装的apache里没有mod_rewrite模块,当打算为apache单独编译mod_rewrite模块时又提示了apxs:Error: Command failed with rc65536,然后了解到可能与libtool文件有关,与此同时发现在…...
wordpress防盗链接/搜索引擎优化的步骤
torch.cat((a,b),dim),两个向量在dim维度上拼接,要求被拼接的矩阵在另一个维度相等 import torch Atorch.ones(2,3) #2x3的张量(矩阵) B2*torch.ones(4,3)#4x3的张量(矩阵) Ctorch.cat((A,B),0)#按维数0(行࿰…...
简易博客网站模板下载/seo全网营销
为转载其他教程:https://www.runoob.com/w3cnote/zookeeper-leader.html zookeeper 的 leader 选举存在两个阶段,一个是服务器启动时 leader 选举,另一个是运行过程中 leader 服务器宕机。在分析选举原理前,先介绍几个重要的参数…...
烽火台网站/企业百度推广怎么收费
linux 上tomcat 服务器抛出socket异常“文件打开太多”的问题 java.net.SocketException: Too many open files at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) at java.net.ServerSocket.implAccep…...
广东门户网站建设/淘宝推广平台
author:skate time:2012/05/24 数据结构设计(表,索引的创建)的说明 表的设计 1.数据类型的选择 1) 数字类型:分为整数数据类型和浮点数据类型,它们之间的区别是取值范围不同,存储…...