读发布!设计与部署稳定的分布式系统(第2版)笔记11_无限长的结果集

news/2024/7/5 3:12:19

1. 无限长的结果集是导致响应缓慢的常见原因

1.1. 当违反稳态模式时,就可能产生无限长的结果集

1.2. 当调用方允许另一个系统支配调用时,就会出现一个无限长的结果集

2. 数据库突然返回500万行,而不是通常的100多行时会发生什么?

2.1. 在用户失去兴趣后的很长时间内,还在一个while循环中打转

2.2. 除非应用程序明确限制了其可以处理的结果数量,否则系统就可能会耗尽内存

3. 早期的社交媒体网站假定每个用户的连接数量将会呈现钟形曲线一样的分布,但事实上是一个幂律分布

3.1. 如果使用钟形曲线分布式关系进行测试,则永远不会期望能加载一个其关系数量比平均值多几百万倍的实体

3.2. 但是当使用幂律分布时,肯定会出现这种情况

4. 某表从不会超过1000行,但DBA发现,它位于最大系统开销查询列表之首

4.1. 高CPU使用率看起来像是垃圾回收造成的

4.2. 这个通常很小的表,当时竟然拥有超过1000万行的记录

4.2.1. 由于在开发过程中的数据集往往很小,因此应用程序开发工程师可能永远不会体验到这样的负面后果

4.3. 避免这台应用程序服务器查询中缺少LIMIT子句所造成的灾难

4.4. sql

-- Microsoft SQL Server

SELECT TOP 15 colspec FROM tablespec
-- Oracle(since 8i)
SELECT colspec FROM tablespec
WHERE rownum <= 15
-- MySQL and PostgreSQL
SELECT colspec FROM tablespec
LIMIT 15

5. 解决方案

5.1. 在所有API或协议中,调用方应该始终指出准备接受的响应数目

5.2. 注意所有可能会累积无限子记录的数据库关系

5.2.1. 标准的SQL语法限定结果集的大小

5.3. 可以先对完整的结果集进行查询,但在达到最大行数后,就跳出处理循环

5.3.1. 给应用程序服务器提供一些额外的稳定性,但代价是浪费了数据库的系统容量

5.4. 使用切合实际的数据量

5.5. 在前端发送分页请求

5.6. 不要依赖数据生产者

5.6.1. 由于系统某个其他部分的作用,这个数量可能会在没有警告的情况下发生变化

5.6.2. 合理的数量只能是“零”“一”和“许多”

5.6.3. 除非单单查询某一行,否则就有可能返回太多结果

5.6.4. 要想对创建的数据量加以限制,不要依赖数据生产者

5.7. 在其他应用程序级别的协议中使用返回数量限制机制

5.7.1. 服务调用、RMI、DCOM、XML-RPC以及任何其他类型的请求-回复调用,都容易返回巨量的对象,从而消耗太多内存


http://lihuaxi.xjx100.cn/news/1274220.html

相关文章

chatgpt赋能python:Python经典游戏:从命令行到桌面

Python经典游戏:从命令行到桌面 Python是一个热门的编程语言,尤其在编写游戏方面表现出色。Python允许开发人员使用简单的语法和丰富的库编写高效率的游戏。在这篇文章中,我们将介绍Python的一些经典游戏,包括简单的命令行游戏和…

Linux——进程的概念

task_struct task_struct 是linux下管理进程的结构,称为PCB,进程控制块。linux所有的指令本质上都是一个进程。进程 task_struct 进程的数据、代码、可执行程序,有属性、有内容。 进程是系统的工作单元。系统由多个进程组成,包…

Redis的简单使用 (实现Session持久化)

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、Redis数据类型的使用 1. 字符串&#xff…

tensorflow2 tf.train.Checkpoint :变量的保存与恢复

Checkpoint 只保存模型的参数,不保存模型的计算过程,因此一般用于在具有模型源代码的时候恢复之前训练好的模型参数。如果需要导出模型(无需源代码也能运行模型),可以使用SavedModel。 tf.train.Checkpoint :变量的保…

Linux系统编程(vfork和fork)

文章目录 前言一、vfork讲解二、vfork使用三、exit和_exit1.exit和_exit对比2.在vfork中的使用 四、vfork和fork区别总结 前言 本篇文章讲解vfork和fork创建进程的区别。 一、vfork讲解 vfork 是一个在类Unix操作系统中的系统调用,它创建一个新进程,且…

Linux——进程地址空间,写时拷贝,进程独立性

Linux进程内存分布 验证地址空间排布 结论:堆区向地址增大的方向增长,栈区向地址减少的方向增长。局部变量通常保存在栈上,先定义的先入栈,地址是比较高的,后定义的则地址小。 static变量 作用域不变,生命…

Linux之tar安装

目录 Linux之tar安装 定义 工作过程 语法格式 参数及用法 使用源代码安装软件的优点 注意:源代码编译环境 操作流程 解包 —— tar 配置 —— ./configure 编译 —— make 安装 —— make install 案例 --- 安装Apache服务 1.获取安装包地址并下载 2…

word文档批量生成工具(附免费软件)(按Excel表格内容自动替换内容生成文档)

批量生成word文档是让人无比厌恶但有时又不得不做的事情。比如学校要给拟录取的学生发通知书,就可能需要批量生成一批只有“姓名”、“学院”和“专业”不同,其他内容都相同的word文档以供打印(事实上直接生成pdf是更好的选择,这个…