使用MinIO S3存储桶备份Weaviate


Weaviate 是一个开创性的开源向量数据库,旨在通过利用机器学习模型来增强语义搜索。与依赖关键字匹配的传统搜索引擎不同,Weaviate 采用语义相似性原则。这种创新方法将各种形式的数据(文本、图像等)转换为矢量表示形式,即捕捉数据上下文和含义本质的数字形式。通过分析这些向量之间的相似性,Weaviate提供了真正了解用户意图的搜索结果,从而超越了基于关键字的搜索的局限性。

本指南旨在演示 MinIO 和 Weaviate 的无缝集成,充分利用 Kubernetes 原生对象存储和 AI 驱动的语义搜索功能。本指南利用 Docker Compose 进行容器编排,提供了构建强大、可扩展且高效的数据管理系统的战略方法。针对我们如何存储、访问和管理数据,此设置对于寻求利用现代存储解决方案和 AI 驱动型数据检索功能的开发人员、DevOps 工程师和数据科学家来说是一个游戏规则改变者。

技术堆栈简介

在本演示中,我们将重点介绍如何使用 Docker 备份 Weaviate with MinIO buckets。这种设置确保了我们人工智能增强的搜索和分析项目中的数据完整性和可访问性。

  • 用于存储的 MinIO:我们使用 MinIO 作为我们的主要存储平台。MinIO 以其高性能和可扩展性而闻名,擅长安全高效地处理大量数据。在本演示中,您将了解如何使用 MinIO 存储桶来备份 Weaviate 数据,确保我们系统的完整性和性能不受影响。

  • Weaviate 向量数据库:Weaviate 的向量数据库是这种集成的核心,它使 AI 应用程序能够执行语义搜索。通过将非结构化数据转换为有意义的向量表示,它使应用程序能够以细致入微的方式理解数据并与之交互,为更智能、响应更灵敏的 AI 驱动功能铺平道路。

该演示旨在重点介绍使用 Docker 将 MinIO 和 Weaviate 无缝集成,展示一种备份 AI 增强搜索和分析系统的可靠方法。

资源

所有文件都可通过 GitHub minio/blog-assets/minio-weaviate-backups 存储库文件夹获得。

  • docker-compose.yaml
  • schema.json
  • data.json
  • s3_backup_module.ipynb

知识渊博的先决条件

  • 计算机上安装了 Docker 和 Docker Compose。

  • 基本了解 Docker 概念和 YAML 语法。

  • 使用 weaviate-client 库的 Python 环境。

  • 用于运行命令(如 curl)的命令行访问。

与 Docker Compose 的集成和配置

此处 docker-compose.yaml 提供的文件旨在为 Weaviate 建立无缝设置,突出了我们对简化和高效数据管理的承诺。这种配置提供了一个强大的环境,其中 MinIO 充当安全存储服务,Weaviate 利用此存储实现高级向量搜索功能。

下面提供的 docker-compose.yaml 概述了 Weaviate 的设置。

version: '3.8'services:weaviate:container_name: weaviate_serverimage: semitechnologies/weaviate:latestports:- "8080:8080"environment:AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'PERSISTENCE_DATA_PATH: '/var/lib/weaviate'ENABLE_MODULES: 'backup-s3'BACKUP_S3_BUCKET: 'weaviate-backups'BACKUP_S3_ENDPOINT: 'play.minio.org.cn:443'BACKUP_S3_ACCESS_KEY_ID: 'minioadmin'BACKUP_S3_SECRET_ACCESS_KEY: 'minioadmin'BACKUP_S3_USE_SSL: 'true'CLUSTER_HOSTNAME: 'node1'volumes:- ./weaviate/data:/var/lib/weaviate

Docker-Compose:在启用模块和 play.minio.org.cn MinIO 服务器的情况下 backups-s3 部署 Weaviate

配置 Weaviate 以进行 S3 备份

通过上面的docker-compose.yaml,Weaviate被复杂地配置为利用MinIO进行备份,确保数据的完整性和可访问性。此设置涉及基本环境变量,例如 ENABLE_MODULES 设置为 backup-s3 ,以及 S3 存储桶、终端节点、访问密钥和 SSL 使用情况的各种设置。此外,设置 以确保持久存储数据, PERSISTENCE_DATA_PATH 并 CLUSTER_NAME 用于节点标识。

