使用 AIStor 和 OpenSearch 增强搜索功能

在这篇文章中,我们将探讨搜索,特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如,如果您正在查看运营数据,如果您的服务似乎是随机的,那么您需要尽可能回溯以识别模式并找出原因。这不仅适用于应用程序,还适用于来自每个可以想象的设备的大量日志,这些日志需要保留合理的时间,以便进行合规性和故障排除。但是,在快速存储(例如 NVMe)上存储数月/数年的可搜索数据可能会占用大量昂贵的驱动器空间。通常,过去几周的数据是搜索最多的,因此存储在最快的硬件上。但随着数据变旧,它对于立即进行故障排除的用处变得不那么大,并且不需要在昂贵的硬件上 - 即使它仍然包含一两个秘密。问题变成了,我们如何在不牺牲性能的情况下快速搜索这些存档数据。是否有可能两全其美?

OpenSearch 中的提示;基于 Apache Lucene 的分布式搜索和分析引擎。将数据添加到 OpenSearch 索引后,您可以对数据执行全文搜索。任何需要搜索的应用程序都有使用 OpenSearch 的用例,例如,您可以使用它来在应用程序中构建搜索功能,DevOps 工程师可以将 OpenSearch 用作日志分析引擎,后端工程师可以通过 OpenTelemetry 等收集器放置跟踪数据,以更好地了解应用程序性能。借助功能丰富的内置搜索和可视化功能,您可以查明基础架构问题(如磁盘空间不足、获取错误状态代码等),并在它们对运营造成严重破坏之前将其显示在控制面板中。但是,随着日志数据的增长,有时将所有数据保存在一个节点甚至单个集群上是不切实际的。我们喜欢 OpenSearch,因为它具有分布式设计,与 AIStor 不同,AIStor 可以并行存储您的数据并处理请求。AIStor 非常简单,只需一个简单的二进制文件即可启动和运行。您可以从笔记本电脑的单节点单驱动器配置开始,然后将其扩展到具有多驱动器、多节点和多站点的生产环境 - 具有您在企业级存储软件中期望的相同功能集。您不仅可以构建分布式 OpenSearch 集群,还可以随着集群的增长细分集群中各个节点的职责。您可以使用具有大磁盘的节点来存储数据,具有大量 RAM 的节点用于索引,以及具有大量 CPU 但较少磁盘的节点来管理集群的状态。

随着数据的增长,您可以将旧数据/存档数据分层到 AIStor 存储桶中,以便保留 SSD/NVMe 存储以存储添加到集群的最新数据。此外,当这些快照存储在 AIStor 存储桶中时,您可以直接搜索它们。从逻辑上讲,在移动快照时,重要的是要考虑到从远程驱动器访问数据比从本地驱动器访问数据慢,因此搜索查询的延迟通常较高,但提高存储效率通常是值得的。使用 AIStor,您可以获得最快的网络对象存储。高速网络上的分布式 AIStor 可以胜过本地存储。与其他速度较慢的对象存储不同,AIStor 可以无缝访问这些快照,就像它们在 OpenSearch 集群上的本地快照一样,从而在几秒钟内根据结果的大小在虹吸日志数据中搜索见解时节省宝贵的时间、网络带宽和团队精力。相比之下,本地还原需要数小时才能执行作,然后才能查询数据。OpenSearch 在与存储分层一起使用时效率更高,这降低了它的总拥有成本,此外,您还可以获得将数据写入 AIStor 的额外好处,这些数据是不可变的、受版本控制的,并且受纠删码保护。此外,将 OpenSearch 分层与 AIStor 对象存储结合使用,使数据文件可供其他云原生机器学习和分析应用程序使用。

基础设施

让我们使用 Docker 设置 OpenSearch 和 AIStor,并介绍一些功能来展示它们的功能。

开放搜索

我们将创建自定义 Docker 映像,因为我们将使用自定义插件构建它以连接到我们的 AIStor 对象存储。

FROM opensearchproject/opensearch:2.8.0ENV MINIO_ACCESS_KEY_ID minioadminENV MINIO_SECRET_ACCESS_KEY minioadminENV MINIO_ENDPOINT minio:9000ENV MINIO_PROTOCOL httpRUN /usr/share/opensearch/bin/opensearch-plugin install --batch repository-s3RUN /usr/share/opensearch/bin/opensearch-keystore createRUN echo $MINIO_ACCESS_KEY_ID | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_keyRUN echo $MINIO_SECRET_ACCESS_KEY | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_keyRUN echo $MINIO_ENDPOINT | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.endpointRUN echo $MINIO_PROTOCOL | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.protocol

