使用 Elasticsearch Reindex API 迁移数据

news2024/9/21 11:29:32

使用 Elasticsearch Reindex API 迁移数据

在 Elasticsearch 中,随着需求的变化,可能需要对索引进行重建或更新。这通常涉及创建新索引、迁移数据等步骤。本文介绍如何使用 Reindex API 将旧索引中的数据迁移到新索引中

一、步骤概述

  1. 创建新索引:根据需求创建一个新索引,新旧索引的字段名称和数据类型必须一致

  2. 数据完整性:确保在迁移过程中,旧索引不再进行写入操作,以避免数据不一致

  3. 迁移数据:使用 Reindex API 将旧索引中的数据重新索引到新索引中

二、reindex基本使用

  • 源索引的 _source 字段必须启用,才能提取文档内容
  • 目标索引在执行 _reindex 前应按照需求配置好,Reindex API 不会复制源索引的设置(例如映射、分片、副本等),这些需要在重新索引前手动配置

基本使用示例

POST /_reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

请求条件

如果启用了 Elasticsearch 的安全功能,执行 Reindex API 需要具备以下权限:

  • 对源数据流、索引或别名的读取权限。
  • 对目标数据流、索引或别名的写入权限。
  • 如果希望 Reindex API 自动创建数据流或索引,还需具备 auto_configurecreate_indexmanage 权限。
  • 若从远程集群重新索引,需要配置 reindex.remote.whitelist 设置,并且源集群用户需要具有 monitorread 权限。

异步执行 Reindex

请求默认是异步执行的,虽然 API 会立即返回一个响应,但任务实际上在后台执行。如果希望同步执行任务,可以在 URL 中添加 wait_for_completion=true 参数,示例如下:

POST _reindex?wait_for_completion=true&refresh
{
  "source": {
    "index": "index_v1"
  },
  "dest": {
    "index": "index_v2"
  }
}

三、指定slice并行和size大小优化速度

创建好新索引后,可以使用 Reindex API 进行数据迁移。以下是迁移数据的示例:

POST _reindex?slices=20&refresh
{
  "source": {
    "index": "index_v1",
    "size": 5000
  },
  "dest": {
    "index": "index_v2"
  }
}
  • slices:可以指定并发执行的切片数,帮助加快迁移速度
  • size:每次从源索引中读取的文档数量

上面两个参数要根据服务器硬件的配置和网络传输速度等进行设置,并非越高越好

监控重建任务

在进行数据迁移时,可以使用以下命令监控重建任务的进度:

GET /_tasks?detailed=true&actions=*reindex

这个命令会返回当前所有重建任务的详细信息,包括任务的状态、已处理的文档数量、总文档数量以及任何可能的错误信息

image-20240920172550693

如果需要查看特定的任务信息,可以使用:

GET /_tasks/<task_id>

<task_id> 替换为实际的任务 ID

取消重建任务

如果在迁移过程中需要停止重建任务,可以使用以下命令取消指定任务:

POST /_tasks/<task_id>/_cancel

注意事项

  • 在迁移完成后,可以对新索引进行验证,确保数据完整性和准确性
  • 迁移完成后,可以删除旧索引以释放存储空间

以下为官方文档的翻译,官方文档链接:[Reindex API | Elasticsearch Guide 8.15] | Elastic

官方文档的翻译:Reindex API

Reindex API 用于将文档从一个索引复制到另一个索引。它允许你将数据从源索引、别名或数据流迁移到目标索引。但需要注意,源和目标不能相同,不能将数据流重新索引到自身。

基本要求

  • 源索引的 _source 字段必须启用,才能提取文档内容。
  • 目标索引在执行 _reindex 前应按照需求配置好,Reindex API 不会复制源索引的设置(例如映射、分片、副本等),这些需要在重新索引前手动配置。

基本使用示例

POST /_reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

请求条件