值得注意的环境变量包括:

  • ENABLE_MODULES: ‘backup-s3’
  • BACKUP_S3_BUCKET: ‘weaviate-backups’
  • BACKUP_S3_ENDPOINT: ‘play.minio.org.cn:443’
  • BACKUP_S3_ACCESS_KEY_ID: ‘minioadmin’
  • BACKUP_S3_SECRET_ACCESS_KEY: ‘minioadmin’
  • BACKUP_S3_USE_SSL: ‘true’
  • PERSISTENCE_DATA_PATH: ‘/var/lib/weaviate’
  • CLUSTER_NAME: ‘node1’

此 docker-compose 中的 Weaviate 服务设置为利用挂载的卷进行数据持久化;这可确保您的数据在会话和操作中持久存在。

注意:MinIO 存储桶需要事先存在,Weaviate 不会为您创建存储桶。

部署步骤

要使用 Docker Compose 将 MinIO 和 Weaviate 集成到您的项目中,请遵循以下详细过程:

保存或更新 Docker Compose 文件

  • 新设置:如果这是新设置,请将提供的 docker-compose.yaml 文件直接保存到项目的工作目录中。此文件对于正确配置服务至关重要。

  • 现有设置:如果要更新现有生产环境,请修改当前的 docker-compose.yaml 以反映上述设置。确保准确复制这些设置以连接到您的服务。

运行 Docker Compose 文件

docker-compose.yaml 文件就位后,在终端或命令提示符下使用以下命令启动部署:

docker-compose up -d --build

此命令将以分离模式启动 Weaviate 服务,并在系统后台运行它们。

了解持久性目录

在构建和执行过程中,Docker Compose 将创建一个持久目录,如 docker-compose.yaml 文件中指定的那样。此目录( ./weaviate/data 用于 Weaviate)用于持久存储数据,确保您的数据在容器重启和部署中保持不变。
持久性存储允许更稳定的环境,在重新启动容器时不会丢失数据。

部署 docker-compose 后,您可以在浏览器中访问 Weaviate 服务器的 URL,然后 /v1/meta 检查您的部署配置是否正确。

JSON 有效负载的第一 http://localhost:8080/v1/meta 行应如下所示:

{"hostname":"http://[::]:8080","modules":{"backup-s3":{"bucketName":"weaviate-backups","endpoint":"play.minio.org.cn:443","useSSL":true}...[truncated]...}

配置 MinIO:存储桶的访问策略 weaviate-backups

为了将 Weaviate 与 MinIO 集成,MinIO 中的备份存储桶需要指定备份存储桶的访问策略,即 weaviate-backups to Public。此调整对于授予 Weaviate backup-s3 模块成功与 MinIO 存储桶交互以执行备份操作所需的权限是必要的。

注意:在生产环境中,您可能需要将其锁定,这超出了本教程的范围。

在处理此配置时,必须清楚地了解将存储桶设置为“public”的安全隐患。虽然此设置有助于开发环境中的备份过程,但应考虑为生产系统使用替代方法,以保持数据安全性和完整性。采用精细的访问控制,例如 IAM 策略或“预签名”URL。


成功备份到 weaviate-backups 存储桶

在本演示结束时,您将能够看到 Weaviate 在使用该 backup-s3 模块时在整个过程中创建的桶对象。

使用 Python 概述流程

要在 Weaviate 中启用 S3 备份,请在 docker-compose.yaml 文件中设置必要的环境变量。这指示 Weaviate 使用 MinIO 作为备份目的地,包括备份模块的设置和 MinIO 存储桶的详细信息。

在深入探讨技术操作之前,我想声明,我正在 JupyterLab 环境中演示以下步骤,以便将我们的管道封装在笔记本中的额外好处,可在此处获得。

第一步涉及通过使用 pip 安装 python weaviate-client 库来设置环境。这个 Python 包对于以更 Python 的方式与 Weaviate 的 RESTful API 连接至关重要,允许与数据库无缝交互,以进行模式创建、数据索引、备份和恢复等操作。在演示中,我们将使用 Weaviate Python 客户端库进行演示。

在本演示中,我们使用的是 Weaviate V3 API,因此当您运行 python 脚本时,您可能会看到如下消息:

`DeprecationWarning: Dep016: You are using the Weaviate v3 client, which is deprecated.Consider upgrading to the new and improved v4 client instead!See here for usage: https://weaviate.io/developers/weaviate/client-libraries/pythonwarnings.warn(`

此消息是一个警告横幅,可以忽略,有关更多信息,您可以访问 Weaviate 博客上的这篇文章。

Python 步骤概述:

  1. Install weaviate-client Library
  2. Client initialization
  3. Schema creation
  4. Data insertion
  5. Backup initiation
  6. Data restoration

1. 安装 Weaviate-Client 库

!pip install weaviate-client

2. 导入文章和作者的模式类

本节介绍“Article”和“Author”类的数据结构和架构,为如何组织数据奠定了基础。它演示了如何在 Weaviate 中以编程方式定义和管理模式,展示了 Weaviate 的灵活性和强大功能,以适应针对特定应用程序需求量身定制的各种数据模型。

import weaviateclient = weaviate.Client("http://localhost:8080")# Schema classes to be createdschema = {"classes": [{"class": "Article","description": "A class to store articles","properties": [{"name": "title", "dataType": ["string"], "description": "The title of the article"},{"name": "content", "dataType": ["text"], "description": "The content of the article"},{"name": "datePublished", "dataType": ["date"], "description": "The date the article was published"},{"name": "url", "dataType": ["string"], "description": "The URL of the article"},{"name": "customEmbeddings", "dataType": ["number[]"], "description": "Custom vector embeddings of the article"}]},{"class": "Author","description": "A class to store authors","properties": [{"name": "name", "dataType": ["string"], "description": "The name of the author"},{"name": "articles", "dataType": ["Article"], "description": "The articles written by the author"}]}]
}
client.schema.delete_class('Article')
client.schema.delete_class('Author')
client.schema.create(schema)

3. 架构和数据的设置

定义架构后,笔记本将指导您完成初始化 Weaviate 客户端、在 Weaviate 实例中创建架构以及为数据编制索引。这个过程用初始数据集填充数据库,从而能够探索Weaviate的载体搜索功能。它说明了开始利用 Weaviate 以矢量化格式存储和查询数据所需的实际步骤。

# JSON data to be Ingesteddata = [{"class": "Article","properties": {"title": "LangChain: OpenAI + S3 Loader","content": "This article discusses the integration of LangChain with OpenAI and S3 Loader...","url": "https://blog.minio.org.cn/langchain-openai-s3-loader/","customEmbeddings": [0.4, 0.3, 0.2, 0.1]}},{"class": "Article","properties": {"title": "MinIO Webhook Event Notifications","content": "Exploring the webhook event notification system in MinIO...","url": "https://blog.minio.org.cn/minio-webhook-event-notifications/","customEmbeddings": [0.1, 0.2, 0.3, 0.4]}},{"class": "Article","properties": {"title": "MinIO Postgres Event Notifications","content": "An in-depth look at Postgres event notifications in MinIO...","url": "https://blog.minio.org.cn/minio-postgres-event-notifications/","customEmbeddings": [0.3, 0.4, 0.1, 0.2]}},{"class": "Article","properties": {"title": "From Docker to Localhost","content": "A guide on transitioning from Docker to localhost environments...","url": "https://blog.minio.org.cn/from-docker-to-localhost/","customEmbeddings": [0.4, 0.1, 0.2, 0.3]}}
]for item in data:client.data_object.create(data_object=item["properties"],class_name=item["class"])

Python:按类索引数据

4. 创建备份

对数据编制索引后,重点将转移到通过备份来保留数据库的状态。笔记本的这一部分演示如何触发对 MinIO 的备份操作。

result = client.backup.create(backup_id="backup-id",backend="s3",include_classes=["Article", "Author"],  # specify classes to include or omit this for all classeswait_for_completion=True,
)
print(result)

Python:创建备份