构建自定义 Docker 镜像

docker build --tag=opensearch-minio

运行以下 Docker 命令,使用我们之前下载的映像启动容器

docker run -d -p 9200:9200 -p 9600:9600 -v /usr/share/opensearch/data -e "discovery.type=single-node"  opensearch-minio

使用默认的“admin”凭据将 curl 到 localhost 端口 9200,以验证 OpenSearch 是否正在运行

curl https://localhost:9200 -ku 'admin:admin'

您应该会看到类似于下面的输出

{"name" : "a937e018cee5","cluster_name" : "docker-cluster","cluster_uuid" : "GLAjAG6bTeWErFUy_d-CLw","version" : {"distribution" : "opensearch","number" : <version>,"build_type" : <build-type>,"build_hash" : <build-hash>,"build_date" : <build-date>,"build_snapshot" : false,"lucene_version" : <lucene-version>,"minimum_wire_compatibility_version" : "7.10.0","minimum_index_compatibility_version" : "7.0.0"},"tagline" : "The OpenSearch Project: https://opensearch.org/"
}

我们也可以检查容器状态

$ docker container lsCONTAINER ID   IMAGE                                 COMMAND                  CREATED          STATUS          PORTS                                                                NAMESa937e018cee5   opensearch-minio   "./opensearch-docker..."   19 minutes ago   Up 19 minutes   0.0.0.0:9200->9200/tcp, 9300/tcp, 0.0.0.0:9600->9600/tcp, 9650/tcp   stupendous_burt

为 AIStor 设置存储库

为了设置可搜索的快照索引,您需要为 OpenSearch 集群设置一些先决条件和配置。我们将在这里详细介绍它们。

在 ‘opensearch.yaml’ 中,创建一个节点并定义节点角色

node.name: snapshots-node
node.roles: [ search ]

让我们使用“_snapshot”API 注册 AIStor 存储桶

curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository" -H 'Content-Type: application/json' -d'
{"type": "s3","settings": {"bucket": "testbucket123","base_path": "my/snapshot/directory"}
}'

现在我们有了存储库,让我们继续创建一个可搜索的快照。

可搜索快照

为了制作快照,我们需要使用之前创建的存储库进行 API 调用。

curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository/1"

我们来检查一下快照的状态

curl -XGET "http://localhost:9200/_snapshot/my-minio-repository/1"
{"snapshots": [{"snapshot": "1","version": "6.5.4","indices": ["opensearch_dashboards_sample_data_ecommerce","my-index","opensearch_dashboards_sample_data_logs","opensearch_dashboards_sample_data_flights"],"include_global_state": true,"state": "IN_PROGRESS",...}]
}

让我们在 AIStor 端也看看这个快照

root@aj-test-1:~# mc ls testbucket123/my/snapshot/directory
[2023-06-09 17:37:31 UTC] 1.5KiB STANDARD 1/

如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。现在,您一定想知道,“我们已经拍摄了快照,但如何还原它,以便我们可以分析和搜索备份的索引?尽管使用 OpenSearch 非常有可能,但与传统意义上的恢复整个快照不同,我们将向您展示如何在快照仍存储在 AIStor 上时更有效地搜索快照。我们需要做的最重要的配置更改是将 ‘storage_type’ 设置为 'remote_snapshot”。此设置告诉 OpenSearch 快照是将在本地还原以供搜索,还是在存储在 AIStor 上时进行远程搜索。

curl -XPOST "http://localhost:9200/_snapshot/my-minio-repository/1/_restore" -H 'Content-Type: application/json' -d'
{"indices": "opensearch-dashboards*,my-index*","ignore_unavailable": true,"include_global_state": false,"include_aliases": false,"partial": false,"storage_type": "remote_snapshot","rename_pattern": "opensearch-dashboards(.+)","rename_replacement": "restored-opensearch-dashboards$1","index_settings": {"index.blocks.read_only": false},"ignore_index_settings": ["index.refresh_interval"]
}'

让我们列出所有索引,看看是否存在 ‘remote_snapshot’ 类型

curl -XGET "http://localhost:9200/my-index/_settings?pretty"{"my-index": {"settings": {"index": {"store": {"type": "remote_snapshot"}}}}
}

如您所见,将 AIStor 配置为 OpenSearch 远程存储库非常简单。

