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

SQLAlchemy 的内存消耗

为何要研究SQLAlchemy 的内存消耗问题?因为SQLAlchemy在应用中,绝大多数问题体现在应用人员对SQLAlchemy 的内存消耗问题不认知、不重视、不处理,最终造成整个系统的大问题,使SQLAlchemy 的性能大打折扣,最终影响了SQLAlchemy的在您手中的可用性。

通过以下解决问题的手法,可以有效控制 SQLAlchemy 的内存消耗,提高应用程序的性能和稳定性。

1. 连接池相关内存消耗

原理

SQLAlchemy 使用连接池来管理数据库连接,连接池会在内存中维护一定数量的数据库连接,以避免频繁创建和销毁连接带来的开销。连接池的大小、超时时间等配置会影响内存消耗。

示例

from sqlalchemy import create_engine# 创建一个连接池大小为 10 的数据库引擎
engine = create_engine('mysql+pymysql://user:password@host/dbname', pool_size=10)

在这个例子中,连接池会在内存中保留 10 个数据库连接,每个连接会占用一定的内存空间。连接池越大,占用的内存就越多。

应对策略

不要试图对数据库进行长连接,例如:终端程序启动就连接数据库,终端程序退出才关闭连接,这是最不可取的,这会导致大量的数据库长连接。如果您不是使用SQLAlchemy,而是手动管理数据库连接,并进行了长连接,那么系统的噩梦很可能就此开始。

数据库的连接使用应该是:需要数据库操作时连接数据库,数据库操作完毕后就管理闲置的连接。SQLAlchemy可以自动的利用数据库连接池中的空闲连接。根据实际业务需求合理配置连接池大小。如果并发访问量较小,可以适当减小连接池大小;如果并发访问量较大,可以增加连接池大小,但要注意不要过度分配内存。


2. 对象管理导致的内存消耗

原理

当使用 SQLAlchemy 从数据库中查询数据时,会将查询结果映射为 Python 对象。这些对象会在内存中占用一定的空间,尤其是当查询返回大量数据时,内存消耗会显著增加。如果您不小心返回了大量数据(尤其是在处理大数据时),您的这样一次无心之失,足以让整个系统死机。

示例

from sqlalchemy.orm import sessionmaker
from your_model_module import User  # 假设 User 是一个 SQLAlchemy 模型类Session = sessionmaker(bind=engine)
session = Session()# 查询所有用户,如果User表的记录条数很多(超过1万条会极度影响性能,超过10万条会迟滞系统,100万条直接死机)
users = session.query(User).all()

应对策略

  • 分批查询:对于大量数据的查询,采用分批查询的方式,每次只查询一部分数据进行处理,处理完后释放相关内存。例如:
batch_size = 100
offset = 0
while True:users = session.query(User).limit(batch_size).offset(offset).all()if not users:break# 处理当前批次的用户数据for user in users:# 处理逻辑passoffset += batch_size
  • 及时释放对象:在使用完对象后,及时释放对它们的引用,让 Python 的垃圾回收机制能够回收相关内存。例如,在处理完一批数据后,将列表置为 None

3. 查询操作中的内存消耗

原理

复杂的查询操作,尤其是涉及大量数据的连接查询、子查询等,可能会导致 SQLAlchemy 在内存中进行复杂的计算和数据处理,从而增加内存消耗。

示例

from sqlalchemy.orm import joinedload# 进行一个复杂的连接查询
orders = session.query(Order).options(joinedload(Order.user)).all()

 在这个例子中,使用 joinedload 进行连接查询,SQLAlchemy 会将 Order 对象和关联的 User 对象一次性加载到内存中,但如果 Order 和 User 表的数据量都很大,内存消耗会明显增加(此时要么通过with_entities削减加载的数据量,要么采用流式查询)。

应对策略

  • 优化查询语句:尽量避免不必要的连接和子查询,只查询需要的字段。例如,使用 with_entities 方法指定要查询的字段:
orders = session.query(Order).with_entities(Order.id, Order.amount).all()
  • 使用流式查询:对于大数据量的查询,可以使用流式查询,避免将所有数据一次性加载到内存中。例如:
for order in session.query(Order).yield_per(100):# 处理每个订单pass

 4. 关联关系处理的内存消耗

原理

在处理对象之间的关联关系时,SQLAlchemy 可能会自动加载关联对象,这会增加内存消耗。例如,当使用 relationship 定义关联关系时,如果没有合理配置加载策略,可能会导致大量关联对象被加载到内存中。

示例

class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)orders = relationship("Order")user = session.query(User).first()
# 访问用户的订单,可能会导致所有订单对象被加载到内存中
for order in user.orders:pass

应对策略

  • 合理配置加载策略:使用 joinedloadsubqueryload 等加载策略来控制关联对象的加载时机和方式。例如,使用 joinedload 一次性加载关联对象:
user = session.query(User).options(joinedload(User.orders)).first()
  • 延迟加载对于不需要立即使用的关联对象,可以配置为延迟加载,只有在实际访问时才加载到内存中。例如,在 relationship 中使用 lazy='dynamic'
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)orders = relationship("Order", lazy='dynamic')

5.分批操作和流式操作

在 SQLAlchemy 里,分批查询和流式查询都是用于处理大量数据查询的技术手段,它们在实现方式、内存使用、性能表现、适用场景等方面存在一定差异。

(1)实现方式

分批查询

分批查询是将大数据集分割成多个较小的数据批次进行查询。一般通过设置 limit 和 offset 参数来实现,每次查询返回固定数量的记录,处理完这批记录后,再调整 offset 值进行下一批次的查询,直至查询完所有数据。

示例代码

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from your_model_module import User  # 假设 User 是模型类engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
session = Session()batch_size = 100
offset = 0
while True:users = session.query(User).limit(batch_size).offset(offset).all()if not users:break# 处理当前批次的用户数据for user in users:print(user)offset += batch_sizesession.close()

流式查询

流式查询借助 yield_per 方法,以流式方式逐行处理查询结果。数据库游标会逐行从数据库中读取数据,每读取一定数量(yield_per 指定的数量)的记录后就将其返回,而不是一次性把所有数据加载到内存中。

示例代码

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from your_model_module import User  # 假设 User 是模型类engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
session = Session()for user in session.query(User).yield_per(100):print(user)session.close()

 (2)内存使用

分批查询

分批查询每次仅将一批数据加载到内存中,相较于一次性加载全量数据,能显著减少内存占用。不过,每批数据仍需全部加载到内存后再进行处理,若批次大小设置不合理(过大),仍可能导致内存占用过高。

流式查询

流式查询以逐行方式处理数据,每次只将少量数据加载到内存中,内存占用非常低,即使处理超大规模数据集,也能有效避免内存溢出问题。

(3)性能表现

分批查询

分批查询需要多次与数据库交互,每次查询都有一定的开销,如建立连接、执行查询语句等。而且,随着 offset 值的增大,查询效率可能会逐渐降低,因为数据库需要跳过大量记录来定位到指定偏移量的位置。

流式查询

流式查询与数据库保持持续连接,逐行读取数据,减少了多次查询的开销,在处理大数据集时性能优势明显。但流式查询依赖数据库的游标机制,若数据库游标性能不佳,可能会影响整体查询效率。

(4)适用场景

分批查询

  • 适用于需要对每一批数据进行批量处理的场景,例如批量更新、批量插入等操作。
  • 当需要对数据进行分页展示时,分批查询可以方便地实现分页逻辑。

流式查询

  • 适合处理超大规模数据集,尤其是在内存资源有限的情况下,流式查询能有效避免内存问题。
  • 适用于实时数据处理场景,如实时数据分析、日志处理等,可在获取数据的同时立即进行处理,无需等待全量数据加载完成。

分批查询和流式查询各有优劣,在实际应用中,需要根据数据规模、内存资源、处理需求等因素综合考虑,选择合适的查询方式。


6.一次性加载关联 vs 动态加载关联

在 SQLAlchemy 中,joinedload 和 dynamic 是两种不同的关联对象加载策略,它们在资源消耗方面各有特点,具体哪种更省资源取决于具体的使用场景,下面从内存、数据库查询、CPU 等资源消耗维度详细分析。

(1)joinedload 加载策略

原理