期望:
{'backend': 's3', 'classes': ['Article', 'Author'], 'id': 'backup-id-2', 'path': 's3://weaviate-backups/backup-id-2', 'status': 'SUCCESS'}

5. 删除架构类以进行还原

在继续还原之前,有时需要清除现有架构。本部分介绍干净还原过程的步骤。这可确保还原的数据不会与数据库中的现有架构或数据冲突。

client.schema.delete_class("Article")
client.schema.delete_class("Author")

6. 恢复备份

result = client.backup.restore(backup_id="backup-id",backend="s3",wait_for_completion=True,
)print(result)

恢复备份

期望:
{'backend': 's3', 'classes': ['Article', 'Author'], 'id': 'backup-id', 'path': 's3://weaviate-backups/backup-id', 'status': 'SUCCESS'}

成功的 Backup-S3 响应

还原期间的错误处理

笔记本的这一部分提供了在备份还原过程中实现错误处理的示例。它提供了对数据恢复操作期间意外问题的见解。

from weaviate.exceptions import BackupFailedErrortry:result = client.backup.restore(backup_id="backup-id",backend="s3",wait_for_completion=True,)print("Backup restored successfully:", result)except BackupFailedError as e:print("Backup restore failed with error:", e)# Here you can add logic to handle the failure, such as retrying the operation or logging the error.
期望:
Backup restored successfully: {'backend': 's3', 'classes': ['Author', 'Article'], 'id': 'backup-id', 'path': 's3://weaviate-backups/backup-id', 'status': 'SUCCESS'}

成功的备份恢复
将 Article 类作为 JSON 对象返回

验证还原成功

最后,为了确认备份和还原过程已成功完成,笔记本包含一个步骤来检索“Article”类的架构。此验证可确保正确还原数据和架构。

client.schema.get("Article")

将 Article 类作为 JSON 对象返回

期望:

{'class': 'Article', 'description': 'A class to store articles'... [Truncated]...}

笔记本的每个部分都提供了贯穿 Weaviate 数据管理生命周期的综合指南,从初始设置和数据填充到备份、恢复和验证,所有这些都使用 Weaviate-client 库在 Python 生态系统中执行。

使用 curl 概述流程

到目前为止,我们已经向您展示了如何以 Python 方式执行此操作。我们认为,在 CURL 内部展示如何在不编写脚本的情况下实现相同的操作会很有帮助。

要与 Weaviate 实例交互以执行创建架构、索引数据、执行备份和恢复数据等任务,可以使用特定的 curl 命令。这些命令向 Weaviate 的 REST API 发出 HTTP 请求。例如,要创建架构,需要将包含架构详细信息的 POST 请求发送到 Weaviate 的架构端点。同样,要为数据编制索引,将向对象端点发出具有数据负载的 POST 请求。

备份是通过对备份端点的 POST 请求触发的,还原是通过对还原端点的 POST 请求完成的。其中每个操作都需要相应的 JSON 有效负载,通常在 curl 命令中使用 @ 符号作为文件引用提供。

为了实现 Weaviate,我们当然需要样本数据来处理,这

  1. schema.json 概述了我们要编制索引的数据的结构。

  2. data.json 是我们实际数据发挥作用的地方,其结构与schema.json文件中的类一致。

schema.json 和 data.json 文件位于此处的 MinIO blog-assets 存储库中。

{"classes": [{"class": "Article","description": "A class to store articles","properties": [{"name": "title", "dataType": ["string"], "description": "The title of the article"},{"name": "content", "dataType": ["text"], "description": "The content of the article"},{"name": "datePublished", "dataType": ["date"], "description": "The date the article was published"},{"name": "url", "dataType": ["string"], "description": "The URL of the article"},{"name": "customEmbeddings", "dataType": ["number[]"], "description": "Custom vector embeddings of the article"}]},{"class": "Author","description": "A class to store authors","properties": [{"name": "name", "dataType": ["string"], "description": "The name of the author"},{"name": "articles", "dataType": ["Article"], "description": "The articles written by the author"}]}]
}

文章和作者的示例架构类

schema.json文件概述了要索引的数据的结构,详细说明了类、属性及其数据类型,有效地为如何在 Weaviate 中组织和交互数据奠定了基础。该模式充当 AI 理解和分类传入数据的蓝图,确保向量搜索引擎能够精确和相关地运行。