取回您的日志

通过利用 AIStor 作为 OpenSearch 的后端,您不仅可以拍摄可搜索的快照,还可以创建不可搜索(也称为“本地”)快照,并将其用作定期备份,这些备份可以恢复到其他集群进行灾难恢复,或者使用其他数据进行丰富以进行进一步分析。话虽如此,我们需要了解使用远程存储库作为快照位置的某些潜在陷阱。访问速度或多或少由 AIStor 的速度和性能决定,而 AIStor 通常受网络带宽限制。请注意,在 AWS S3 等公有云中,您可能还需要按请求支付检索费用,因此用户应密切监控产生的任何费用。搜索远程数据有时会影响在同一节点上运行的其他查询的性能。通常建议工程师利用节点角色,并为性能关键型应用程序创建具有搜索角色的专用节点。

在这篇文章中,我们将探讨搜索,特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如,如果您正在查看运营数据,如果您的服务似乎是随机的,那么您需要尽可能回溯以识别模式并找出原因。这不仅适用于应用程序,还适用于来自每个可以想象的设备的大量日志,这些日志需要保留合理的时间,以便进行合规性和故障排除。但是,在快速存储(例如 NVMe)上存储数月/数年的可搜索数据可能会占用大量昂贵的驱动器空间。通常,过去几周的数据是搜索最多的,因此存储在最快的硬件上。但随着数据变旧,它对于立即进行故障排除的用处变得不那么大,并且不需要在昂贵的硬件上 - 即使它仍然包含一两个秘密。问题变成了,我们如何在不牺牲性能的情况下快速搜索这些存档数据。是否有可能两全其美?

OpenSearch 中的提示;基于 Apache Lucene 的分布式搜索和分析引擎。将数据添加到 OpenSearch 索引后,您可以对数据执行全文搜索。任何需要搜索的应用程序都有使用 OpenSearch 的用例,例如,您可以使用它来在应用程序中构建搜索功能,DevOps 工程师可以将 OpenSearch 用作日志分析引擎,后端工程师可以通过 OpenTelemetry 等收集器放置跟踪数据,以更好地了解应用程序性能。借助功能丰富的内置搜索和可视化功能,您可以查明基础架构问题(如磁盘空间不足、获取错误状态代码等),并在它们对运营造成严重破坏之前将其显示在控制面板中。但是,随着日志数据的增长,有时将所有数据保存在一个节点甚至单个集群上是不切实际的。我们喜欢 OpenSearch,因为它具有分布式设计,与 AIStor 不同,AIStor 可以并行存储您的数据并处理请求。AIStor 非常简单,只需一个简单的二进制文件即可启动和运行。您可以从笔记本电脑的单节点单驱动器配置开始,然后将其扩展到具有多驱动器、多节点和多站点的生产环境 - 具有您在企业级存储软件中期望的相同功能集。您不仅可以构建分布式 OpenSearch 集群,还可以随着集群的增长细分集群中各个节点的职责。您可以使用具有大磁盘的节点来存储数据,具有大量 RAM 的节点用于索引,以及具有大量 CPU 但较少磁盘的节点来管理集群的状态。

随着数据的增长,您可以将旧数据/存档数据分层到 AIStor 存储桶中,以便保留 SSD/NVMe 存储以存储添加到集群的最新数据。此外,当这些快照存储在 AIStor 存储桶中时,您可以直接搜索它们。从逻辑上讲,在移动快照时,重要的是要考虑到从远程驱动器访问数据比从本地驱动器访问数据慢,因此搜索查询的延迟通常较高,但提高存储效率通常是值得的。使用 AIStor,您可以获得最快的网络对象存储。高速网络上的分布式 AIStor 可以胜过本地存储。与其他速度较慢的对象存储不同,AIStor 可以无缝访问这些快照,就像它们在 OpenSearch 集群上的本地快照一样,从而在几秒钟内根据结果的大小在虹吸日志数据中搜索见解时节省宝贵的时间、网络带宽和团队精力。相比之下,本地还原需要数小时才能执行作,然后才能查询数据。OpenSearch 在与存储分层一起使用时效率更高,这降低了它的总拥有成本,此外,您还可以获得将数据写入 AIStor 的额外好处,这些数据是不可变的、受版本控制的,并且受纠删码保护。此外,将 OpenSearch 分层与 AIStor 对象存储结合使用,使数据文件可供其他云原生机器学习和分析应用程序使用。

基础设施