joinedload 是一种立即加载策略,它会使用 SQL 的 JOIN 操作在一次数据库查询中同时获取主对象和关联对象的数据。查询结果会被一次性加载到内存中,并且关联对象会被直接关联到主对象上。

示例代码

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship, joinedload
from sqlalchemy.ext.declarative import declarative_base# 创建数据库引擎,使用 SQLite 内存数据库
engine = create_engine('sqlite:///:memory:')
# 创建基类
Base = declarative_base()# 定义 User 类
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))# 定义与 Order 的关联关系orders = relationship("Order")# 定义 Order 类
class Order(Base):__tablename__ = 'orders'id = Column(Integer, primary_key=True)order_number = Column(String(20))user_id = Column(Integer, ForeignKey('users.id'))# 创建表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 使用 joinedload 一次性加载用户及其关联的订单
users = session.query(User).options(joinedload(User.orders)).all()
for user in users:for order in user.orders:print(f"User: {user.name}, Order: {order.order_number}")session.close()

资源消耗情况

  • 内存消耗:由于 joinedload 会一次性将主对象和关联对象的数据都加载到内存中,如果关联对象数量较多或者数据量较大,会占用较多的内存。例如,一个用户关联了大量的订单记录,使用 joinedload 会将所有订单数据都加载到内存中。
  • 数据库查询消耗:只进行一次数据库查询,减少了与数据库的交互次数,降低了数据库的负载。但是,如果关联表的数据量很大,查询语句可能会变得复杂,导致查询时间增加。
  • CPU 消耗:由于只进行一次查询和数据处理,CPU 在查询和数据转换方面的计算量相对较小。

(2)dynamic 加载策略 

原理

dynamic 是一种延迟加载策略,它返回一个可查询对象(Query 对象),而不是直接加载关联对象。当需要访问关联对象时,会根据具体的查询条件进行按需查询,每次只查询需要的数据。

示例代码

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base# 创建数据库引擎,使用 SQLite 内存数据库
engine = create_engine('sqlite:///:memory:')
# 创建基类
Base = declarative_base()# 定义 User 类
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))# 定义与 Order 的关联关系,使用 dynamic 加载策略orders = relationship("Order", lazy='dynamic')# 定义 Order 类
class Order(Base):__tablename__ = 'orders'id = Column(Integer, primary_key=True)order_number = Column(String(20))user_id = Column(Integer, ForeignKey('users.id'))# 创建表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 查询用户
users = session.query(User).all()
for user in users:# 按需查询用户的订单user_orders = user.orders.filter(Order.order_number.like('123%')).all()for order in user_orders:print(f"User: {user.name}, Order: {order.order_number}")session.close()

资源消耗情况

  • 内存消耗:由于是按需查询,只有在实际访问关联对象时才会加载数据到内存中,不会一次性加载大量数据,因此内存消耗相对较低。例如,只需要查看部分订单记录时,不会将所有订单数据都加载到内存中。
  • 数据库查询消耗:可能会进行多次数据库查询,增加了与数据库的交互次数,提高了数据库的负载。但是,每次查询的数据量较小,查询语句相对简单,查询时间可能会较短。
  • CPU 消耗:由于需要多次进行查询和数据处理,CPU 在查询和数据转换方面的计算量相对较大。

(3)对比总结

  • 当关联对象数据量较小且需要一次性访问所有关联对象时joinedload 更省资源。因为它只进行一次数据库查询,减少了数据库的交互次数,虽然会占用一定的内存,但整体的资源消耗相对较低。
  • 当关联对象数据量较大且只需要访问部分关联对象时dynamic 更省资源。它按需查询,避免了一次性加载大量数据到内存中,降低了内存消耗,虽然会增加数据库的交互次数,但每次查询的数据量较小。

选择 joinedload 还是 dynamic 加载策略需要根据具体的业务场景和数据特点来决定,以达到最优的资源利用效果。

相关文章:

SQLAlchemy 的内存消耗

为何要研究SQLAlchemy 的内存消耗问题?因为SQLAlchemy在应用中,绝大多数问题体现在应用人员对SQLAlchemy 的内存消耗问题不认知、不重视、不处理,最终造成整个系统的大问题,使SQLAlchemy 的性能大打折扣,最终影响了SQL…...

