Elasticsearch:使用 MongoDB connector 同步数据到 Elasticsearch

news2024/11/23 22:38:12

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。Elasticsearch 是一个高效强大的大数据搜索引擎。它的 Speed, Scale 及 Relevance 是很多数据库不具有的。通过 Elasticsearch 的高效搜索引擎,我们可以快速地搜索相关的内容,我们也可以使用 Kibana 所提供的可视化为数据提供洞察。在今天的文章中,我将介绍如何把 MongoDB 里的数据同步到 Elasticsearch。我将展示如何使用 MongoDB connector 来实现这个功能。

在今天的练习中,我将使用如下的架构:

如上所示,我们把 MongoDB 里的数据集通过 MongoDB 连接器同步到 Elasticsearch 中。在今天的展示中,我将使用 Elastic Stack 8.13.2 来进行展示。

安装

MongoDB

我们可以按照链接来进行安装。我们在 Ubuntu OS 22.04 上进行安装。

在终端中,如果尚未安装,安装 gnupg 和 curl:

sudo apt-get install gnupg curl

要导入 MongoDB 的公共 GPG 密钥,请运行以下命令:

curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
   sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
   --dearmor

创建一个 MongoDB 的列表文件。为你的 Ubuntu 版本创建列表文件 /etc/apt/sources.list.d/mongodb-org-7.0.list

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

发出以下命令以重新加载本地软件包数据库:

sudo apt-get update

你可以安装 MongoDB 的最新稳定版本,也可以安装特定版本的 MongoDB。

sudo apt-get install -y mongodb-org

我们需要针对 MongoDB 进行配置:

/etc/mongod.conf

我们可以使用如下的命令来启动 mongodb:

sudo service mongod start

我们可以使用如下的命令来查看 mongodb 的状态:

service mongod status

我们可以使用如下的命令来创建一个数据库:

mongosh 192.168.0.9
parallels@ubuntu2204:~$ mongosh 192.168.0.9 
Current Mongosh Log ID:	661fc4d5b790b167823b9273
Connecting to:		mongodb://192.168.0.9:27017/?directConnection=true&appName=mongosh+2.2.4
Using MongoDB:		7.0.8
Using Mongosh:		2.2.4

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2024-04-17T20:40:52.680+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
   2024-04-17T20:40:53.345+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
   2024-04-17T20:40:53.345+08:00: vm.max_map_count is too low
------

test> use mydatabase
switched to db mydatabase
mydatabase> show dbs
admin   40.00 KiB
config  12.00 KiB
local   40.00 KiB
mydatabase> db.mycol.insert({"name":"liuxg"})
DeprecationWarning: Collection.insert() is deprecated. Use insertOne, insertMany, or bulkWrite.
{
  acknowledged: true,
  insertedIds: { '0': ObjectId('661fc5a3b790b167823b9274') }
}
mydatabase> show dbs
admin       40.00 KiB
config      12.00 KiB
local       40.00 KiB
mydatabase   8.00 KiB
mydatabase> 
mydatabase> db.posts.insertOne({
...   title: "Post Title 1",
... })
{
  acknowledged: true,
  insertedId: ObjectId('6627ac96b790b167823b9275')
}
mydatabase> show dbs
admin       40.00 KiB
config      72.00 KiB
local       40.00 KiB
mydatabase  48.00 KiB
mydatabase> show dbs
admin       40.00 KiB
config      72.00 KiB
local       40.00 KiB
mydatabase  48.00 KiB
mydatabase> show collections
mycol
posts
mydatabase> show tables
mycol
posts
mydatabase> db.posts.find()
[
  { _id: ObjectId('6627ac96b790b167823b9275'), title: 'Post Title 1' }
]

在默认的情况下,MongoDB 的安装是没有任何安全的。我们可以参考链接来配置 MongoDB 的安全。我们必须使用如下的步骤来进行:

  1. 创建管理用户。这个需要针对 admin 数据库来操作
  2. 启动安全,并为自己的数据库创建用户