如果启用了 Elasticsearch 的安全功能,执行 Reindex API 需要具备以下权限:

  • 对源数据流、索引或别名的读取权限。
  • 对目标数据流、索引或别名的写入权限。
  • 如果希望 Reindex API 自动创建数据流或索引,还需具备 auto_configurecreate_indexmanage 权限。
  • 若从远程集群重新索引,需要配置 reindex.remote.whitelist 设置,并且源集群用户需要具有 monitorread 权限。

功能描述

Reindex API 会从源索引提取文档,并将其重新索引到目标索引。支持复制全部文档或文档子集。在没有指定 version_type 或设置为 internal 时,Elasticsearch 将不考虑版本冲突,直接覆盖目标索引中已有的相同 ID 文档。如果将 version_type 设置为 external,则会保留源文档的版本信息,创建缺失文档,更新目标索引中较旧版本的文档。

异步执行 Reindex

通过将 wait_for_completion 设置为 false,可以异步执行 Reindex。此时,Elasticsearch 会执行一些预检操作,启动请求,并返回一个任务 ID,你可以用它来取消或查询任务状态。

从多个源重新索引

如果需要从多个源进行重新索引,建议一次处理一个源,而不是使用通配符进行批量处理。这样可以在出现错误时重新启动特定的索引过程。

示例 Bash 脚本

for index in i1 i2 i3 i4 i5; do
  curl -HContent-Type:application/json -XPOST localhost:9200/_reindex?pretty -d'{
    "source": {
      "index": "'$index'"
    },
    "dest": {
      "index": "'$index'-reindexed"
    }
  }'
done

限速和重新限速

Reindex 支持通过 requests_per_second 参数对批次操作进行限速。设置为任意正数可限制每秒的请求次数,设置为 -1 则禁用限速。例如,假设批次大小为 1000,requests_per_second 设置为 500:

目标时间 = 1000 / 500 = 2 秒
等待时间 = 目标时间 - 写入时间 = 2 秒 - 0.5= 1.5

可以使用 _rethrottle API 动态调整正在运行的 Reindex 请求的限速:

POST _reindex/{task_id}/_rethrottle?requests_per_second=-1

分片处理(Slicing)

Reindex 支持使用切片(Sliced scroll)并行化处理。手动切片时,可以为每个请求提供一个 slice 参数:

POST /_reindex
{
  "source": {
    "index": "my-index-000001",
    "slice": {
      "id": 0,
      "max": 2
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

也可以使用 slices 参数让 Elasticsearch 自动选择切片数量:

POST /_reindex?slices=5&refresh
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

如何选择切片数量

一般情况下,切片数量与索引中的分片数量相同效果最好。如果分片数量过大(例如 500),可以选择较小的切片数量,因为切片过多可能影响性能。通常建议切片数量不超过分片数量,以避免额外的开销。

路由

Reindex 默认保留文档的路由信息,但可以通过 dest.routing 参数进行更改:

POST /_reindex
{
  "source": {
    "index": "source",
    "query": {
      "match": {
        "company": "cat"
      }
    }
  },
  "dest": {
    "index": "dest",
    "routing": "=cat"
  }
}

批次大小

默认情况下,Reindex 使用 1000 条文档作为批次大小,可以通过 size 参数自定义批次大小:

POST /_reindex
{
  "source": {
    "index": "source",
    "size": 100
  },
  "dest": {
    "index": "dest"
  }
}

使用 Ingest 管道进行重建索引

您可以在重建索引时通过 ingest 管道处理文档。以下是指定管道的示例:

json复制代码POST _reindex
{
  "source": {
    "index": "source"
  },
  "dest": {
    "index": "dest",
    "pipeline": "some_ingest_pipeline"
  }
}

查询参数

  • refresh(可选,布尔):如果为 true,请求会刷新受影响的分片,使此操作对搜索可见。默认值为 false。
  • timeout(可选,时间单位):每个索引操作等待的时间,包括:
    • 自动索引创建
    • 动态映射更新
    • 等待活动分片 默认值为 1 分钟。这确保 Elasticsearch 至少等待超时之前不会失败。实际等待时间可能更长,特别是在发生多次等待时。
  • wait_for_active_shards(可选,字符串):必须激活的分片副本数量才能继续操作。可以设置为 “all” 或任意正整数,最大值为索引中的总分片数量(number_of_replicas+1)。默认值为 1,即主分片。
  • wait_for_completion(可选,布尔):如果为 true,请求会阻塞,直到操作完成。默认值为 true。
  • requests_per_second(可选,整数):此请求的速率限制,每秒的子请求数量。默认值为 -1(无速率限制)。
  • require_alias(可选,布尔):如果为 true,目标必须是索引别名。默认值为 false。
  • scroll(可选,时间单位):指定在滚动搜索中应保持一致的索引视图的时间。
  • slices(可选,整数):将此任务分成的切片数量。默认值为 1,即任务未被切片成子任务。
  • max_docs(可选,整数):处理的最大文档数量。默认处理所有文档。当设置为小于或等于 scroll_size 的值时,将不会使用滚动来检索操作的结果。

请求体

  • conflicts(可选,枚举):设置为 “proceed” 以继续重建索引,即使存在冲突。默认值为 “abort”。

  • max_docs(可选,整数):重建索引的最大文档数量。如果 conflicts 设置为 “proceed”,重建索引可能会尝试从源中重建更多文档,直到成功将 max_docs 文档索引到目标中,或者遍历完源查询中的所有文档。

  • source(必需,字符串):您要复制的数据流、索引或别名的名称。也接受以逗号分隔的列表,以从多个源重建索引。

  • query(可选,查询对象):使用查询 DSL 指定要重建的文档。

  • remote(可选,字符串):要从中索引的远程 Elasticsearch 实例的 URL。索引远程数据时需要此参数。

    • username(可选,字符串):用于远程主机身份验证的用户名。
    • password(可选,字符串):用于远程主机身份验证的密码。
    • socket_timeout(可选,时间单位):远程套接字读取超时。默认值为 30 秒。
    • connect_timeout(可选,时间单位):远程连接超时。默认值为 30 秒。
    • headers(可选,对象):包含请求头的对象。
  • size(可选,整数):每批次要索引的文档数量。用于远程索引时,确保批次适合堆内缓冲区,默认最大大小为 100 MB。

  • slice(可选,整数):手动切片的切片 ID。

    • max(可选,整数):切片的总数。
  • sort(可选,列表):在索引之前按字段排序的以逗号分隔的 : 对列表。与 max_docs 一起使用以控制重建的文档。

    注意:在 7.6 中,重建索引时排序功能已被弃用。重建时的排序从未保证按顺序索引文档,并阻碍了重建的进一步发展,例如弹性和性能改进。如果与 max_docs 一起使用,建议使用查询过滤器。

  • _source(可选,字符串):如果为 true,重建所有源字段。设置为列表以重建特定字段。默认值为 true。

  • dest(必需,字符串):您要复制到的数据流、索引或索引别名的名称。

  • version_type(可选,枚举):索引操作使用的版本类型。有效值:internal、external、external_gt、external_gte。有关更多信息,请参见版本类型。

  • op_type(可选,枚举):设置为 “create” 以仅索引不存在的文档(如果缺失则放入)。有效值:index、create。默认值为 index。

    要重建到数据流目标,必须将此参数设置为 “create”。

  • pipeline(可选,字符串):要使用的管道名称。

  • script(可选,字符串):重建文档源或元数据时运行的脚本。

    • lang(可选,枚举):脚本语言:painless、expression、mustache、java。有关更多信息,请参见脚本。

响应体

  • took(整数):整个操作耗时的毫秒数。
  • timed_out(布尔):如果在重建期间执行的任何请求超时,则该标志设置为 true。
  • total(整数):成功处理的文档数量。
  • updated(整数):成功更新的文档数量,即在重建前同一 ID 的文档已存在。
  • created(整数):成功创建的文档数量。
  • deleted(整数):成功删除的文档数量。
  • batches(整数):重建过程中提取的滚动响应的数量。
  • noops(整数):由于用于重建的脚本返回了无操作值而被忽略的文档数量。
  • version_conflicts(整数):重建中遇到的版本冲突数量。
  • retries(整数):重建尝试的重试次数。bulk 表示重试的批量操作数量,search 表示重试的搜索操作数量。
  • throttled_millis(整数):请求为符合 requests_per_second 而休眠的毫秒数。
  • requests_per_second(整数):在重建过程中有效执行的每秒请求数量。
  • throttled_until_millis(整数):此字段在 _reindex 响应中应始终等于零。它仅在使用任务 API 时有意义,指示下次(自纪元以来的毫秒)将在符合 requests_per_second 的情况下再次执行被限制的请求。
  • failures(数组):如果在处理过程中有任何不可恢复的错误,则此数组中将包含错误。如果此数组非空,则请求因这些错误而中止。重建是通过批次实现的,任何失败都会导致整个过程中止,但当前批次中的所有失败都会收集到数组中。您可以使用 conflicts 选项防止在版本冲突时重建中止。

示例

根据查询重建选择文档

您可以通过向源添加查询来限制文档。例如,以下请求仅将 user.id 为 kimchy 的文档复制到 my-new-index-000001:

json复制代码POST _reindex
{
  "source": {
    "index": "my-index-000001",
    "query": {
      "term": {
        "user.id": "kimchy"
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}
使用 max_docs 限制重建的文档数量

您可以通过设置 max_docs 来限制处理的文档数量。例如,以下请求将从 my-index-000001 复制一个文档到 my-new-index-000001:

json复制代码POST _reindex
{
  "max_docs": 1,
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}
从多个源重建

源中的 index 属性可以是一个列表,从多个源复制的请求。此请求将从 my-index-000001 和 my-index-000002 索引中复制文档:

json复制代码POST _reindex
{
  "source": {
    "index": ["my-index-000001", "my-index-000002"]
  },
  "dest": {
    "index": "my-new-index-000002"
  }
}

Reindex API 不会处理 ID 冲突,因此最后写入的文档将覆盖之前的版本。如果目标索引已经存在文档,且 ID 与源相同,则它们会被替换。

从远程索引重建数据

Reindex 支持从远程 Elasticsearch 集群重建数据:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "username": "user",
      "password": "pass"
    },
    "index": "my-index-000001",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

host 参数必须包含协议、主机和端口(例如 https://otherhost:9200),以及可选路径(例如 https://otherhost:9200/proxy)。usernamepassword 参数是可选的,当提供时,_reindex 将使用基本认证连接到远程 Elasticsearch 节点。请确保在使用基本认证时使用 HTTPS,否则密码将以明文发送。可以配置多种设置来管理 HTTPS 连接的行为。

当使用 Elastic Cloud 时,也可以通过有效的 API 密钥对远程集群进行身份验证:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "headers": {
        "Authorization": "ApiKey API_KEY_VALUE"
      }
    },
    "index": "my-index-000001",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

远程主机必须在 elasticsearch.yml 中通过 reindex.remote.whitelist 属性显式允许。可以设置为允许的远程主机和端口组合的逗号分隔列表。协议被忽略,仅使用主机和端口。例如:

reindex.remote.whitelist: [otherhost:9200, another:9200, 127.0.10.*:9200, localhost:*]

允许的主机列表必须在任何将协调重建的节点上进行配置。

此功能应适用于你可能遇到的任何版本的远程 Elasticsearch 集群。这将允许你通过从旧版本集群中重建数据来升级到当前版本。

Elasticsearch 不支持主要版本之间的向前兼容。例如,不能从 7.x 集群重建到 6.x 集群。

为了启用发送到旧版本 Elasticsearch 的查询,query 参数直接发送到远程主机,不进行验证或修改。

从远程集群重建数据不支持手动或自动切片。

从远程服务器重建数据使用一个堆内存缓冲区,默认最大大小为 100MB。如果远程索引包含非常大的文档,你需要使用较小的批量大小。以下示例将批量大小设置为 10,非常小:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      ...
    },
    "index": "source",
    "size": 10,
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

还可以通过 socket_timeout 字段设置远程连接的套接字读取超时,通过 connect_timeout 字段设置连接超时。两者的默认值均为 30 秒。此示例将套接字读取超时设置为一分钟,连接超时设置为 10 秒:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      ...,
      "socket_timeout": "1m",
      "connect_timeout": "10s"
    },
    "index": "source",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

配置 SSL 参数

从远程重建支持可配置的 SSL 设置。这些设置必须在 elasticsearch.yml 文件中指定,安全设置在 Elasticsearch 密钥库中添加。在 _reindex 请求的主体中无法配置 SSL。

以下设置是支持的:

  • reindex.ssl.certificate_authorities

    • 应信任的 PEM 编码证书文件的路径列表。不能同时指定 reindex.ssl.certificate_authoritiesreindex.ssl.truststore.path
  • reindex.ssl.truststore.path

    • 包含要信任的证书的 Java 密钥库文件的路径。该密钥库可以是 “JKS” 或 “PKCS#12” 格式。不能同时指定这两个设置。
  • reindex.ssl.truststore.password

    • 信任库的密码(reindex.ssl.truststore.path)。[7.17.0] 在 7.17.0 中已弃用。建议使用 reindex.ssl.truststore.secure_password
  • reindex.ssl.truststore.secure_password (安全)

    • 信任库的密码(reindex.ssl.truststore.path)。此设置不能与 reindex.ssl.truststore.password 一起使用。
  • reindex.ssl.truststore.type

    • 信任库的类型(reindex.ssl.truststore.path)。必须是 jks 或 PKCS12。如果信任库路径以 “.p12”、“.pfx” 或 “pkcs12” 结尾,此设置默认为 PKCS12。否则,默认为 jks。
  • reindex.ssl.verification_mode

    • 指示保护中间人攻击和证书伪造的验证类型。可以是 full(验证主机名和证书路径)、certificate(验证证书路径,但不验证主机名)或 none(不进行验证 - 强烈建议在生产环境中不要使用)。默认为 full。
  • reindex.ssl.certificate

    • 指定用于 HTTP 客户端身份验证的 PEM 编码证书(或证书链)(如果远程集群需要)。此设置要求设置 reindex.ssl.key。不能同时指定这两个设置。
  • reindex.ssl.key

    • 指定与用于客户端身份验证的证书相关联的 PEM 编码私钥的路径(reindex.ssl.certificate)。不能同时指定这两个设置。
  • reindex.ssl.key_passphrase

    • 如果 PEM 编码私钥被加密,指定解密其的密码(reindex.ssl.key)。[7.17.0] 在 7.17.0 中已弃用。建议使用 reindex.ssl.secure_key_passphrase
  • reindex.ssl.secure_key_passphrase (安全)

    • 如果 PEM 编码私钥被加密,指定解密其的密码(reindex.ssl.key)。不能与 reindex.ssl.key_passphrase 一起使用。
  • reindex.ssl.keystore.path

    • 指定包含用于 HTTP 客户端身份验证的私钥和证书的密钥库的路径(如果远程集群需要)。该密钥库可以是 “JKS” 或 “PKCS#12” 格式。不能同时指定这两个设置。
  • reindex.ssl.keystore.type

    • 密钥库的类型(reindex.ssl.keystore.path)。必须是 jks 或 PKCS12。如果密钥库路径以 “.p12”、“.pfx” 或 “pkcs12” 结尾,此设置默认为 PKCS12。否则,默认为 jks。
  • reindex.ssl.keystore.password

    • 密钥库的密码(reindex.ssl.keystore.path)。[7.17.0] 在 7.17.0 中已弃用。建议使用 reindex.ssl.keystore.secure_password
  • reindex.ssl.keystore.secure_password (安全)

    • 密钥库的密码(reindex.ssl.keystore.path)。此设置不能与 reindex.ssl.keystore.password 一起使用。
  • reindex.ssl.keystore.key_password

    • 密钥库中密钥的密码(reindex.ssl.keystore.path)。默认为密钥库密码。[7.17.0] 在 7.17.0 中已弃用。建议使用 reindex.ssl.keystore.secure_key_password
  • reindex.ssl.keystore.secure_key_password (安全)

    • 密钥库中密钥的密码(reindex.ssl.keystore.path)。默认为密钥库密码。此设置不能与 reindex.ssl.keystore.key_password 一起使用。

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

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

相关文章

OpenCV_距离变换的图像分割和Watershed算法详解

在学习watershed算法的时候&#xff0c;书写代码总会出现一些错误&#xff1a; 上述代码运行报错&#xff0c;显示OpenCV(4.10.0) Error: Assertion failed (src.type() CV_8UC3 && dst.type() CV_32SC1) in cv::watershed 查找资料&#xff1a;目前已解决 这个错…

idea 编辑器常用插件集合

SequenceDiagram 用于生成时序图的插件&#xff0c;支持一键生成功能。 使用&#xff1a;选择某个具体的方法&#xff0c;点击右键菜单&#xff0c;选择“Sequence Diagram” 便可生成相应的时序图 例子&#xff1a; 效果&#xff1a; Code Iris Code Iris可以根据代码自动…

c++day3 手动封装一个顺序表(SeqList),分文件编译实现

要求: 有私有成员&#xff1a;顺序表数组的起始地址 ptr、 顺序表的总长度&#xff1a;size、顺序表的实际长度&#xff1a;len 成员函数&#xff1a;初始化 init(int n) 判空&#xff1a;empty 判满&#xff1a;full 尾插&#xff1a;push_back 插入&#xff1a;insert&…

优数:助力更高效的边缘计算

在数字化时代的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。随着物联网&#xff08;IoT&#xff09;设备的激增和5G技术的兴起&#xff0c;我们正迅速步入一个新时代&#xff0c;在这个时代中&#xff0c;数据不仅在量上爆炸性增长&#xff0c;更在速度和实时性上提出了…

Hadoop里面MapReduce的序列化与Java序列化比较

什么是序列化&#xff1f; jvm中的一个对象&#xff0c;不是类&#xff0c;假如你想把一个对象&#xff0c;保存到磁盘上&#xff0c;必须序列化&#xff0c;你把文件中的对象进行恢复&#xff0c;是不是的反序列化。 假如你想把对象发送给另一个服务器&#xff0c;需要通过网…

线性dp 总结详解

就是感觉之前 dp 的 blog 太乱了整理一下。 LIS(最长上升子序列) 例题 给定一个整数序列&#xff0c;找到它的所有严格递增子序列中最长的序列&#xff0c;输出其长度。 思路 拿到题目&#xff0c;大家第一时间想到的应该是的暴力(dp)做法&#xff1a; #include <bits/s…

基于Windows系统以tomcat为案例,讲解如何新增自启动服务,定时重启服务。

文章目录 引言I 设置服务自启动的常规操作II 安装多个tomcat服务,并设置自启动。III 定时重启服务引言 为了同一个版本安装多个tomcat服务,并设置自启动。使用Windows的任务计划程序来创建一个定时任务,用于重启Tomcat服务。I 设置服务自启动的常规操作 运行窗口输入control…

2024双11有哪些值得入手的好物?2024年双十一好物推荐

随着2024年双十一购物狂欢节的临近&#xff0c;消费者们正摩拳擦掌&#xff0c;准备迎接这场年度最大的网购盛会。面对琳琅满目的促销信息和令人眼花缭乱的商品&#xff0c;如何在海量商品中精准锁定那些真正值得购买的好物&#xff0c;成为每位精明买家的首要任务。本文旨在为…

牛啊,GitHub 代理加速图文教程

大家好&#xff0c;众所周知&#xff0c;GitHub 在国内访问速度堪忧&#xff0c;经常出现访问不了的情况&#xff0c;如果我们去 clone 代码&#xff0c;网速非常差。今天教大家如何给 GitHub 进行加速。 要用到我开发的开源项目 Cloudflare Workers Proxy&#xff0c;它是一个…

视频压缩篇:适用于 Windows 的 10 款最佳视频压缩器

视频压缩器现在对许多想要减小视频大小的视频编辑者来说非常有名。但是&#xff0c;并非所有可以在网上找到的视频压缩器都能产生最佳输出。因此&#xff0c;我们搜索了可以无损压缩视频的最出色的视频压缩器应用程序。本文列出了您可以在离线、在线和手机上使用的十大最佳视频…

2024华为杯研赛D题保姆级教程思路分析+教程

2024年中国研究生数学建模竞赛D题保姆级教程思路分析 D题&#xff1a;大数据驱动的地理综合问题&#xff08;数学分析&#xff0c;统计学&#xff09; 关键词&#xff1a;地理、气候、统计&#xff08;细致到此题&#xff1a;统计指标、统计模型、统计结果解释&#xff09; …

无线领夹麦克风哪个降噪好?一文搞懂麦克风什么牌子的音质效果好

对于视频拍摄、直播来说&#xff0c;一款好的拾音麦克风是不可或缺的。作为一位数码博主&#xff0c;也是会经常拍摄视频讲解&#xff0c;早期没有使用麦克风时&#xff0c;声音不够清晰&#xff0c;而且周围环境音也会同时被收录&#xff0c;导致整个音频的音质效果极差&#…

【多线程】CAS的原理及应用,看这篇文章就够啦

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 一、CAS概述 CAS&#xff08;Compare and Swap&#xff09;&#xff0c;中文译为 “比较并交换” &#xff0c;是一种无锁算法中常用的原子操作。CAS通常用于实现线程之间的同…

力扣之1459.矩形面积

1. 1459.矩形面积 1.1 题干 表: Points ---------------------- | Column Name | Type | ---------------------- | id | int | | x_value | int | | y_value | int | ---------------------- id 是该表中具有唯一值的列。 每个点都用二维坐标 (x_value, y_value) 表示。 编…

【力扣每日一题——2374. 边积分最高的节点】python

2374. 边积分最高的节点 给你一个有向图&#xff0c;图中有 n 个节点&#xff0c;节点编号从 0 到 n - 1 &#xff0c;其中每个节点都 恰有一条 出边。 图由一个下标从 0 开始、长度为 n 的整数数组 edges 表示&#xff0c;其中 edges[i] 表示存在一条从节点 i 到节点 edges[…

大模型训练实战经验总结

在当今AI技术飞速发展的背景下&#xff0c;定制化大模型的自主训练已成为满足特定行业需求、保障数据安全、提升模型应用效能的关键途径。本文将深度剖析这一过程的核心价值与实践智慧&#xff0c;从数据隐私保护、模型透明度增强&#xff0c;到数据预处理的精细操作&#xff0…

记录一次fs配置导致串线的问题

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs在实际的使用过程中也会经常碰到莫名其妙的问题&#xff0c;大部分都是配置问题。 环境 CentOS 7.9 freeswitch 1.10.7 docker 26.1.1 问题描述 组网方案如下。其中的fs-reg是注册服务器&#xff0c;fs1和fs2是…

NEES(Normalized Estimation Error Squared 归一化估计误差平方)

目录 NEES的计算步骤 解释 示例 代码 与RMSE的区别 NEES(Normalized Estimation Error Squared)是一种用于评估状态估计精度的指标,通常用于比较估计值与真实值之间的差异。计算NEES的步骤如下: NEES的计算步骤 获取状态估计: 设定目标的真实状态为。设定状态估计为…

Ubuntu 20.04安装pycharm2022及配置快捷方式

一、下载与安装 1. 下载 在 官网 下载所需版本&#xff0c;如&#xff1a;下载 2022.3.3 - Linux (tar.gz) 2. 安装 设置自定义安装路径(推荐在 /opt/ 路径下)并安装 mkdir -p ~/Documents/software/pycharm/ cd ~/Documents/software/pycharm/ mv ~/Downloads/pycharm-c…

使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南

文章目录 一、介绍&#xff1f;二、什么是 Puppeteer-Cluster&#xff1f;三、为什么代理在网络抓取中很重要&#xff1f;四、 为什么使用带代理的 Puppeteer-Cluster&#xff1f;五、分步指南&#xff1a; 带代理的 Puppeteer 群集5.1. 步骤 1&#xff1a;安装所需程序库5.2. …