Centos Ollama + Deepseek-r1+Chatbox运行环境搭建

Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好! 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…...

vscode和pycharm的区别

VSCode(Visual Studio Code)和 PyCharm 是两款常用的 Python 开发工具,它们在功能和使用体验上有一些关键区别: 1. 核心定位 VSCode:轻量级、多语言支持的代码编辑器,依靠插件扩展 Python 开发能力。PyCh…...

【0403】Postgres内核 检查(procArray )给定 db 是否有其他 backend process 正在运行

文章目录 1. 给定 db 是否有其他 backend 正在运行1.1 获取 allPgXact[] 索引1.1.1 MyProc 中 databaseId 初始化实现1.2 allProcs[] 中各 databaseId 判断1. 给定 db 是否有其他 backend 正在运行 CREATE DATABASE 语句创建用户指定 数据库名(database-name)时候, 会通过 …...

MySQL 数据库的体系架构

MySQL 数据库的体系架构是其高效、灵活和可扩展性的核心基础。其设计采用 分层模块化 结构,主要分为以下四层: 1. 连接层(Connectors & Connection Pool) 功能:负责处理客户端连接、认证和权限管理。 连接管理&a…...

【C++高并发服务器WebServer】-14:Select详解及实现

本文目录 一、BIO模型二、非阻塞NIO忙轮询三、IO多路复用四、Select()多路复用实现 明确一下IO多路复用的概念:IO多路复用能够使得程序同时监听多个文件描述符(文件描述符fd对应的是内核读写缓冲区),能够提升程序的性能。 Linux下…...

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了,一般不推荐使用该方法,专业的事专业工具做。建议有条件,还是上防火墙或者waf来做。 官方文档:ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…...

15vue3实战-----props和emit传值

15vue3实战-----props和emit传值 1.emit的使用2.配合props实现完整父子通信 vue3中props和emit的使用有点不一样,但万变不离其宗。 1.emit的使用 子组件: <script setup lang"ts"> // 定义触发的事件及其数据类型 const emit defineEmits([update, delete]…...

第二节 docker基础之---镜像构建及挂载

查看当前镜像&#xff1a; [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [rootdocker ~]#很明显docker是咱们新搭建的所以目前还没有镜像 1&#xff0c;搜索镜像&#xff1a; [rootdocker ~]# docker search centos 搜索镜像并过滤是官…...

Android性能优化

Android性能优化 如何优化一个包含大量图片加载的Android应用&#xff0c;以提高性能和用户体验&#xff1f; 优化一个包含大量图片加载的Android应用&#xff0c;可以从以下几个方面入手&#xff0c;以提高性能和用户体验&#xff1a; 选择合适的图片加载库 使用成熟的图片…...

scikit-learn简介

scikit-learn 是一个广泛使用的 Python 库&#xff0c;主要用于 机器学习&#xff08;ML&#xff09;。它提供了一些简单高效的工具&#xff0c;适用于 数据挖掘 和 数据分析。scikit-learn 基于 NumPy、SciPy 和 matplotlib 等科学计算库&#xff0c;具有 易于使用的接口 和 高…...

查询已经运行的 Docker 容器启动命令

一、导语 使用 get_command_4_run_container 查询 docker 容器的启动命令 获取镜像 docker pull cucker/get_command_4_run_container 查看容器命令 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cucker/get_command_4_run_container 容器id或容器名 …...

ssti学习笔记(服务器端模板注入)

目录 一&#xff0c;ssti是什么 二&#xff0c;原理 所谓模板引擎&#xff08;三列&#xff0c;可滑动查看&#xff09; 三&#xff0c;漏洞复现 1&#xff0c;如何判断其所属的模板引擎&#xff1f; 2&#xff0c;判断清楚后开始注入 &#xff08;1&#xff09;Jinja2&a…...

Docker 部署 RabbitMQ | 自带延时队列

一、获取镜像 docker pull farerboy/rabbitmq:3.9.9 二、运行镜像 docker run -d --name rabbitmq \n --hostname rabbitmq \n -p 15672:15672/tcp \n -p 5672:5672/tcp \n -v /wwwroot/opt/docker/rabbitmq:/var/lib/rabbitmq \n farerboy/rabbitmq:3.9.9 备注&#xff1a;…...