让我们使用 Docker 设置 OpenSearch 和 AIStor,并介绍一些功能来展示它们的功能。

开放搜索

我们将创建自定义 Docker 映像,因为我们将使用自定义插件构建它以连接到我们的 AIStor 对象存储。

FROM opensearchproject/opensearch:2.8.0ENV MINIO_ACCESS_KEY_ID minioadminENV MINIO_SECRET_ACCESS_KEY minioadminENV MINIO_ENDPOINT minio:9000ENV MINIO_PROTOCOL httpRUN /usr/share/opensearch/bin/opensearch-plugin install --batch repository-s3RUN /usr/share/opensearch/bin/opensearch-keystore createRUN echo $MINIO_ACCESS_KEY_ID | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.access_keyRUN echo $MINIO_SECRET_ACCESS_KEY | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.secret_keyRUN echo $MINIO_ENDPOINT | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.endpointRUN echo $MINIO_PROTOCOL | /usr/share/opensearch/bin/opensearch-keystore add --stdin s3.client.default.protocol

构建自定义 Docker 镜像

docker build --tag=opensearch-minio

运行以下 Docker 命令,使用我们之前下载的映像启动容器

docker run -d -p 9200:9200 -p 9600:9600 -v /usr/share/opensearch/data -e "discovery.type=single-node"  opensearch-minio

使用默认的“admin”凭据将 curl 到 localhost 端口 9200,以验证 OpenSearch 是否正在运行

curl https://localhost:9200 -ku 'admin:admin'

您应该会看到类似于下面的输出

{"name" : "a937e018cee5","cluster_name" : "docker-cluster","cluster_uuid" : "GLAjAG6bTeWErFUy_d-CLw","version" : {"distribution" : "opensearch","number" : <version>,"build_type" : <build-type>,"build_hash" : <build-hash>,"build_date" : <build-date>,"build_snapshot" : false,"lucene_version" : <lucene-version>,"minimum_wire_compatibility_version" : "7.10.0","minimum_index_compatibility_version" : "7.0.0"},"tagline" : "The OpenSearch Project: https://opensearch.org/"
}

我们也可以检查容器状态

$ docker container lsCONTAINER ID   IMAGE                                 COMMAND                  CREATED          STATUS          PORTS                                                                NAMESa937e018cee5   opensearch-minio   "./opensearch-docker..."   19 minutes ago   Up 19 minutes   0.0.0.0:9200->9200/tcp, 9300/tcp, 0.0.0.0:9600->9600/tcp, 9650/tcp   stupendous_burt

为 AIStor 设置存储库

为了设置可搜索的快照索引,您需要为 OpenSearch 集群设置一些先决条件和配置。我们将在这里详细介绍它们。

在 ‘opensearch.yaml’ 中,创建一个节点并定义节点角色

node.name: snapshots-node
node.roles: [ search ]

让我们使用“_snapshot”API 注册 AIStor 存储桶

curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository" -H 'Content-Type: application/json' -d'
{"type": "s3","settings": {"bucket": "testbucket123","base_path": "my/snapshot/directory"}
}'

现在我们有了存储库,让我们继续创建一个可搜索的快照。

可搜索快照

为了制作快照,我们需要使用之前创建的存储库进行 API 调用。

curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository/1"

我们来检查一下快照的状态

curl -XGET "http://localhost:9200/_snapshot/my-minio-repository/1"
{"snapshots": [{"snapshot": "1","version": "6.5.4","indices": ["opensearch_dashboards_sample_data_ecommerce","my-index","opensearch_dashboards_sample_data_logs","opensearch_dashboards_sample_data_flights"],"include_global_state": true,"state": "IN_PROGRESS",...}]
}

让我们在 AIStor 端也看看这个快照

root@aj-test-1:~# mc ls testbucket123/my/snapshot/directory
[2023-06-09 17:37:31 UTC] 1.5KiB STANDARD 1/

如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。如上所示,我们在 AIStor 存储桶中使用 OpenSearch API 拍摄的快照副本。现在,您一定想知道,“我们已经拍摄了快照,但如何还原它,以便我们可以分析和搜索备份的索引?尽管使用 OpenSearch 非常有可能,但与传统意义上的恢复整个快照不同,我们将向您展示如何在快照仍存储在 AIStor 上时更有效地搜索快照。我们需要做的最重要的配置更改是将 ‘storage_type’ 设置为 'remote_snapshot”。此设置告诉 OpenSearch 快照是将在本地还原以供搜索,还是在存储在 AIStor 上时进行远程搜索。