另一方面,data.json 文件使用实际的数据实例填充此架构,镜像实际应用程序和场景。此示例数据阐明了 Weaviate 搜索功能的潜力,提供了实践经验,展示了如何解决查询以及如何根据 AI 对内容的理解动态生成结果。

data.json

[{"class": "Article","properties": {"title": "LangChain: OpenAI + S3 Loader","content": "This article discusses the integration of LangChain with OpenAI and S3 Loader...","url": "https://blog.minio.org.cn/langchain-openai-s3-loader/","customEmbeddings": [0.4, 0.3, 0.2, 0.1]}},{"class": "Article","properties": {"title": "MinIO Webhook Event Notifications","content": "Exploring the webhook event notification system in MinIO...","url": "https://blog.minio.org.cn/minio-webhook-event-notifications/","customEmbeddings": [0.1, 0.2, 0.3, 0.4]}},{"class": "Article","properties": {"title": "MinIO Postgres Event Notifications","content": "An in-depth look at Postgres event notifications in MinIO...","url": "https://blog.minio.org.cn/minio-postgres-event-notifications/","customEmbeddings": [0.3, 0.4, 0.1, 0.2]}},{"class": "Article","properties": {"title": "From Docker to Localhost","content": "A guide on transitioning from Docker to localhost environments...","url": "https://blog.minio.org.cn/from-docker-to-localhost/","customEmbeddings": [0.4, 0.1, 0.2, 0.3]}}
]

使用 curl 进行设置

架构充当数据管理系统的结构支柱,定义数据的组织、索引和查询方式。

创建 Weaviate Schema

通过一个简单的 curl 命令,并将我们的示例文件本地克隆到我们当前的工作目录;我们可以将schema.json直接发布到 Weaviate,制定我们的数据将遵守的规则和关系。

curl -X POST -H "Content-Type: application/json" \
--data @schema.json http://localhost:8080/v1/schema

CURL:创建

填充架构:为数据编制索引

有了我们的架构,下一步就是用实际数据填充它。使用另一个 curl 命令,我们将data.json索引到架构中。

curl -X POST -H "Content-Type: application/json" \
--data @data.json http://localhost:8080/v1/objects

CURL:索引

确保数据持久性:使用 MinIO 进行备份

我们需要分配一个唯一标识符,或“backup-id”。此标识符不仅有助于精确跟踪和检索备份集,还可以确保每个数据集都受到版本控制。

curl -X POST 'http://localhost:8080/v1/backups/s3' -H 'Content-Type:application/json' -d '{"id": "backup-id","include": ["Article","Author"]
}' 

CURL:备份-s3

期望:
{'backend': 's3', 'classes': ['Article', 'Author'], 'id': 'backup-id', 'path': 's3://weaviate-backups/backup-id', 'status': 'SUCCESS'}

成功的 Backup-S3 响应

此输出的格式为 JSON 对象。它包括使用的后端(在本例中为 ‘s3’ )、备份中包含的类列表 ( ‘Article’ 、 ‘Author’ ‘backup-id’ s3://weaviate-backups/backup-id ‘SUCCESS’

这种结构化的响应不仅确认备份过程已成功完成,而且还提供了可用于将来参考、审核或恢复过程的基本信息。

数据恢复过程

Weaviate 生态系统中数据的恢复是通过结构化的 API 调用来实现的,该调用通过针对 /v1/backups/s3/backup-id/restore 端点的 POST 请求(由 backup-id 标识)。此 curl 调用不仅可以恢复丢失或存档的数据,还可以保持连续性。

curl -X POST 'http://localhost:8080/v1/backups/s3/backup-id/restore' \
-H 'Content-Type:application/json' \
-d '{"id": "backup-id","exclude": ["Author"]
}'

CURL:恢复

期望
{"backend": "s3","classes": ["Article"],"id": "backup-id","path": "s3://weaviate-backups/backup-id","status": "SUCCESS"
}

成功的恢复响应

这些命令中的每一个都应根据您的特定设置和要求进行调整。您可能需要根据需要修改终端节点 URL、数据文件路径和其他参数。此外,请确保必要的文件(schema.json、data.json)和配置在您的环境中可用。