如何使用deepseek创建钉钉收费AI助理

1、打开deepseek&#xff0c;简单描述下自己的问题&#xff0c;勾选深度思考 2、deepseek给我生成了一大段提示词模板 3、打开钉钉-应用中心-找AI助理 4、点击立即创作 5、创作 默认创建的是免费上网&#xff0c;需要创建收费的话需要先申请&#xff0c;填一个表单内容和价格&…...

【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计IIR数字滤波器可以看这里&#xff1a;利用MATLAB配合ARM-DSP库设计IIR数字滤波器&#xff08;保姆级教程&#xff09; 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合&#xff0c;简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…...

2025年日祭

本文将同步发表于洛谷&#xff08;暂无法访问&#xff09;、CSDN 与 Github 个人博客&#xff08;暂未发布&#xff09; 本蒟自2025.2.8开始半停课。 以下是题目格式&#xff1a; [题目OJ 题号] [来源&#xff08;选填&#xff09;] 名称 …… 题号 - 名称 题目&#xff1a;……...

torch_bmm验算及代码测试

文章目录 1. torch_bmm2. pytorch源码 1. torch_bmm torch.bmm的作用是基于batch_size的矩阵乘法,torch.bmm的作用是对应batch位置的矩阵相乘&#xff0c;比如&#xff0c; mat1的第1个位置和mat2的第1个位置进行矩阵相乘得到mat3的第1个位置mat1的第2个位置和mat2的第2个位置…...

ChatGPT提问技巧:行业热门应用提示词案例-文案写作

ChatGPT 作为强大的 AI 语言模型&#xff0c;已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案&#xff0c;关键在于如何与它“沟通”&#xff0c;也就是如何设计提示词&#xff08;Prompt&#xff09;。以下是一些实用的提示词案例&#xff0c;帮助你解锁 ChatG…...

k8s中,一.service发布服务,二.dashboard:基于网页的k8s管理插件,三.资源服务与帐号权限

一.service资源对内发布服务Cluster IP对外发布服务NodePortIngress 二.dashboard:基于网页的k8s管理插件 三.资源服务与帐号权限一.service:用户无法预知pod的ip地址以及所在的节点,多个相同的pod如何访问他们上面的服务功能:1.服务自动感知:pod迁移后访问service的ip,不受影响…...

Python的那些事第十六篇:Python的网络爬虫技术

基于Python的网络爬虫技术研究与应用 摘要 随着互联网的飞速发展&#xff0c;网络爬虫技术在数据采集、信息挖掘等领域发挥着重要作用。本文详细介绍了Python环境下常用的网络爬虫技术&#xff0c;包括Requests库、BeautifulSoup库以及Scrapy框架。通过对这些工具的使用方法、…...

Linux第106步_Linux内核RTC驱动实验

