【转载】MySQL客户端服务器协议

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

查询的实行路径:

      这个协议是半双工的,这意味着 MySQL 服务器在某个给定的时间,可以发送或接收数据,但是不能同时发送和接收。这也意味着没有办法截断消息。

      这种协议让 MySQL 的沟通简单而又快捷,但是它也有一些限制。其中一个就是无法进行流程控制,一旦一方发送消息,另一方在发送回复之前就必须提取完整的消息。这像来回抛球的游戏:在任意时刻,只有某一方有球,而且除非有球在手上,否则就不能把球抛回去(发送消息)。

      客户端用一个数据包将查询发送到服务器。这就是为什么 max_packet_size 这个配置参数对于大查询很重要的一个原因(如果查询过大,那么服务器会拒绝接收数据并且抛出一个错误)。一旦客户端发送了查询,那就意味着“球”已经不在自己手中,唯一能做的事情就是等待结果。

      但是,服务器发送的响应由许多数据包组成。服务器发送响应的时候,客户端必须接收完整的结果集。它不能只提取几行数据后就要求服务器停止发送剩下的数据。如果客户端只需要其中的几行数据,要么等待所有数据都传送完毕后丢掉不用的数据,要么就笨拙地断开连接。这两种办法都不好,这就是为什么 LIMIT 子句很重要的原因。

      还有另外一种理解方式,当客户端从服务器提取数据的时候,它认为所有数据都是从服务器“”过来的,但实际情况是服务器在产生这些数据的同时就把它们“”到客户端。客户端只需要接收推出来的数据,根本没办法告诉服务器停止发送数据。

      绝大多数连接 MySQL 的类库,能让你提取完整的结果,然后缓存到内存中,或者只是提取需要的数据。默认的行为通常是提取所有数据后缓存。这很重要,因为 MySQL 只有在所有数据被提取之后,才会释放点所有的锁和资源。查询的状态会是“发送数据”。如果客户端类库一次性提取了所有的数据,那么就可以减少服务器所做的工作,让服务器可以尽可能快地完成所有的清理工作。

      大部分客户端类库可以让使用者像直接从服务器上提取数据一样处理结果,但是它实际上只是在类库的内存中处理数据。这种机制在大多数时候都工作良好,但是对于很庞大的结果集也许会需要很长的时间和很多内存。如果不缓存数据,那么就可以使用较少的内存,并且尽快开始工作。这么做的缺点就是在应用程序和类库交互的时候,服务器端的锁和资源都是被锁定的。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
文章介绍了如何配置HAProxy以支持HTTPS协议和实现服务器的动态上下线。
80 8
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
|
9天前
|
关系型数据库 MySQL Python
mysql之python客户端封装类
mysql之python客户端封装类
|
1月前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
147 18
|
2月前
|
关系型数据库 MySQL 网络安全
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
这篇文章提供了解决Navicat无法连接腾讯云服务器上MySQL问题的步骤,包括调整防火墙设置、更新MySQL权限和检查远程连接配置。
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
文件上传 图片上传 客户端图片上传到服务器
文件上传 图片上传 客户端图片上传到服务器
|
2月前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
2月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
64 1
|
2月前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
69 0
|
2月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
68 0
|
2月前
|
存储 网络协议 物联网
网络中的“客户端”和“服务器
【8月更文挑战第24天】
43 0

热门文章

最新文章

下一篇
无影云桌面