关于 Weaviate 的附加说明

使用 GitOps 实现自动化

通过在 Git 中编纂所有内容,团队可以轻松跟踪更改、回滚到以前的状态并确保跨环境的一致性。GitOps 工作流可以与持续集成/持续部署 (CI/CD) 工具和 Kubernetes 集成,进一步简化容器化应用程序的编排和基础设施管理。我们将在以后的文章中详细介绍如何使用 GitOps 实现自动化。

部分备份和还原

Weaviate 允许备份或恢复特定类,这对于部分数据迁移或开发测试等情况很有用。

多节点备份:对于多节点设置,尤其是在 Kubernetes 环境中,请确保您的配置正确指定了备份模块(如 MinIO 的 backup-s3)和相关环境变量。

故障 排除

如果您在备份或还原期间遇到问题,请检查您的环境变量配置,尤其是与 S3 兼容存储(如 MinIO)的 SSL 设置相关的配置。禁用 SSL ( BACKUP_S3_USE_SSL: false ) 可能会解决某些连接问题。

适用于 Weaviate with MinIO 的强大且可扩展的备份解决方案

当我们结束使用 Docker Compose 将 Weaviate 与 MinIO 集成的探索时,很明显,这种组合不仅仅是一种技术解决方案,而是对数据管理的战略性增强。这种集成完全符合 MinIO 的承诺,即提供可扩展、安全和高性能的数据存储解决方案,现在 Weaviate 的 AI 驱动功能进一步增强了这种解决方案。Docker Compose 的使用进一步简化了这种集成,强调了我们对使复杂技术易于访问和管理的关注。

一如既往,MinIO团队始终致力于推动数据管理领域的创新。我们致力于增强和简化数据的存储、访问和分析方式,这是我们使命的核心。

通过将 Weaviate 的高级矢量数据库功能与 MinIO 提供的强大存储解决方案相结合,用户能够释放其数据的全部潜力。这包括利用语义搜索功能,不仅确保数据的可访问性,而且确保数据在基础层面的安全性。

我们真正受到像您这样敬业和热情的开发人员头脑中涌现的非凡创新的启发。我们非常高兴能提供支持,并成为您探索先进解决方案并在您的数据驱动项目中达到新高度的旅程的一部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/258895.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL学习——14.投光物_点光源

前情提要:本文代码源自Github上的学习文档“LearnOpenGL”,我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动,一切著作权归原作者所有,本文仅供学习交流,如有侵权,请联系我删除。L…

JDK新特性

JDK新特性 函数式接口和Lambda 表达式Stream流操作新日期API操作其他新特性 Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码…

openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优

文章目录 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优222.1 前提条件222.2 内存相关参数设置222.3 网络相关参数设置222.4 I/O相关参数设置 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优 在性能调优过程中,可以根据…

每日OJ题_算法_递归④力扣24. 两两交换链表中的节点

目录 ④力扣24. 两两交换链表中的节点 解析代码 ④力扣24. 两两交换链表中的节点 24. 两两交换链表中的节点 难度 中等 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即…

【设计模式】使用装饰器模式对价格计算功能做灵活的拓展

文章目录 1. 概述2.实现方式2.1.原始商品类及计算接口2.2.加入装饰器2.3.装饰器的组合使用 3.总结 1. 概述 装饰器模式(Decorator Pattern)是一种结构型的设计模式,使用组合的方式来替代了继承,它的核心作用是在不修改对象本身的…

值得收藏的的适用于 Windows 11 的免费数据恢复软件榜单

终于要说到Windows 11了,有太多令人惊叹的功能,让人跃跃欲试。但是,在升级到 Windows 11 或使用 Windows 11 时,人们可能会因计算机问题而导致文件被删除或丢失。这就是为什么需要 Windows 11 的免费文件恢复的原因。这是适用于 W…

Intelij Terminal中文乱码解决

第一: (重启Intelij生效) -Dfile.encodingUTF-8 第二: (重启Intelij生效) 如果还不行,第三: 测试结果很ok:

备战蓝桥杯---图论之最小生成树

