使用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.mzph.cn/news/687171.shtml

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

相关文章

单片机学习笔记---直流电机驱动(PWM)

直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器…

ModuleNotFoundError: No module named ‘torchvision.models.utils‘报错的一种解决方法

最近在做一个BEV项目,在配置环境的时候,遇到了报错的一个问题: ModuleNotFoundError: No module named ‘torchvision.models.utils’ 我开始以为是我没有安装torchvision pip install torchvision -i http://pypi.douban.com/simple输入这…

【机器学习笔记】12 聚类

无监督学习概述 监督学习 在一个典型的监督学习中,训练集有标签𝑦 ,我们的目标是找到能够区分正样本和负样本的决策边界,需要据此拟合一个假设函数。无监督学习 与此不同的是,在无监督学习中,我们的数据没…

微服务学习Day4

文章目录 初始MQ同步通讯和异步通讯MQ常见技术介绍 RabbitMQ快速入门入门案例 SpringAMQP介绍例子WorkQueue模型exchange交换机消息转换器 初始MQ 同步通讯和异步通讯 MQ常见技术介绍 RabbitMQ快速入门 入门案例 SpringAMQP 介绍 例子 WorkQueue模型 exchange交换机 消息转换…

【JavaEE】_HTTP请求报头header

目录 1. Host 2. Content-Length与Content-Type 2.1 Content-Length 2.2 Content-Type 3. User-Agent(UA) 4. Referer 5. Cookie header的整体格式是“键值对”结构,一行是一个键值对,这些键值对都是HTTP定义好的、有特殊含…

输入捕获模式测频率PWM输入模式(PWMI)测占空比

一、概念介绍 输出比较: 比较电路输入的CNT、CCR大小关系 ,在通道引脚输出高低电平 二、*频率知识、测量方法补充 * N/fc得到标准频率的时长,也就是待测频率的周期 测频法代码实现:修改对射式红外传感器计次(上升沿…

怎样让MCU/SFU视频会议ovmedia 接入GB28281监控视频参会互动

在国内视频应用对GB监控接入是常规操作,很多系统需要接入监控视频交互处理。我们以ovmedia视频会议为例做一个接入互动。 GB28181协议在流媒体系统较为普及,我们以开源SRS系统对接监控端再接入会议(也可以用商用GB流平台,操作基本…

Open CASCADE学习|分割

目录 1、添加头文件与源文件 GEOMAlgo_Splitter.h GEOMAlgo_Splitter.cpp 2、测试 2.1平面分割立方体 2.2以边分面 2.3以面分面 1、添加头文件与源文件 GEOMAlgo_Splitter.h // Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE//// Copyright (C) 2003-2…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(4)数据准备的流程

今天学习的是数据准备的流程。 我们已经知道,数据准备占了AI项目超过一半甚至79%的时间。 那么数据准备,都做些什么,有哪些流程。 1.数据采集 观测数据人工收集调查问卷线上数据库 2.数据清洗 有缺失的数据有重复的数据有内容错误的数据…

51单片机编程应用(C语言):DS1302实时时钟

单片机计时的缺陷: 1.他的精度不高,没有时钟芯片精度高, 2.会占用单片机CPU的时间, 3.单片机的时钟无法掉电继续运行,(最大的缺点) DS1302芯片内部有备用电池,可以掉电继续计时…

fusion360 操作总结(不断更新)

平移缩放旋转快捷键 画布选择Windows 组合键macOS 组合键平移按住鼠标中键按住鼠标中键缩放滚动鼠标中键滚动鼠标中键动态观察旋转按住 Shift 键并按住鼠标中键按住 Shift 键并按住鼠标中键绕点动态观察按住 Shift 键单击并按住鼠标中键按住 Shift 键单击并按住鼠标中键撤消Ct…

MCU看门狗

目录 一、独立看门狗(IWDG) 1、IWDG 主要作用 2、IWDG 主要特性 3、编程控制 4、注意地方 二、窗口看门狗(WWDG) 1、窗口看门狗作用: 2、窗口看门狗产生复位信号有两个条件: 3、WWDG 框图 4、WWDG 将要复位的时间 5、编程控制 一、独立看门…

STL:优先级队列的实现

STL中优先级队列本质上就是堆。在上一篇博客中讲到过:堆是一种完全二叉树,逻辑结构上看起来像树,但在物理结构中是存储在线性表中。与普通线性表不同的是,堆中数据大小是规律排列的:小堆中每个节点都大于它的父节点&am…

SpringBoot实战:打造企业资产管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

001kafka源码项目gradle报错UnsupportedClassVersionError-kafka-报错-大数据学习

1 报错提示 java.lang.UnsupportedClassVersionError: org/eclipse/jgit/lib/AnyObjectId has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 如…

Linux线程(1)--线程的概念 | 线程控制

目录 前置知识 线程的概念 Linux中对线程的理解 重新定义进程与线程 重谈地址空间 线程的优缺点 线程的优点 线程的缺点 线程异常 线程的用途 Linux线程 VS 进程 线程控制 创建线程 线程等待 线程终止 线程ID的深入理解 前置知识 我们知道一个进程有属于自己的P…

docker (六)-进阶篇-数据持久化最佳实践MySQL部署

容器的数据挂载通常指的是将宿主机(虚拟机或物理机)上的目录或文件挂载到容器内部 MySQL单节点安装 详情参考docker官网文档 1 创建对应的数据目录、日志目录、配置文件目录(参考二进制安装,需自己建立数据存储目录) mkdir -p /data/mysq…

计算机毕业设计springboot_vue房屋租赁系统_ku668

1.掌握Html,Css,JavaScript等基础编程语言。 2.掌握Vue框架,node环境,数据库等知识。 3.掌握开发系统的基本流程。 …

你了解API测试吗?如何充分的测试一个API?

什么是API? API代表应用程序接口。API是软件系统中的中间层,负责数据源与用户看到的图形用户界面(GUI)之间的数据通信。换句话说,API是软件的业务层,它在表示层和数据层之间创建连接。 API测试侧重于所谓的…

2.17C语言学习

P1678 烦恼的高考志愿 写完后发现题解里面用的是优先队列或者二分什么的,其实这个题可以贪心,我们把学校的分数线和学生的成绩分别进行排序,然后从前往后遍历,每次比较当前学校的分数与学生成绩的差距和下一个学校的分数与学生成…