Elasticsearch 快照和恢复
文章目录
- 简介
- 快照存储库
- 说明
- 创建或更新存储库
- 接口说明
- 路径参数
- 查询参数
- 请求正文
- 使用 fs 方式创建存储库
- 验证储存库
- 获取存储库信息
- 删除存储库
- 清理储存库
- 快照
- 创建快照
- 路径参数
- 查询参数
- 请求正文
- 示例
- 获取快照
- 查询参数
- 示例
- 克隆快照
- 查询参数
- 示例
- 获取快照状态
- 示例
- 恢复快照
- 查询参数
- 请求正文
- 示例
- 删除快照
简介
快照是正在运行的Elasticsearch集群的备份。可以使用快照来:
- 定期备份群集,无需停机
- 删除或硬件故障后恢复数据
- 在群集之间传输数据等
默认情况下,集群的快照包含集群状态、所有常规数据流和所有常规索引
快照必须存储在存储库中,存储库的内容不能修改,否则会造成快照损坏或导致数据不一致等一系列问题。所以在创建快照之前,需要先创建存储库
快照存储库
说明
- 存储库需要集群中的节点可以共享访问(共享文件系统、云存储等)
- 多个集群之间不要使用同一个储存库。避免多个集群修改同样的存储库,造成不必要的问题。
- 存储库的内容不要修改,避免操作数据损坏等问题
创建或更新存储库
PUT /_snapshot/my_repository
{"type": "url","settings": {"url": "https://pan.baidu.com/disk/main#/transfer/send?surl=ABkAAAAddddAABEHbw"}
}
type 表示存储库的类型,存储库支持多种类型,我们示例是使用的 url 类型。
接口说明
PUT /_snapshot/<repository>POST /_snapshot/<repository>
路径参数
repository:存储库的名称。
查询参数
- master_timeout
(可选,时间单位)指定等待连接到主节点的时间段。如果超时之前未收到响应,则请求失败并返回错误。默认为30s. - timeout
(可选,时间单位)指定等待响应的时间段。如果超时之前未收到响应,则请求失败并返回错误。默认为30s. - verify
(可选,布尔值)如果true,则请求验证存储库在集群中的所有主节点和数据节点上是否正常运行。如果false,则跳过此验证。默认为 true.
请求正文
- type 存储库类型
- azure Azure 存储库(微软)
- gcs 谷歌云存储库
- s3 S3存储库(MinIO对此进行了适配,所以也可以使用S3方式配置MinIO)
- fs 共享文件系统存储库(如NFS等)
- url 只读 URL 存储库(支持 file、ftp、http、https、jar 协议),只读存储库不能创建快照
- hdfs Hadoop 分布式文件系统 (HDFS) 存储库(需安装 ES 官方插件)
- settings 对应类型的配置(注意:每种类型不一样,本文只介绍url方式,其余方式请参考 官方文档:创建储存库 API )
注意:除了 file 协议,其他协议需要 elasticsearch.yml 配置 repositories.url.allowed_urls,此设置为数组。
repositories.url.allowed_urls: ["https://pan.baidu.com/disk/main#/transfer/send?surl=ABkAAAAddddAABEHbw"]
url 方式的 file 协议,以及 fs 方式,需要配置地址的父级目录到 elasticsearch.yml 的 path.repo 。
使用 fs 方式创建存储库
PUT /_snapshot/my_fs_repo
{"type": "fs","settings": {"location": "/DATA/soft/bak/my_test_bak"}
}
结果
{"acknowledged": true
}
请先配置 elasticsearch.yml 的 path.repo: [“/DATA/soft/bak”]
本示例以及本文下面的示例都需要关闭其他节点,只启动一个节点来使用,配置的文件地址也是启动的节点的文件路径。这样做是为了简化讲解、简化示例,存储库在集群下的 fs 路径需要共享文件系统挂载到每个主节点和数据节点的同样的路径下且每个节点都能访问的。要在集群环境使用本示例,请至少使用 NFS 等共享文件系统。
验证储存库
# /_snapshot/<repository>/_verify
POST /_snapshot/my_fs_repo/_verify
结果:
{"nodes": {"AST-4rnFRdagsd0juerSaw": {"name": "myNode2"},"oj5FEiVMRpuWV386zdwy3w": {"name": "myNode1"}}
}
我们的示例是单节点的,所以结果应该只有一个节点。
获取存储库信息
# /_snapshot/<repository>
GET /_snapshot/my_fs_repo
{"my_fs_repo": {"type": "fs","settings": {"location": "/DATA/soft/bak/my_test_bak"}}
}
删除存储库
# DELETE /_snapshot/<repository>
DELETE /_snapshot/my_fs_repo
清理储存库
# POST /_snapshot/<repository>/_cleanup
POST /_snapshot/my_fs_repo/_cleanup
快照
创建快照
PUT /_snapshot/<repository>/<snapshot>POST /_snapshot/<repository>/<snapshot>
路径参数
- repository:储存库名
- snapshot:快照名
查询参数
- master_timeout
(可选,时间单位)等待连接到主节点的时间。如果在超时到期之前没有收到响应,则请求将失败并返回错误。默认为30s . - wait_for_completion
(可选,布尔)true:快照完成后,请求将返回响应。false:当快照初始化时,请求返回响应。默认为false
请求正文
- expand_wildcards
(可选,字符串)确定通配符模式在indices参数匹配数据流和索引。支持逗号分隔的值,例如open,closed。默认为all- all
匹配任何数据流或索引,包括隐藏个 - open
匹配开放索引和数据流。 - closed
匹配关闭的索引和数据流。 - hidden
匹配隐藏的数据流和索引。必须与结合open ,关闭或两者兼而有之 - none
不要展开通配符模式
- all
- include_global_state
(可选,布尔)true,在快照中包含群集状态。默认为 true。 - indices
(可选,字符串或字符串数组)要包含在快照中的数据流和索引的逗号分隔列表。默认为空数组 []。 - feature_states
(可选,字符串数组)哪些功能状态包含在快照中,与 include_global_state 配置共同作用,include_global_state 为true时才生效。默认为空数组[],表示所有。[“none”]表示不包含任何功能状态。 - metadata
(可选,对象)将任意元数据附加到快照,例如快照的拍摄者、拍摄原因或任何其他有用数据的记录。元数据必须小于1024字节。可使用来对快照进行相关描述。 - partial
(可选,布尔)false,如果快照中包含的一个或多个索引没有所有主分片可用,则整个快照将失败。默认为false。true,允许对具有不可用分片的索引进行部分快照。
示例
PUT /_snapshot/my_fs_repo/snapshot_test1
{"indices":"*","include_global_state": false,"metadata": {"message": "测试快照"}
}
结果
{"accepted": true
}
获取快照
GET /_snapshot/<repository>/<snapshot>
查询参数
- master_timeout
(可选,时间单位)等待连接到主节点的时间。如果在超时到期之前没有收到响应,则请求将失败并返回错误。默认为30s . - ignore_unavailable
(可选,布尔)- false,对于任何不可用的快照,请求都会返回错误。默认为false .
- true,请求将忽略不可用的快照,例如损坏或暂时无法返回的快照。
- verbose
(可选,布尔)true,返回有关每个快照的附加信息,例如拍摄快照的Elasticsearch版本、快照的开始和结束时间以及快照的分片数。默认为true。false,省略附加信息 - index_names
(可选,布尔)true,返回响应中每个快照中包含的索引名称列表。默认为true . - index_details
(可选,布尔)true返回快照中每个索引的附加信息,包括索引中的分片数、索引的总大小(以字节为单位)以及索引中每个分片的最大段数。默认为false,表示此信息被省略 - include_repository
(可选,布尔)true,返回响应中每个快照的存储库名称。默认为true. - sort
(可选,字符串)允许设置结果的排序顺序。默认为start_time,即按快照开始时间戳排序。- start_time
按开始时间戳对快照进行排序。 - duration
按持续时间对快照进行排序。 - name
按名称对快照进行排序。 - repository
按存储库名称对快照进行排序。 - index_count
按快照包含的索引数对快照进行排序。 - shard_count
按快照包含的分片数对快照进行排序。 - failed_shard_count
按快照失败的分片数对快照进行排序。
- start_time
- size
(可选,整数)要返回的最大快照数。默认为0表示无限制地返回所有与请求匹配的内容。 - order
(可选,字符串)排序顺序。默认为asc,表示升序。desc 降序 - from_sort_value
(可选,字符串)要开始检索的当前排序列的值。在按快照或存储库名称排序时,可以是字符串快照,也可以是存储库名称,在按索引或分片计数排序时,则可以是毫秒时间值或数字。 - after
(可选,字符串)从返回的偏移量标识符开始分页next响应正文中的字段。 - offset
(可选,整数)基于匹配此请求的快照开始分页的数值偏移量。为该参数使用非零值与after参数对应。默认为 zero . - slm_policy_filter
(可选,字符串)通过快照所属的SLM策略名称的逗号分隔列表筛选快照。还接受通配符(*)和通配符组合
示例
GET /_snapshot/my_fs_repo/snapshot_test1?index_details=true
结果
{"snapshots": [ // 快照列表{"snapshot": "snapshot_test1", // 快照名称"uuid": "vn2YN19iRr6aG8YJ97paTw", // 快照统一标识符"repository": "my_fs_repo", // 存储库名称"version_id": 8060299, // 用于创建快照的 es 版本id"version": "8.6.2", // 用于创建快照的 es 版本号"indices": [ // 快照包含的索引列表".ds-.logs-deprecation.elasticsearch-default-2023.07.19-000002","users","person",".ds-ilm-history-5-2023.07.19-000002","students",".ds-ilm-history-5-2023.06.19-000001",".ds-.logs-deprecation.elasticsearch-default-2023.06.19-000001","person1"],"index_details": { // 快照中索引的信息(分片数、索引总大小等)".ds-.logs-deprecation.elasticsearch-default-2023.06.19-000001": {"shard_count": 1, // 分片数"size_in_bytes": 10572, // 索引索引分配的总大小(单位字节)"max_segments_per_shard": 1 // 每个分片的最大段数},"students": {"shard_count": 2,"size_in_bytes": 450,"max_segments_per_shard": 0},".ds-ilm-history-5-2023.06.19-000001": {"shard_count": 1,"size_in_bytes": 19887,"max_segments_per_shard": 2},".ds-.logs-deprecation.elasticsearch-default-2023.07.19-000002": {"shard_count": 1,"size_in_bytes": 225,"max_segments_per_shard": 0},".ds-ilm-history-5-2023.07.19-000002": {"shard_count": 1,"size_in_bytes": 23206,"max_segments_per_shard": 2},"person1": {"shard_count": 1,"size_in_bytes": 5667,"max_segments_per_shard": 1},"users": {"shard_count": 1,"size_in_bytes": 6123,"max_segments_per_shard": 1},"person": {"shard_count": 1,"size_in_bytes": 62979852,"max_segments_per_shard": 3}},"data_streams": [ // 快照中的数据流"ilm-history-5",".logs-deprecation.elasticsearch-default"],"include_global_state": false, // 是否包含集群状态"metadata": { // 创建快照时设置的信息"message": "测试快照"},"state": "SUCCESS", // 快照状态(IN_PROGRESS 快照当前正在运行)// SUCCESS 快照已完成,所有分片已成功存储。// FAILED 快照完成时出错,无法存储任何数据。// PARTIAL 已存储全局群集状态,但至少一个分片的数据未成功存储"start_time": "2023-08-02T06:11:55.210Z",// 快照创建的开始时间(时间戳)"start_time_in_millis": 1690956715210,// 快照创建的开始时间(毫秒)"end_time": "2023-08-02T06:11:58.212Z",// 快照创建的结束时间(时间戳)"end_time_in_millis": 1690956718212,// 快照创建的结束时间(毫秒)"duration_in_millis": 3002,// 快照创建所用时间(毫秒)"failures": [],// 创建时的故障"shards": { // 快照中的分片数"total": 9, // 总分片数"failed": 0, // 快照中未包含的分片数"successful": 9 // 快照中包含的分片数},"feature_states": [] // 功能状态,需要快照包含功能状态时才有值}],"total": 1, "remaining": 0
}
克隆快照
PUT /_snapshot/<repository>/<source_snapshot>/_clone/<target_snapshot>
查询参数
- master_timeout
(可选,时间单位)指定等待连接到主节点的时间段。如果在超时之前没有收到响应,则请求将失败并返回错误。默认为30s . - timeout
(可选,时间单位)指定等待响应的时间段。如果在超时到期之前没有收到响应,则请求失败并返回错误。默认为30s . - indices
(必需,字符串)要包含在快照中的以逗号分隔的索引列表。
示例
PUT /_snapshot/my_fs_repo/snapshot_test1/_clone/snapshot_test2
获取快照状态
GET _snapshot/_statusGET _snapshot/<repository>/_statusGET _snapshot/<repository>/<snapshot>/_status
示例
GET /_snapshot/my_fs_repo/snapshot_test1/_status
结果
{"snapshots": [ // 快照列表{"snapshot": "snapshot_test1", // 快照名"repository": "my_fs_repo", // 存储库名"uuid": "vn2YN19iRr6aG8YJ97paTw", // 快照统一标识符"state": "SUCCESS", // 当前状态"include_global_state": false, //是否包含集群状态"shards_stats": { // 分片状态"initializing": 0, // 正在初始化的分片数"started": 0, // 启动但尚未完成的分片数"finalizing": 0, // 正在完成但尚未完成的分片数"done": 9, // 成功初始化、启动和完成的分片数"failed": 0,// 快照中未包含的分片数"total": 9// 快照中包含的分片总数},"stats": {"incremental": { // "file_count": 39,"size_in_bytes": 63045982},"total": { // 快照引用的总大小"file_count": 39,"size_in_bytes": 63045982},"start_time_in_millis": 1690956715210, // 快照创建的初始时间"time_in_millis": 3002 // 快照创建总时间},"indices": {// 快照中包含的索引信息".ds-ilm-history-5-2023.06.19-000001": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 1,"failed": 0,"total": 1},"stats": {"incremental": {"file_count": 7,"size_in_bytes": 19887},"total": {"file_count": 7,"size_in_bytes": 19887},"start_time_in_millis": 1690956715410,"time_in_millis": 401},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 7,"size_in_bytes": 19887},"total": {"file_count": 7,"size_in_bytes": 19887},"start_time_in_millis": 1690956715410,"time_in_millis": 401}}}},"person1": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 1,"failed": 0,"total": 1},"stats": {"incremental": {"file_count": 4,"size_in_bytes": 5667},"total": {"file_count": 4,"size_in_bytes": 5667},"start_time_in_millis": 1690956715410,"time_in_millis": 401},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 4,"size_in_bytes": 5667},"total": {"file_count": 4,"size_in_bytes": 5667},"start_time_in_millis": 1690956715410,"time_in_millis": 401}}}},".ds-ilm-history-5-2023.07.19-000002": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 1,"failed": 0,"total": 1},"stats": {"incremental": {"file_count": 7,"size_in_bytes": 23206},"total": {"file_count": 7,"size_in_bytes": 23206},"start_time_in_millis": 1690956715410,"time_in_millis": 401},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 7,"size_in_bytes": 23206},"total": {"file_count": 7,"size_in_bytes": 23206},"start_time_in_millis": 1690956715410,"time_in_millis": 401}}}},"person": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 1,"failed": 0,"total": 1},"stats": {"incremental": {"file_count": 10,"size_in_bytes": 62979852},"total": {"file_count": 10,"size_in_bytes": 62979852},"start_time_in_millis": 1690956715410,"time_in_millis": 2802},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 10,"size_in_bytes": 62979852},"total": {"file_count": 10,"size_in_bytes": 62979852},"start_time_in_millis": 1690956715410,"time_in_millis": 2802}}}},"students": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 2,"failed": 0,"total": 2},"stats": {"incremental": {"file_count": 2,"size_in_bytes": 450},"total": {"file_count": 2,"size_in_bytes": 450},"start_time_in_millis": 1690956715410,"time_in_millis": 201},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 1,"size_in_bytes": 225},"total": {"file_count": 1,"size_in_bytes": 225},"start_time_in_millis": 1690956715410,"time_in_millis": 201}},"1": {"stage": "DONE","stats": {"incremental": {"file_count": 1,"size_in_bytes": 225},"total": {"file_count": 1,"size_in_bytes": 225},"start_time_in_millis": 1690956715410,"time_in_millis": 201}}}},".ds-.logs-deprecation.elasticsearch-default-2023.07.19-000002": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 1,"failed": 0,"total": 1},"stats": {"incremental": {"file_count": 1,"size_in_bytes": 225},"total": {"file_count": 1,"size_in_bytes": 225},"start_time_in_millis": 1690956715410,"time_in_millis": 0},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 1,"size_in_bytes": 225},"total": {"file_count": 1,"size_in_bytes": 225},"start_time_in_millis": 1690956715410,"time_in_millis": 0}}}},".ds-.logs-deprecation.elasticsearch-default-2023.06.19-000001": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 1,"failed": 0,"total": 1},"stats": {"incremental": {"file_count": 4,"size_in_bytes": 10572},"total": {"file_count": 4,"size_in_bytes": 10572},"start_time_in_millis": 1690956715410,"time_in_millis": 601},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 4,"size_in_bytes": 10572},"total": {"file_count": 4,"size_in_bytes": 10572},"start_time_in_millis": 1690956715410,"time_in_millis": 601}}}},"users": {"shards_stats": {"initializing": 0,"started": 0,"finalizing": 0,"done": 1,"failed": 0,"total": 1},"stats": {"incremental": {"file_count": 4,"size_in_bytes": 6123},"total": {"file_count": 4,"size_in_bytes": 6123},"start_time_in_millis": 1690956715410,"time_in_millis": 601},"shards": {"0": {"stage": "DONE","stats": {"incremental": {"file_count": 4,"size_in_bytes": 6123},"total": {"file_count": 4,"size_in_bytes": 6123},"start_time_in_millis": 1690956715410,"time_in_millis": 601}}}}}}]
}
恢复快照
POST /_snapshot/<repository>/<snapshot>/_restore
查询参数
- master_timeout
(可选,时间单位)等待连接到主节点的时间。如果在超时到期之前没有收到响应,则请求将失败并返回错误。默认为30s . - wait_for_completion
(可选,布尔)true,当恢复操作完成时,请求返回响应。完成所有尝试后,即使一次或多次恢复失败。false,当restore操作初始化时,请求返回响应。默认为 false .
请求正文
- ignore_unavailable
(可选,布尔)true,请求将忽略中的任何索引或数据流指数那是快照中缺少的。false,请求将为任何缺少的索引或数据流返回错误。默认为 false . - ignore_index_settings
(可选,字符串或字符串数组)不从快照恢复的索引设置。 - include_aliases
(可选,布尔)true,该请求将恢复所有已恢复数据流和磁盘的别名。false,请求不会恢复别名。默认为true . - include_global_state
(可选,布尔)如果true,恢复群集状态。默认为false - feature_states
(可选,字符串数组)要恢复的功能状态列表 - index_settings
(可选,对象)索引设置,用于添加或更改恢复的索引,包括支持索引。此设置不能更改 index.number_of_shards 设置 - indices
(可选,字符串或字符串数组)要恢复的索引和数据流的逗号分隔列表。默认为快照中的所有常规索引和常规数据流。 - partial
(可选,布尔)false,如果快照中包含的一个或多个索引没有主分片可用,则整个恢复操作将失败。默认为 false.
true,允许还原包含不可用分片的索引的部分快照。只有成功包含在快照中的分片才会被恢复。所有丢失的分片都将重新创建为空。 - rename_pattern
(可选,字符串)定义要应用于恢复的数据流和索引的重命名模式 - rename_replacement
(可选,字符串)定义重命名替换字符串。
示例
POST /_snapshot/my_fs_repo/snapshot_test1/_restore?wait_for_completion=true{"indices":"person,person1"
}
示例为恢复索引 person 和 person1
注意:在恢复索引之前 person 和 person1 必须关闭或者删除,否则将提示已经存在索引,无法执行恢复操作。关闭和删除的索引在恢复后会自动打开。
结果
{"snapshot": {"snapshot": "snapshot_test1","indices": ["person1","person"],"shards": {"total": 2,"failed": 0,"successful": 2}}
}
删除快照
DELETE /_snapshot/<repository>/<snapshot>
示例
DELETE /_snapshot/my_fs_repo/snapshot_2,snapshot_3
多个快照用逗号隔开
相关文章:
Elasticsearch 快照和恢复
文章目录 简介快照存储库说明创建或更新存储库接口说明路径参数查询参数请求正文 使用 fs 方式创建存储库验证储存库获取存储库信息删除存储库清理储存库 快照创建快照路径参数查询参数请求正文示例 获取快照查询参数示例 克隆快照查询参数示例 获取快照状态示例 恢复快照查询参…...
Packet Tracer - 检验 IPv4 和 IPv6 编址
Packet Tracer - 检验 IPv4 和 IPv6 编址 地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 IPv6 地址/前缀 R1 G0/0 10.10.1.97 255.255.255.224 N/A 2001:DB8:1:1::1/64 N/A S0/0/1 10.10.1.6 255.255.255.252 N/A 2001:DB8:1:2::2/64 N/A 本地链路 F…...
PHP8的表达式-PHP8知识详解
表达式是 PHP 最重要的基石。在 PHP8中,几乎所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是"任何有值的东西"。 最基本的表达式形式是常量和变量。当键入"$a 5",即将值"5"分配给变量 $a。&quo…...
亚马逊云科技七项生成式AI新产品生成式AI,为用户解决数据滞后等难题
7月27日,亚马逊云科技在纽约峰会上一连发布了七项生成式AI创新,涵盖了从底层硬件到工具、软件、再到生态的全方位更新,成为它在该领域迄今最全面的一次升级展示,同时也进一步降低了生成式AI的使用门槛。 亚马逊云科技凭借自身端到…...
图片等比例显示全部,兼容不同宽高比例图片
功能描述:预览瀑布流图片 点击预览不同的尺寸图片 <!-- 预览页面 --><div class"sea"><img :src"seaobj.url" alt""></div> .sea {z-index: 100;position: fixed;top: 0;text-align: center;background-colo…...
·[K8S:使用calico网络插件]:解决集群节点NotReady问题
文章目录 一:安装calico:1.1:weget安装Colico网络通信插件:1.2:修改calico.yaml网卡相关配置:1.2.1:查看本机ip 网卡相关信息:1.2.2:修改calico.yaml网卡interface相关信…...
泊松损坏图像的快速尺度间小波去噪研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
服务器端开发-golang dlv 远程调试
1。需要root权限的服务器代码调试 sudo ./appps to get piddlv attach pid --headless --listen:40000 --api-version2 --accept-multiclientattach the golang IDE or other IDE 2。不需要root权限的服务器代码调试,另一种选择 dlv --listen:40000 --headlesstr…...
STM32F103——时钟配置
目录 1、认识时钟树 1.1 什么是时钟树 1.2 时钟系统解析 1.2.1 时钟源 1.2.2 锁相环PLL 1.2.3 系统时钟SYSCLK 1.2.4 时钟信号输出MCO 2、如何修改主频 2.1 STM32F1时钟系统配置 2.2 STM32F1 时钟使能和配置 下列进行举例的开发板是原子哥的战舰开发板STM32F103ZET…...
【Linux】信号捕捉
目录 信号捕捉1.用户态与内核态1.1关于内核空间与内核态:1.2关于用户态与内核态的表征: 2.信号捕捉过程 信号捕捉 1.用户态与内核态 用户态:执行用户代码时,进程的状态 内核态:执行OS代码时,进程的状态 …...
超详情的开源知识库管理系统- mm-wiki的安装和使用
背景:最近公司需要一款可以记录公司内部文档信息,一些只是累计等,通过之前的经验积累,立马想到了 mm-wiki,然后就给公司搭建了一套,分享一下安装和使用说明: 当前市场上众多的优秀的文档系统百…...
安卓:UDP通信
目录 一、介绍 网络通信的三要素: (1)、IP地址: IPv4: IPv6: IP地址形式: IP常用命令: IP地址操作类: (2)、端口: (3)、协议: UDP协…...
clickhouse安装
clickhouse安装 在线安装和离线安装 一、环境准备: 1.检查系统是否支持clickhouse安装 (向量化支持) grep -q sse4_2 /proc/cpuinfo && echo “SSE 4.2 supported” || echo “SSE 4.2 not supported.” 2.下载对应的clickhouse包 复制运行之后,就会将对应的包加入…...
Cpp学习——string(2)
目录 编辑 容器string中的一些函数 1.capacity() 2.reserve() 3.resize() 4.push_back()与append() 5.find系列函数 容器string中的一些函数 1.capacity() capacity是string当中表示容量大小的函数。但是string开空间时是如何开的呢?现在就来看一下。先写…...
python进阶编程
lambda匿名函数 python使用lambda表达式来创建匿名函数 语法 // lambda 参数们:对参数的处理 lambda x : 2 * x // x 是参数, 2*x 是返回值 //使用lambda实现求和 sum lambda arg1, arg2 : agr1 arg2 print(sum(10,20)) // 将匿名函数封装在一…...
算法练习--leetcode 链表
文章目录 合并两个有序链表删除排序链表中的重复元素 1删除排序链表中的重复元素 2环形链表1环形链表2相交链表反转链表 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入&…...
Android性能优化—Apk瘦身优化
随着业务迭代,apk体积逐渐变大。项目中积累的无用资源,未压缩的图片资源等,都为apk带来了不必要的体积 增加。而APK 的大小会影响应用加载速度、使用的内存量以及消耗的电量。在讨论如何缩减应用的大小之前,有必要了解下应用 APK …...
前端主题切换方案——CSS变量
前言 主题切换是前端开发中老生常谈的问题,本文将介绍主流的前端主题切换实现方案——CSS变量 CSS变量 简介 编写CSS样式时,为了避免代码冗余,降低维护成本,一些CSS预编译工具(Sass/Less/Stylus)等都支…...
Java8 list多属性去重
大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 在 Java 开发中,我们经常会面临对 List 中的对象属性去重的需求。然而,当需要根据多个属性来进行去重时,情况会稍微复杂一些。本篇…...
kafka-保证数据不重复-生产者开启幂等性和事务的作用?
1. 生产者开启幂等性为什么能去重? 1.1 场景 适用于消息在写入到服务器日志后,由于网络故障,生产者没有及时收到服务端的ACK消息,生产者误以为消息没有持久化到服务端,导致生产者重复发送该消息,造成了消…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