首先,什么是最小生成树? 他就是无向图G中的所有生成树中树枝权值总和最小的。 如何求? 我们不妨采用以下的贪心策略: Prim算法(复杂度:(nm)logm): 我们对于把上述的点看成两个集…

《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)

文章目录 10.1 构建微服务架构 - 探索 Go 语言的微观世界10.1.1 基础知识讲解10.1.2 重点案例:订单处理系统订单服务测试服务 10.1.3 拓展案例 1:用户认证服务安装所需的包实现用户模型和存储实现 JWT 生成和验证实现认证服务测试服务 10.1.4 拓展案例 2…

[嵌入式系统-28]:开源的虚拟机监视器和仿真器:QEMU(Quick EMUlator)与VirtualBox、VMware Workstation的比较

目录 一、QEMU概述 1.1 QEMU架构 1.2 QEMU概述 1.3 什么时候需要QEMU 1.4 QEMU两种操作模式 1.5 QEMU模拟多种CPU架构 二、QEMU与其他虚拟机的比较 2.1 常见的虚拟化技术 2.1 Linux KVM 2.2 Windows VirtualBox 2.3 Windows VMware workstation 三、VirtualBox、VM…

C++模板详解 —— 函数模板与类模板

C模板详解 泛型编程函数模板函数模板的概念函数模板的原理 函数模板的实例化函数模板的匹配原则类模板类模板的定义格式类模板的实例化 泛型编程 如果让你编写一个函数,用于两个数的交换。在C语言中,我们会用如下方法: void Swapi(int* p1,…

如何简单上手清华AutoGPT并搭建到本地环境

一、准备工作 安装Docker:确保你的本地机器上已经安装了Docker。如果还没有安装,请访问Docker官方网站并按照指引进行安装。--点击进入Docker官网 获取清华AutoGPT的Docker镜像:清华AutoGPT团队可能已经提供了一个Docker镜像,方便…

用于图像处理的Python顶级库 !!

文章目录 前言 1、OpenCV 2、Scikit-Image 3、Scipy 4、Python Image Library(Pillow / PIL) 5、Matplotlib 6、SimpleITK 7、Numpy 8、Mahotas 前言 正如IDC所指出的,数字信息将飙升至175ZB,而这些信息中的巨大一部分是图片。数…

2.9日学习打卡----初学RabbitMQ(四)

2.9日学习打卡 目录: 2.9日学习打卡一.RabbitMQ 死信队列创建死信队列测试死信队列 二. RabbitMQ 延迟队列延迟队列_死信队列实现RabbitMQ延迟队列_插件实现 三. RabbitMQ集群搭建RabbitMQ集群镜像队列负载均衡 一.RabbitMQ 死信队列 在MQ中,当消息成为死…

php基础学习之可变函数(web渗透测试关键字绕过rce和回调函数)

可变函数 看可变函数的知识点之前,蒟蒻博主建议你先去看看php的可变变量,会更加方便理解,在本篇博客中的第五块知识点->php基础学习之变量-CSDN博客 描述 当一个变量所保存的值刚好是一个函数的名字(由函数命名规则可知该值必…

【复现】某公司指挥调度管理平台 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任务等。用户可以通过该平台发送指令…

AD9361多片同步设计方法

本文基于ZC706FMCOMMS5的平台,介绍了多片AD9361同步的方法。并将该设计移植到自行设计的ZYNQ70354片AD9361(实现8路同步收发)的电路板上。 工程主要特点包括: 本设计采用纯逻辑的方式 1.4片AD9361组合,组成8通道发和8通道收 2.同步相位误差小…

[HTML]Web前端开发技术26(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

PLC-Recorder的延伸分析功能说明

目录 一、缘起 二、如何从PLC-Recorder获取数据 1、在线获取 2、全自主打开数据文件 3、延伸分析 三、设置方法 四、效果展示 一、缘起 在各个行业,在不同的场景中,朋友们拿到数据后,想做的事情五花八门,有做宏观分析的、…

wps使用方法(包括:插入倒三角符号,字母上面加横线,将word中的所有英文设置为time new roman)

倒三角符号 字母上面加横线 将word中的所有英文设置为time new roman ctrla选中全文