curl -XPOST "http://localhost:9200/_snapshot/my-minio-repository/1/_restore" -H 'Content-Type: application/json' -d'
{"indices": "opensearch-dashboards*,my-index*","ignore_unavailable": true,"include_global_state": false,"include_aliases": false,"partial": false,"storage_type": "remote_snapshot","rename_pattern": "opensearch-dashboards(.+)","rename_replacement": "restored-opensearch-dashboards$1","index_settings": {"index.blocks.read_only": false},"ignore_index_settings": ["index.refresh_interval"]
}'

让我们列出所有索引,看看是否存在 ‘remote_snapshot’ 类型

curl -XGET "http://localhost:9200/my-index/_settings?pretty"{"my-index": {"settings": {"index": {"store": {"type": "remote_snapshot"}}}}
}

如您所见,将 AIStor 配置为 OpenSearch 远程存储库非常简单。

取回您的日志

通过利用 AIStor 作为 OpenSearch 的后端,您不仅可以拍摄可搜索的快照,还可以创建不可搜索(也称为“本地”)快照,并将其用作定期备份,这些备份可以恢复到其他集群进行灾难恢复,或者使用其他数据进行丰富以进行进一步分析。话虽如此,我们需要了解使用远程存储库作为快照位置的某些潜在陷阱。访问速度或多或少由 AIStor 的速度和性能决定,而 AIStor 通常受网络带宽限制。请注意,在 AWS S3 等公有云中,您可能还需要按请求支付检索费用,因此用户应密切监控产生的任何费用。搜索远程数据有时会影响在同一节点上运行的其他查询的性能。通常建议工程师利用节点角色,并为性能关键型应用程序创建具有搜索角色的专用节点。

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

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

相关文章

java基础学习

java基础 面向对象三大特性 特性&#xff1a;封装、继承、多态&#xff1b; 封装&#xff1a;对抽象的事物抽象化成一个对象&#xff0c;并对其对象的属性私有化&#xff0c;同时提供一些能被外界访问属性的方法&#xff1b; 继承&#xff1a;子类扩展新的数据域或功能&#…

MySQL | MySQL库、表的基本操作01

MySQL库、表的基本操作01 一、库操作1.1 查看数据库1.2 创建数据库1.3 选择数据库1.4 查看创建数据库的SQL语句1.5 修改数据库1.6 删除数据库 二、表操作2.1 创建数据表2.2 查看表2.3 查看表结构2.4 查看创建数据库的SQL语句2.5 修改表2.6 删除表 ⚠️MySQL版本 8.0 一、库操作…

设备唯一ID获取,支持安卓/iOS/鸿蒙Next(uni-device-id)UTS插件

设备唯一ID获取 支持安卓/iOS/鸿蒙(uni-device-id)UTS插件 介绍 获取设备唯一ID、设备唯一标识&#xff0c;支持安卓&#xff08;AndroidId/OAID/IMEI/MEID/MacAddress/Serial/UUID/设备基础信息&#xff09;,iOS&#xff08;Identifier/UUID&#xff09;&#xff0c;鸿蒙&am…

正点原子[第三期]Arm(iMX6U)Linux系统移植和根文件系统构建-5.3 xxx_defconfig过程

前言&#xff1a; 本文是根据哔哩哔哩网站上“arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用&#xff1a; …

力扣热题 100:哈希专题三道题详细解析(JAVA)

文章目录 一、两数之和1. 题目描述2. 示例3. 解题思路4. 代码实现&#xff08;Java&#xff09;5. 复杂度分析 二、字母异位词分组1. 题目描述2. 示例3. 解题思路4. 代码实现&#xff08;Java&#xff09;5. 复杂度分析 三、最长连续序列1. 题目描述2. 示例3. 解题思路4. 代码实…

嵌入式八股文(五)硬件电路篇

一、名词概念 1. 整流和逆变 &#xff08;1&#xff09;整流&#xff1a;整流是将交流电&#xff08;AC&#xff09;转变为直流电&#xff08;DC&#xff09;。常见的整流电路包括单向整流&#xff08;二极管&#xff09;、桥式整流等。 半波整流&#xff1a;只使用交流电的正…

AI2-THOR环境下实现机器人导航、物体定位与抓取

1. 依赖安装 pip install ai2thor pip install numpy pillow opencv-python2. 验证安装 # 运行测试脚本验证安装 test_thor.py from ai2thor.controller import Controller controller Controller(scene"FloorPlan1") controller.step(action"MoveAhead"…