我们首先为 admin 数据库添加一个用户:liuxg/password:

use admin
db.createUser(
  {
    user: "liuxg",
    pwd: "password",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

如果你想在运行时设置密码,你可以使用如下的命令:

use admin
db.createUser(
  {
    user: "liuxg",
    pwd: passwordPrompt(),
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
$ mongosh mongodb://192.168.0.9:27017 
Current Mongosh Log ID:	6629cb4422076463783b9273
Connecting to:		mongodb://192.168.0.9:27017/?directConnection=true&appName=mongosh+2.2.4
Using MongoDB:		7.0.8
Using Mongosh:		2.2.4

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2024-04-25T11:17:14.139+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
   2024-04-25T11:17:14.980+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
   2024-04-25T11:17:14.980+08:00: vm.max_map_count is too low
------

test> use admin
switched to db admin
admin> db.createUser(
...   {
...     user: "liuxg",
...     pwd: "password",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
...   }
... )
{ ok: 1 }

我们接下来退出来。我们需要配置 MongoDB。我们找到配置文件 /etc/mongodb.conf

/etc/mongodb.conf

我们需要启动安全。修改完毕后,我们再次使用如下的命令来启动 MongodDB:

parallels@ubuntu2204:~$ sudo vi /etc/mongod.conf 
parallels@ubuntu2204:~$ sudo service mongod restart
parallels@ubuntu2204:~$ service mongod status
● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-04-25 11:21:10 CST; 2s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 58182 (mongod)
     Memory: 169.9M
        CPU: 897ms
     CGroup: /system.slice/mongod.service
             └─58182 /usr/bin/mongod --config /etc/mongod.conf

我们再次使用如下的命令来进行 CLI:

parallels@ubuntu2204:~$ mongosh mongodb://192.168.0.9:27017 
Current Mongosh Log ID:	6629cc5699b3c8d57d3b9273
Connecting to:		mongodb://192.168.0.9:27017/?directConnection=true&appName=mongosh+2.2.4
Using MongoDB:		7.0.8
Using Mongosh:		2.2.4

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test> use mydatabase
switched to db mydatabase
mydatabase> db.posts.find({})
MongoServerError[Unauthorized]: Command find requires authentication
mydatabase> db.auth("liuxg", "password")
MongoServerError[AuthenticationFailed]: Authentication failed.
mydatabase> use admin
switched to db admin
admin> db.posts.find({})
MongoServerError[Unauthorized]: Command find requires authentication
admin> use admin
already on db admin
admin> db.auth("liuxg", "password")
{ ok: 1 }
admin> use mydatabase
switched to db mydatabase
mydatabase> db.createUser(
...   {
...     user: "elastic",
...     pwd: "123456",
...     roles: [ { role: "readWrite", db: "mydatabase" } ]
...   }
... )

如果我们没有使用 db.auth 来进行验证,那么我们不能针对 mydatabase 进行任何的操作。我们验证成功后,就可以为 mydatabase 进行创建用户。如上所示,我们创建了一个叫做 elastic/123456 的用户。

我们也可以通过 elastic/123456 来进行验证:

parallels@ubuntu2204:~$ mongosh mongodb://192.168.0.9:27017 
Current Mongosh Log ID:	663a2db6f8be5e933f99ea71
Connecting to:		mongodb://192.168.0.9:27017/?directConnection=true&appName=mongosh+2.2.5
Using MongoDB:		7.0.8
Using Mongosh:		2.2.5

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test> use mydatabase
switched to db mydatabase
mydatabase> db.auth("elastic", "password")
MongoServerError[AuthenticationFailed]: Authentication failed.
mydatabase> db.auth("elastic", "123456")
{ ok: 1 }
mydatabase> show tables
mycol
posts

Java 安装

你需要安装 Java。版本在 Java 8 或者 Java 11。我们可以参考链接来查找需要的 Java 版本。

Elasticsearch

我们可参考我之前的文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 来安装 Elasticsearch。特别地,我们需要按照 Elastic Stack 8.x 的安装指南来进行安装。

在 Elasticsearch 终端输出中,找到 elastic 用户的密码和 Kibana 的注册令牌。 这些是在 Elasticsearch 第一次启动时打印的。

我们记下这个密码,并在下面的配置中进行使用。同时它也会生成相应的证书文件:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.13.2/config/certs
$ ls
http.p12      http_ca.crt   transport.p12

保存密码、注册令牌和证书路径名。 你将在后面的步骤中需要它们。如果你对这些操作还不是很熟的话,请参考我之前的文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单”。

安装 Kibana

我们接下来安装 Kibana。我们可以参考我之前的文章 “如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana” 来进行我们的安装。特别地,我们需要安装 Kibana 8.2 版本。如果你还不清楚如何安装 Kibana 8.2,那么请阅读我之前的文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单”。在启动 Kibana 之前,我们可以修改 Kibana 的配置文件如下。添加如下的句子到 config/kibana.yml 中去:

config/kibana.yml

enterpriseSearch.host: http://localhost:3002

Enterprise search 安装

我们在地址 Download Elastic Enterprise Search | Elastic 找到我们需要的版本进行下载。并按照页面上相应的指令来进行按照。如果你想针对你以前的版本进行安装的话,请参阅地址 https://www.elastic.co/downloads/past-releases#app-search。

等我们下载完 Enterprise Search 的安装包,我们可以使用如下的命令来进行解压缩:

$ pwd
/Users/liuxg/elastic
$ ls
elastic-agent-8.13.2-darwin-aarch64.tar.gz kibana-8.13.2
elasticsearch-8.13.2                       kibana-8.13.2-darwin-aarch64.tar.gz
elasticsearch-8.13.2-darwin-aarch64.tar.gz logstash-8.13.2-darwin-aarch64.tar.gz
enterprise-search-8.13.2.tar.gz            metricbeat-8.13.2-darwin-aarch64.tar.gz
filebeat-8.13.2-darwin-aarch64.tar.gz
$ tar xzf enterprise-search-8.13.2.tar.gz 
$ cd enterprise-search-8.13.2
$ ls
LICENSE    NOTICE.txt README.md  bin        config     lib        metricbeat

如上所示,它含有一个叫做 config 的目录。我们在启动  Enterprise Search 之前,必须做一些相应的配置。我们需要修改 config/enterprise-search.yml 文件。在这个文件中添加如下的内容:

config/enterprise-search.yml

allow_es_settings_modification: true
# secret_management.encryption_keys: ['q3t6w9z$C&F)J@McQfTjWnZr4u7x!A%D']
elasticsearch.username: elastic
elasticsearch.password: "VDMlz5QnM_0g-349fFq7"
elasticsearch.host: https://127.0.0.1:9200
elasticsearch.ssl.enabled: true
elasticsearch.ssl.certificate_authority: /Users/liuxg/elastic/elasticsearch-8.13.2/config/certs/http_ca.crt
kibana.external_url: http://localhost:5601

在上面,请注意 elasticsearch.password 是我们在 Elasticsearch 安装过程中生成的密码。elasticsearch.ssl.certificate_authority 必须根据自己的 Elasticsearch 安装路径中生成的证书进行配置。在上面的配置中,如果我们还没有配置 secret_management.encryption_keys。我们可以使用上面的配置先运行,然后让系统帮我们生成。在配置上面的密码时,我们需要添加上引号。我发现在密码中含有 * 字符会有错误的信息。我们使用如下的命令来启动:

bin/enterprise-search

allow_es_settings_modification: true
# secret_management.encryption_keys: ['q3t6w9z$C&F)J@McQfTjWnZr4u7x!A%D']
secret_management.encryption_keys: [8641aa589cf5d6a90250e25a875eeda20052f049999e3f31f9265c7444ad703a]
elasticsearch.username: elastic
elasticsearch.password: "VDMlz5QnM_0g-349fFq7"
elasticsearch.host: https://127.0.0.1:9200
elasticsearch.ssl.enabled: true
elasticsearch.ssl.certificate_authority: /Users/liuxg/elastic/elasticsearch-8.13.2/config/certs/http_ca.crt
kibana.external_url: http://localhost:5601

我们再次运行:

bin/enterprise-search

allow_es_settings_modification: true
# secret_management.encryption_keys: ['q3t6w9z$C&F)J@McQfTjWnZr4u7x!A%D']
secret_management.encryption_keys: [8641aa589cf5d6a90250e25a875eeda20052f049999e3f31f9265c7444ad703a]
elasticsearch.username: elastic
elasticsearch.password: "VDMlz5QnM_0g-349fFq7"
elasticsearch.host: https://127.0.0.1:9200
elasticsearch.ssl.enabled: true
elasticsearch.ssl.certificate_authority: /Users/liuxg/elastic/elasticsearch-8.13.2/config/certs/http_ca.crt
kibana.external_url: http://localhost:5601


secret_session_key: f5b111b4272b3593c08599a4dfd236676e2b74ece5c805eef19e528d4c5191e950b62c5499384d0690ffdef52d31e03a5cd23c49718531aa3a2f59aa80ff40d2
feature_flag.elasticsearch_search_api: true

为了能够使得我们能够在 App Search 中使用 Elasticsearch 搜索,我们必须设置
feature_flag.elasticsearch_search_api: true。 我们再次重新启动 enterprise search:

再次重新启动:

bin/enterprise-search

这次启动后,我们再也不会看到任何的配置输出了。这样我们的 enterprise search 就配置好了。

至此我们的安装已经完成了。

同步数据到 Elasticsearch

我们登录到 Kibana,然后转到 Search -> Content -> Indices -> Create a new index

我们接下来创建一个 Connector:

接下来,我们需要按照 Kibana 中的指示来进行操作:

我们首先需要申请一个 API key:

我们需要克隆 elastic/connectors 仓库:

git clone https://github.com/elastic/connectors

我们进入到该仓库代码的根目录下,并把 config.yml.example 文件拷贝到 config.yml 文件中。我们也同时拷贝 Elasticsearch 的证书到这个目录下:

$ pwd
/Users/liuxg/python/connectors
$ ls
Dockerfile                 catalog-info.yaml          requirements
Dockerfile.ftest           config.yml.example         resources
LICENSE                    connectors                 scripts
MANIFEST.in                docs                       setup.py
Makefile                   logo-enterprise-search.png tests
NOTICE.txt                 pyrightconfig.json
README.md                  pytest.ini
$ cp config.yml.example config.yml
$ cp ~/elastic/elasticsearch-8.13.2/config/certs/http_ca.crt .

config.yml

connectors:
-
  connector_id: "7V37Do8Bjfz0jsfahzL3"
  service_type: "mongodb"
elasticsearch:
  host: "https://192.168.0.3:9200"
  api_key: "N2wzX0RvOEJqZnowanNmYWhqS0k6eVZtSDJMVFFRRS1UZjFacWI2eUhPUQ=="
  ssl: true
  username: "elastic"
  password: "VDMlz5QnM_0g-349fFq7"  
  ca_certs: "/usr/share/certs/http_ca.crt"

service:
  idling: 30
  heartbeat: 300
  max_errors: 20
  max_errors_span: 600
  max_concurrent_content_syncs: 1
  max_concurrent_access_control_syncs: 1
  job_cleanup_interval: 300
  log_level: INFO


sources:
  mongodb: connectors.sources.mongo:MongoDataSource

你需要根据自己的配置进行相应的修改。请注意上面的 connector_id 需要根据上面界面生成的值进行相应的修改。

根据链接的描述,我们有两种方法来进行部署。我们选择使用 docker 来进行部署。我们在刚才创建的 config.yml 目录下进行运行:

docker run \
-v ~/python/connectors:/config \
--volume="$PWD/http_ca.crt:/usr/share/certs/http_ca.crt:ro" \
--rm \
--tty -i \
--network host \
docker.elastic.co/enterprise-search/elastic-connectors:8.13.0.0-SNAPSHOT \
/app/bin/elastic-ingest \
-c /config/config.yml

运行完上面的命令后,我们可以在 Kibana 中看到:

上面显示我们的 connector 已经成功地连接了。

我们也可以使用自己数据库上的账号:

在进行下面的同步之前,我们可以先创建一个索引 test,当然也可以使用之前创建的 mydatabase:

一旦配置完毕,我们可以看到如下的画面:

点击上面的 Sync 按钮:

等 Sync 完毕后,我们可以在 Docker 的 terminal 中看到如下的画面:

我们可以到 Kibana 中进行查看文件:

GET test/_search

我们可以看到 test 现在含有通过过来的文档。

好了,现在我们已经完成了从 MongoDB 到 Elasticsearch 的同步了。我们可以很方便地把 MongoDB 的数据通过 Connector 同步到 Elasticsearch。希望这篇文章对大家的开发有所帮助。

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

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

相关文章

嵌入式开发常见概念简介

目录 0. 《STM32单片机自学教程》专栏总纲 API Handle(句柄) 0. 《STM32单片机自学教程》专栏总纲 本文作为专栏《STM32单片机自学教程》专栏其中的一部分,返回专栏总纲,阅读所有文章,点击Link: STM32单片机自学教程-[目录总纲]_stm32 学习-CSD…

linux下载压缩包

比如我要下载的压缩包地址为: http://calvin.inf.ed.ac.uk/wp-content/uploads/data/cocostuffdataset/cocostuff-10k-v1.1.zip 1.创建文件夹并切换到这个目录下 2.用wget获取压缩包 压缩包下好了 3.解压 如果是 tar.gz包解压 tar -zxvf 也可以解压到具体的目录…

Redis(持久化)

文章目录 1.RDB1.介绍2.RDB执行流程3.持久化配置1.Redis持久化的文件是dbfilename指定的文件2.配置基本介绍1.进入redis配置文件2.搜索dbfilename,此时的dump.rdb就是redis持久化的文件3.搜索dir,每次持久化文件,都会在启动redis的当前目录下…

Java集合 总结篇(全)

Java集合 集合底层框架总结 List 代表的有序,可重复的集合。 ArrayList -- 数组 -- 把他想象成C中的Vector就可以,当数组空间不够的时候,会自动扩容。 -- 线程不安全 LinkedList -- 双向链表 -- 可以将他理解成一个链表,不支持…

Error Code: 1449. The user specified as a definer (‘admin‘@‘%‘) does not exist

前言 在进行MySQL数据库迁移或存储过程部署时,您可能会遇到错误 [Err] 1449 - The user specified as a definer (admin%) does not exist。这篇文章将为您提供一个详细的解决方案,帮助您顺利解决这一问题。 错误背景 此错误通常发生在尝试执行一个存…

Autosar PNC网络管理配置-UserData的使用

文章目录 前言ComComSignalComIPdu CanNmSignal Mapping总结 前言 之前配置的网络管理报文中的data都由ComM管理,后面客户新增了需求,最后两个byte需要发送Wakeup Reason,本文记录一下相关配置的修改 Com ComSignal 之前配置的PN_TX&…

leetcode-字符串的排列-100

题目要求 思路 1.因为只涉及到字符,因此可以进行排序 2.创建临时字符串,当临时字符串temp的长度等于str的长度,作为判出条件。 3.创建一个标记的数组,每次在temp中插入一个字符,便在对应的数组下标设置为1&#xff0c…

cmake install命令无法覆盖同名文件

文章目录 1. 问题记录2. 原因排查3. 解决方案 1. 问题记录 我有两个同名文件test.txt,它们内容不同,但时间戳相同(文件属性中的修改时间相同) 我希望在cmake中利用install命令,将${PATH_SRC}/test.txt替换${PATH_DES…

数据仓库项目---Day01

文章目录 框架的安装包数据仓库概念项目需求及架构设计项目需求分析项目框架技术选型系统数据流程设计框架版本选型集群资源规划设计 数据生成模块数据埋点主流埋点方式埋点数据上报时机 服务器和JDK准备搭建三台Linux虚拟机(VMWare)编写集群分发脚本xsyncSSH无密登录配置JDK准…

《十九》Qt Http协议及实战

前言 本篇文章来给大家讲解QT中的Http协议,Http协议主要用于网络中数据的请求和响应,那么这篇文章将给大家讲解一下这个协议。 一、HTTP概述 HTTP(超文本传输协议)是互联网上应用最为广泛的协议之一,它定义了客户端…

NumPy及Matplotlib基本用法

NumPy及Matplotlib基本用法 导语NumPy导入与生成算术运算N维数组广播元素访问 Matplotlib简单图案绘制多函数绘制图像显示参考文献 导语 深度学习中经常需要对图像和矩阵进行操作,好在python提供了Numpy和Matplotlib库,前者类似一个已经定义的数组类&am…

QT creator qt6.0 使用msvc2019 64bit编译报错

qt creator qt6.0报错: D:\Qt6\6.3.0\msvc2019_64\include\QtCore\qglobal.h:123: error: C1189: #error: "Qt requires a C17 compiler, and a suitable value for __cplusplus. On MSVC, you must pass the /Zc:__cplusplus option to the compiler."…

《Linux运维总结:ARM架构CPU基于docker-compose一离线部署consul v1.18.1集群工具》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统&…

unity华为sdk接入指路指南

目前比较靠谱的几个方案:试过几个仅供参考 温馨提示:最高目前可支持方案到unity2021版本以下,以上请联系华为官方寻求技术支持 Unity集成华为游戏服务SDK方式(一):集成Unity官方游戏SDK: 华为…

JavaScript异步编程——03-Ajax传输json和XML

Ajax 传输 JSON JSON 的语法 JSON(JavaScript Object Notation):是 ECMAScript 的子集。作用是进行数据的交换。语法更为简洁,网络传输、机器解析都更为迅速。 语法规则: 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组…

选择适用的无尘棉签:保障洁净生产环境下的高效擦拭

随着洁净生产条件的日益普及和无尘级别要求的提高,无尘擦拭用品成为广大用户追捧的必备工具。在这个领域,无尘棉签作为一种高效的擦拭工具,扮演着重要的角色。然而,面对市场上种类繁多的无尘棉签,如何选择最合适的产品…

【软件测试】接口自动化测试面试题及详细答案

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

UE5自动生成地形二:自动生成插件

UE5自动生成地形二:自动生成插件 Polycam使用步骤 本篇主要讲解UE5的一些自动生成地形的插件 Polycam 此插件是通过现实的多角度照片自动建模生成地形数据,也是免费的。这里感谢B站up主古道兮峰的分享 Polycam网站 插件下载地址 插件网盘下载 提取码&a…

Vulnhub项目:ICA: 1

1、靶机介绍 靶机地址:ICA: 1 ~ VulnHub 2、渗透过程 首先,部署好靶机后,进行探测,发现靶机ip和本机ip,靶机ip156,本机ip146。 然后查看靶机ip有哪些端口,nmap一下。 出现22、80、3306端口&a…

无偏扭曲区域采样在可微分渲染中的应用

图1. 可微渲染计算光传输方程的导数。为了处理可见性的存在,最近的基于物理的可微渲染器需要显式地找到边界点[Li等人2018; Zhang等人2020],或者通过启发式方法近似边界贡献[Loubet等人2019]。我们从第一原理出发,开发了一个无偏估计器&#…