1、了解rtc_device结构体 1)、打开“include/linux/rtc.h” rtc_class_ops是需要用户根据所使用的RTC设备编写的,其结构体如下: struct rtc_class_ops { int (*ioctl)(struct device *, unsigned int, unsigned long);/*函数指针ioctl*/ int (*read_time)(struct device *,…...

《XSS跨站脚本攻击》

一、XSS简介 XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了XSS&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年度分别为第三名和第七名&…...

康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案

随着自动驾驶技术的快速发展&#xff0c;车辆准确感知周围环境的能力变得至关重要。BEV&#xff08;Birds-Eye-View&#xff0c;鸟瞰图&#xff09;感知技术&#xff0c;以其独特的视角和强大的数据处理能力&#xff0c;正成为自动驾驶领域的一大研究热点。 一、BEV感知技术概…...

堆详解及C语言实现

堆结构与最大堆详解&#xff1a;从原理到C语言实现 1. 堆结构概述 1.1 定义与性质 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树数据结构&#xff0c;满足以下性质&#xff1a; 结构性&#xff1a;完全二叉树结构有序性&#xff1a;每个结点的值都≥&#xff08;…...

基于STM32的智能鱼缸水质净化系统设计

&#x1f91e;&#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…...

python:csv文件批量导入mysql

1.导入sql文件到数据库中 mysql -u username -p要先创建一个空的数据库 CREATE DATABASE your_database_name;USE your_database_name;导入sql文件 source /path/to/your/file.sql;查看某个表格的结构&#xff0c;为后续数据插入做准备 DESCRIBE table_name;2.插入假数据到对应…...

第三十二周:Informer学习笔记

目录 摘要Abstract1 Informer1.1 预备知识1.2 模型框架1.3 实验分析 总结 摘要 本周学习的主要内容是Informer模型&#xff0c;Informer是一种专为长序列时间序列预测&#xff08;LSTF&#xff09; 设计的Transformer模型。相较于传统的Transformer&#xff0c;Informer采用Pr…...

计算机视觉核心任务

1. 计算机视频重要分类 计算机视觉的重要任务可以大致分为以下几类&#xff1a; 1. 图像分类&#xff08;Image Classification&#xff09; 识别图像属于哪个类别&#xff0c;例如猫、狗、汽车等。 应用场景&#xff1a;物品识别、人脸识别、医疗影像分类。代表模型&#…...

【python】matplotlib(animation)

文章目录 1、matplotlib.animation1.1、FuncAnimation1.2、修改 matplotlib 背景 2、matplotlib imageio2.1、折线图2.2、条形图2.3、散点图 3、参考 1、matplotlib.animation 1.1、FuncAnimation matplotlib.animation.FuncAnimation 是 Matplotlib 库中用于创建动画的一个…...

【Linux网络编程】之守护进程

【Linux网络编程】之守护进程 进程组进程组的概念组长进程 会话会话的概念会话ID 控制终端控制终端的概念控制终端的作用会话、终端、bash三者的关系 前台进程与后台进程概念特点查看当前终端的后台进程前台进程与后台进程的切换 作业控制相关概念作业状态&#xff08;一般指后…...

Vue.js如何根据访问路径切换页面

Vue Router 在前端工程中&#xff0c;路由指的是&#xff0c;根据不同的访问路径&#xff0c;展示不同组件的内容。 Vue Router是Vue.js的官方路由。 Vue Router介绍。 要使用vue Router&#xff0c;得先安装 npm install vue-router4这里的4&#xff0c;指的是第4个版本 在s…...

Vue与Konva:解锁Canvas绘图的无限可能

前言 在现代Web开发中&#xff0c;动态、交互式的图形界面已成为提升用户体验的关键要素。Vue.js&#xff0c;作为一款轻量级且高效的前端框架&#xff0c;凭借其响应式数据绑定和组件化开发模式&#xff0c;赢得了众多开发者的青睐。而当Vue.js邂逅Konva.js&#xff0c;两者结…...

collabora online+nextcloud+mariadb在线文档协助

1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…...

linux基础命令1

1、linux目录结构——树型结构 根目录&#xff1a;/ 用户主目录(家目录)&#xff1a;~或者 /home/edu 根目录下常见的文件夹: 2、常见的命令 1、pwd 查看当前目录 cd 切换目录 cd ~ 切换到家目录 2、ls 查看当前目录的文件信息 语法:ls [选项] [参…...

[LVGL] 在VC_MFC中移植LVGL

前言&#xff1a; 0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展【类似GUIguider】 1.本文基于VC2022-MFC单文档框架移植lvgl8 2. gitee上下载lvgl8.3 源码&#xff0c;并将其文件夹改名为lvgl lvgl: LVGL 是一个开源图形库&#xff0c;提供您创建具有易于使用…...

Spring Boot整合MQTT

MQTT是基于代理的轻量级的消息发布订阅传输协议。 1、下载安装代理 进入mosquitto下载地址&#xff1a;Download | Eclipse Mosquitto&#xff0c;进行下载&#xff0c;以win版本为例 下载完成后&#xff0c;在本地文件夹找到下载的代理安装文件 使用管理员身份打开安装 安装…...

elasticsearch实战三 elasticsearch与mysql数据实时同步

一 介绍 elasticsearch数据不是一直不变的&#xff0c;需要与mysql、oracle等数据库的数据做同步。 本博客里涉及到的项目地址&#xff1a;https://www.aliyundrive.com/s/7bRWpTYsxWV 方案一&#xff1a; 同步调用&#xff0c;即操作mysql数据后&#xff0c;接着操作elastic…...

netcore openTelemetry+prometheus+grafana

一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入&#xff1a;aspnetcore.json和aspnetcore-endpoint.json 效果&#xff1a;...

StochSync:可在任意空间中生成360°全景图和3D网格纹理

StochSync方法可以用于在任意空间中生成图像&#xff0c;尤其是360全景图和3D网格纹理。该方法利用了预训练的图像扩散模型&#xff0c;以实现零-shot生成&#xff0c;消除了对新数据收集和单独训练生成模型的需求。StochSync 结合了 Diffusion Synchronization&#xff08;DS&…...

MybatisPlus较全常用复杂查询引例(limit、orderby、groupby、having、like...)

MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。以下是 MyBatis-Plus 中常用复杂查询&#xff08;如 LIMIT、ORDER BY、GROUP BY、HAVING、LIKE 等&#xff09;的引例&#xff1a; 1. 环境准备…...

大数据项目2:基于hadoop的电影推荐和分析系统设计和实现

前言 大数据项目源码资料说明&#xff1a; 大数据项目资料来自我多年工作中的开发积累与沉淀。 我分享的每个项目都有完整代码、数据、文档、效果图、部署文档及讲解视频。 可用于毕设、课设、学习、工作或者二次开发等&#xff0c;极大提升效率&#xff01; 1、项目目标 本…...

win10的Unet项目导入阿里云训练

win10配置文件 annotated-types0.7.0 certifi2024.12.14 charset-normalizer3.4.1 click8.1.8 colorama0.4.6 contourpy1.1.1 cycler0.12.1 docker-pycreds0.4.0 eval_type_backport0.2.2 filelock3.16.1 fonttools4.55.3 fsspec2024.12.0 gitdb4.0.12 GitPython3.1.44 idna3.…...

Linux(20)——调度作业

目录 一、调度延迟的用户作业&#xff1a; 1、延迟的用户作业&#xff1a; 2、查看延迟的用户作业&#xff1a; 3、从计划中删除作业&#xff1a; 二、调度周期性用户作业&#xff1a; 1、周期性用户作业&#xff1a; 2、调度周期性用户作业&#xff1a; 3、用户作业格…...

DeepSeek赋能Vue:打造超丝滑进度条开发指南

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。

题目&#xff1a;在CT107D单片机综合训练平台上&#xff0c;8个数码管分别单独依次显示0~9的值&#xff0c;然后所有数码管一起同时显示0~F的值&#xff0c;如此往复。 延时函数分析LED首先实现8个数码管单独依次显示0~9的数字所有数码管一起同时显示0~F的值&#xff0c;如此往…...

清除el-table选中状态 clearSelection

如何在Vue应用中使用Element UI的el-table组件&#xff0c;通过this.$refs.multipleTable.clearSelection()方法来清除所有选中行的状态。适合前端开发者了解表格组件的交互操作。 // el-table绑定ref<el-table selection-change"selsChange" ref"multipl…...

【算法】动态规划专题⑥ —— 完全背包问题 python

目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题&#xff0c;它与0-1背包问题相似&#xff0c;但有一个关键的区别&#xff1a;在完全背包问题中&#xff0c;每种物品都有无限的数量可用。…...

论文笔记-COLING2025-LLMTreeRec

论文笔记-COLING2025-LLMTreeRec: Unleashing the Power of Large Language Models for Cold-Start Recommendations LLMTreeRec: 释放大语言模型在冷启动推荐中的力量摘要1.引言2.框架2.1项目树构建2.2以LLM为中心的基于树的推荐2.2.1推荐链策略2.2.2检索策略 3.实验3.1实验设…...

c++ haru生成pdf输出饼图

#define PI 3.14159265358979323846 // 绘制饼图的函数 void draw_pie_chart(HPDF_Doc pdf, HPDF_Page page, float *data, int data_count, float x, float y, float radius) { float total 0; int i; // 计算数据总和 for (i 0; i < data_count; i) { tot…...