Nginx(详解以及如何使用)

目录 1. 什么是Nginx&#xff1f; 2. 为什么使用nginx? 3. 安装nginx 3.1?安装nginx的依赖插件 3.2 下载nginx ?3.3?创建一个目录作为nginx的安装路径 ?3.4?解压 ?3.5?进入解压后的目录 3.6?指定nginx的安装路径 ?3.7?编译和安装nginx 3.8 启动nginx ?…

【自动化脚本工具】Hammerspoon (Mac)

目录 1. 介绍Hammerspoon 1. 介绍Hammerspoon This is a tool for powerful automation of OS X. At its core, Hammerspoon is just a bridge between the operating system and a Lua scripting engine. What gives Hammerspoon its power is a set of extensions that expo…

2025 PHP授权系统网站源码

2025 PHP授权系统网站源码 安装教程&#xff1a; PHP7.0以上 先上传源码到服务器&#xff0c;然后再配置伪静态&#xff0c; 访问域名根据操作完成安装&#xff0c; 然后配置伪静态规则。 Ngix伪静态规则&#xff1a; location / { if (!-e $request_filename) { rewrite …

Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用

功能预览 一、工具简介 PDF 分割工具支持以下核心功能: 拖放或上传 PDF 文件:用户可以通过拖放或点击上传 PDF 文件。两种分割模式: 指定范围:用户可以指定起始页和结束页,提取特定范围的内容。固定间距:用户可以设置间隔页数(例如每 5 页分割一次),工具会自动完成分…

基于SpringBoot的民宿管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

调用click.getchar()时Windows PyCharm无法模拟键盘输入

文章目录 问题描述解决方案参考文献 问题描述 调用 click.getchar() 时&#xff0c;Windows PyCharm 无法模拟键盘输入 解决方案 Run → Edit Configurations… → Modify options → Emulate terminal in output console 参考文献 Terminal emulator | PyCharm Documentati…

hugging face---transformers包

一、前言 不同于计算机视觉的百花齐放&#xff0c;不同网络适用不同情况&#xff0c;NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构&#xff0c;transformers库是hugging face社区创造的一个py库&#xff0c;通过该库可以实现统一…

AI大模型学习(四): LangChain(三)

Langchain构建代理 语言模型本身无法执行动作,他们只能输出文本,代理是使用大型语言模型(LLM)作为推理引擎来确定要执行的操作以及这些操作的输入应该是什么,然后这些操作的结果可以反馈到代理中,代理将决定是否需要更多的操作,或者是否可以结束 例如:我们想要查询现在北京的…

企业知识管理平台重构数字时代知识体系与智能服务网络

内容概要 现代企业知识管理平台的演进呈现出全生命周期管理与智能服务网络构建的双重特征。通过四库体系&#xff08;知识采集库、加工库、应用库、评估库&#xff09;的协同运作&#xff0c;该系统实现了从知识沉淀、结构化处理到价值释放的完整闭环。其中&#xff0c;知识图…

(二)趣学设计模式 之 工厂方法模式!

目录 一、 啥是工厂方法模式&#xff1f;二、 为什么要用工厂方法模式&#xff1f;三、 工厂方法模式怎么实现&#xff1f;四、 工厂方法模式的应用场景五、 工厂方法模式的优点和缺点六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博…

详细介绍嵌入式硬件设计

嵌入式硬件设计详解 一、嵌入式硬件设计核心概念 嵌入式硬件设计是针对特定应用场景&#xff0c;将处理器、存储器、外设接口等电子元件集成到电路板上&#xff0c;实现特定功能的系统开发过程。其核心目标是 高可靠性、低功耗、小体积 和 成本优化。 二、设计流程与关键步骤 …

goredis常见基础命令

基本操作 //删除键 exists,err: rdb.Exists(ctx,"key").Result() if err!nil{panic(err) } if exists>0{err rdb.Del(ctx,"key").Err()if err!nil{panic(err)} }string类型 //设置一个键值对 //0表示没有过期时间 err:rdb.Set(ctx,"key1",…

微服务环境搭建架构介绍(附超清图解源代码)

微服务介绍 系统架构演变 随着互联网的发展&#xff0c;网站应用的规模也在不断的扩大&#xff0c;进而导致系统架构也在不断的进行变化。 从互联网早起到现在&#xff0c;系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布 式架构--->SOA架构…