MongoDB进阶篇-索引(索引概述、索引的类型、索引相关操作、索引的使用)

news2024/11/24 3:04:37

文章目录

  • 1. 索引概述
  • 2. 索引的类型
    • 2.1 单字段索引
    • 2.2 复合索引
    • 2.3 其他索引
      • 2.3.1 地理空间索引(Geospatial Index)
      • 2.3.2 文本索引(Text Indexes)
      • 2.3.3 哈希索引(Hashed Indexes)
  • 3. 索引相关操作
    • 3.1 查看索引
    • 3.2 创建索引
      • 3.3.1 创建单字段索引
      • 3.3.2 创建复合索引
      • 3.3.3 创建文本索引
    • 3.4 移除索引
      • 3.4.1 移除指定索引
      • 3.4.2 移除所有索引
  • 4. 索引的使用
    • 4.1 执行计划
    • 4.2 执行计划中各个字段的含义
    • 4.3 stage字段的取值及含义
    • 4.4 覆盖查询

阅读本文前可以先阅读以下文章:

  • MongoDB快速入门(MongoDB简介、MongoDB的应用场景、MongoDB中的基本概念、MongoDB的数据类型、MongoDB的安装与部署、MongoDB的常用命令)
  • MongoDB的常用命令(数据库操作、集合操作、文档操作)

1. 索引概述

MongoDB 索引的官网文档:索引-MongoDB手册


索引支持在 MongoDB 中高效执行查询。如果没有索引,MongoDB 就必须扫描集合中的每个文档以返回查询结果。如果查询存在适当的索引,MongoDB 就可以使用该索引来限制其必须扫描的文档数

索引可提高查询性能,但添加索引会影响写入操作的性能。对于写入读取率高的集合,由于每次插入操作都必须同时更新所有索引,因此会带来较高的索引成本

MongoDB 索引使用 B-Tree 数据结构(MySQL 是 B+Tree)

2. 索引的类型

2.1 单字段索引

MongoDB 支持在文档的单个字段上创建用户定义的升序索引或降序索引,称为单字段索引(Single Field Index)

对于单个字段索引和排序操作,索引键的排序顺序(即升序或降序)并不重要,因为 MongoDB 可以在任何方向上遍历索引

2.2 复合索引

MongoDB 支持多个字段的自定义索引,即复合索引(Compound Index)

复合索引中列出的字段顺序具有重要意义。例如,如果复合索引由 { user_id: 1, score: -1 } 组成,则索引首先会按 user_id 正序排序,然后在每个 user_id 的值内,再按 score 倒序排序

2.3 其他索引

2.3.1 地理空间索引(Geospatial Index)

为了支持对地理空间坐标数据的有效查询,MongoDB 提供了两种特殊的索引:返回结果时使用平面几何的二维索引和返回结果时使用球面几何的二维球面索引

2.3.2 文本索引(Text Indexes)

文本索引的特点:

  • 分词:MongoDB 在创建文本索引时会对字段内容进行分词处理,将文本分解成单词或术语(tokens)
  • 权重:可以为不同的字段指定不同的权重,以便在搜索时影响文档的相关性得分
  • 停用词:MongoDB 会忽略某些常用词(如 “the”、“and” 等),这些词被称为停用词。MongoDB 有一个内置的停用词列表,也可以自定义停用词列表
  • 语言支持:MongoDB 的文本索引支持多种语言的分词和搜索

注意事项:

  • 文本索引不存储停止词和词干。这意味着它们不会影响索引的大小
  • 文本索引不能用于文本字段中的二进制数据
  • 文本索引不能用于数组字段中的字符串元素
  • $text 查询不能与 $$$ 运算符一起使用

2.3.3 哈希索引(Hashed Indexes)

为了支持基于散列的分片,MongoDB 提供了散列索引类型,它对字段值的散列进行索引。这些索引在其范围内的值分布更加随机,但只支持相等匹配,不支持基于范围的查询

3. 索引相关操作

3.1 查看索引

查看索引的语法

db.collection.getIndexes()

查看 comment 集合中所有的索引

db.collection.getIndexes()

查询结果如下

[ { v: 2, key: { _id: 1 }, name: '_id_' } ]

结果中显示的是默认的 _id_ 索引(MongoDB 在创建集合的过程中,会在 _id 字段上创建一个唯一的索引,默认名字为 _id_,该索引可防止插入两个具有相同 _id 值的文档)

  • _id 索引是唯一索引,因此 _id 值不能重复
  • 在分片集群中,通常使用 _id 作为片键

3.2 创建索引

创建索引的语法

db.collection.createIndex(keys, options)
参数名类型描述必需
keys文档指定索引的字段和索引类型。对于文本索引,字段类型应该设置为 "text"。可以指定单个字段或多个字段
options文档索引的额外选项。这是一个可选参数,可以包含多个字段

options 参数的详细说明:

选项类型描述默认值
background布尔是否在后台创建索引。如果为 true,MongoDB 将在后台创建索引,这样就不会阻塞其他数据库操作false
unique布尔是否创建唯一索引。如果为 true,则索引字段的值必须是唯一的false
name字符串索引的名称。如果未指定,MongoDB 会自动生成一个名称自动生成
partialFilterExpression文档指定部分索引的过滤条件。只有满足条件的文档才会包含在索引中
sparse布尔是否创建稀疏索引。如果为 true,则索引只包含具有指定字段的文档,忽略没有该字段的文档false
expireAfterSeconds整数对于具有日期类型的字段,指定文档在集合中的生存时间(TTL)
storageEngine文档指定索引的存储引擎配置使用默认存储引擎配置
weights文档对于文本索引,为索引中的每个字段指定权重。权重越高,字段在文本搜索中的相关性得分越高所有字段权重相等

3.3.1 创建单字段索引

对 user_id 字段建立单字段索引

db.comment.createIndex({ user_id: 1 });

再次查看 comment 集合中所有的索引

[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  { v: 2, key: { user_id: 1 }, name: 'user_id_1' }
]

3.3.2 创建复合索引

对 user_id 和 nickname 建立复合(Compound)索引

db.comment.createIndex({ userid: 1, nickname: -1 });

再次查看 comment 集合中所有的索引

[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  { v: 2, key: { user_id: 1 }, name: 'user_id_1' },
  {
    v: 2,
    key: { userid: 1, nickname: -1 },
    name: 'userid_1_nickname_-1'
  }
]

3.3.3 创建文本索引

对 content 字段建立单字段索引

db.comment.createIndex({ content: "text" });

3.4 移除索引

3.4.1 移除指定索引

db.collection.dropIndex(index);

删除 comment 集合中 user_id 字段上的升序索引

db.comment.dropIndex(
    { 
        user_id: 1 
    }
);

3.4.2 移除所有索引

db.collection.dropIndexes()

删除 comment 集合中的所有索引

db.comment.dropIndexes()

_id 的字段的索引是无法删除的,只能删除非 _id 字段的索引

4. 索引的使用

4.1 执行计划

分析查询性能(Analyze Query Performance)通常使用执行计划(Explain Plan)来查看查询的情况,如查询耗费的时间、是否基于索引查询等

db.collection.find(query,options).explain(options)
参数名类型描述必需
querydocument查询选择器,用于指定查询条件
optionsdocument可选的。用于修改查询的默认行为的各种选项,如排序、限制等
explainfunction用于获取查询执行计划的详细信息是(调用时)
explainOptionsdocument可选的。用于修改解释操作的默认行为的各种选项

每个参数的详细解释:

  • query: 这是一个文档,用于定义查询条件。它可以是简单的字段等值查询,也可以是复杂的条件组合,包括逻辑运算符和正则表达式
  • options: 这是一个文档,可以包含多个键,用于控制查询的行为。常见的选项包括:
    • sort: 排序条件
    • limit: 限制返回的文档数量
    • skip: 跳过文档的数量。
    • projection: 投影,用于指定返回的字段
  • explain: 这是一个函数,当你在查询后面调用它时,MongoDB 不会返回查询结果,而是返回查询执行计划的详细信息。这有助于理解查询是如何执行的,以及如何优化查询
  • explainOptions: 这是一个文档,用于控制解释操作的输出。例如,可以指定是否返回所有阶段的执行计划或者只返回获胜计划

根据 user_id 字段查询数据

db.comment.find({ user_id: "1003" }).explain();

MongoDB 返回的结果

{
  explainVersion: '1',
  queryPlanner: {
    namespace: 'test.comment',
    parsedQuery: {
      user_id: {
        '$eq': '1003'
      }
    },
    indexFilterSet: false,
    queryHash: 'B7F3AE51',
    planCacheKey: '8C1EE785',
    optimizationTimeMillis: 0,
    maxIndexedOrSolutionsReached: false,
    maxIndexedAndSolutionsReached: false,
    maxScansToExplodeReached: false,
    prunedSimilarIndexes: false,
    winningPlan: {
      isCached: false,
      stage: 'COLLSCAN',
      filter: {
        user_id: {
          '$eq': '1003'
        }
      },
      direction: 'forward'
    },
    rejectedPlans: []
  },
  command: {
    find: 'comment',
    filter: {
      user_id: '1003'
    },
    '$db': 'test'
  },
  serverInfo: {
    host: 'LAPTOP-G7HILK54',
    port: 27017,
    version: '8.0.3',
    gitVersion: '89d97f2744a2b9851ddfb51bdf22f687562d9b06'
  },
  serverParameters: {
    internalQueryFacetBufferSizeBytes: 104857600,
    internalQueryFacetMaxOutputDocSizeBytes: 104857600,
    internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
    internalDocumentSourceGroupMaxMemoryBytes: 104857600,
    internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
    internalQueryProhibitBlockingMergeOnMongoS: 0,
    internalQueryMaxAddToSetBytes: 104857600,
    internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
    internalQueryFrameworkControl: 'trySbeRestricted',
    internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
  },
  ok: 1
}

重点关注 winningPlan 中的 stage 字段(COLLSCAN 表示全盘扫描)

在这里插入图片描述

下面对 user_id 字段建立索引

db.comment.createIndex({ user_id: 1 });

再次查看执行计划

{
  explainVersion: '1',
  queryPlanner: {
    namespace: 'test.comment',
    parsedQuery: {
      user_id: {
        '$eq': '1003'
      }
    },
    indexFilterSet: false,
    queryHash: 'B7F3AE51',
    planCacheKey: '57E4C731',
    optimizationTimeMillis: 0,
    maxIndexedOrSolutionsReached: false,
    maxIndexedAndSolutionsReached: false,
    maxScansToExplodeReached: false,
    prunedSimilarIndexes: false,
    winningPlan: {
      isCached: false,
      stage: 'FETCH',
      inputStage: {
        stage: 'IXSCAN',
        keyPattern: {
          user_id: 1
        },
        indexName: 'user_id_1',
        isMultiKey: false,
        multiKeyPaths: {
          user_id: []
        },
        isUnique: false,
        isSparse: false,
        isPartial: false,
        indexVersion: 2,
        direction: 'forward',
        indexBounds: {
          user_id: [
            '["1003", "1003"]'
          ]
        }
      }
    },
    rejectedPlans: []
  },
  command: {
    find: 'comment',
    filter: {
      user_id: '1003'
    },
    '$db': 'test'
  },
  serverInfo: {
    host: 'LAPTOP-G7HILK54',
    port: 27017,
    version: '8.0.3',
    gitVersion: '89d97f2744a2b9851ddfb51bdf22f687562d9b06'
  },
  serverParameters: {
    internalQueryFacetBufferSizeBytes: 104857600,
    internalQueryFacetMaxOutputDocSizeBytes: 104857600,
    internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
    internalDocumentSourceGroupMaxMemoryBytes: 104857600,
    internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
    internalQueryProhibitBlockingMergeOnMongoS: 0,
    internalQueryMaxAddToSetBytes: 104857600,
    internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
    internalQueryFrameworkControl: 'trySbeRestricted',
    internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
  },
  ok: 1
}

可以发现,stage 字段已经变成了 FETCH,inputStage 属性里面的 stage 字段变成了 IXSCAN(基于索引的扫描)

在这里插入图片描述

4.2 执行计划中各个字段的含义

字段名描述
explainVersion解释输出的版本号。
queryPlanner查询计划器的详细信息。
namespace执行查询的命名空间(数据库和集合)。
parsedQuery解析后的查询条件。
indexFilterSet是否设置了索引过滤器。
queryHash查询的哈希值。
planCacheKey用于查询缓存的键。
optimizationTimeMillis查询优化所花费的时间(毫秒)。
maxIndexedOrSolutionsReached是否达到了索引 OR 解决方案的最大数量。
maxIndexedAndSolutionsReached是否达到了索引 AND 解决方案的最大数量。
maxScansToExplodeReached是否达到了索引爆炸扫描的最大数量。
prunedSimilarIndexes是否修剪了相似的索引。
winningPlan被选中的查询计划。
isCached是否从计划缓存中检索到计划。
stage查询执行的阶段。
inputStage当前阶段的输入阶段(用于嵌套阶段)。
keyPattern索引的键模式。
indexName索引的名称。
isMultiKey索引是否是多键索引。
multiKeyPaths包含多键路径的索引字段。
isUnique索引是否是唯一索引。
isSparse索引是否是稀疏索引。
isPartial索引是否是部分索引。
indexVersion索引的版本。
direction索引扫描的方向。
indexBounds索引扫描的边界。
rejectedPlans被拒绝的查询计划列表。
command执行的命令的详细信息。
serverInfo服务器信息,包括主机名、端口、版本等。
serverParameters影响查询执行的服务器参数。
ok命令是否成功执行的标志。

4.3 stage字段的取值及含义

阶段名称描述
COLLSCAN集合扫描,即全集合扫描,没有使用索引。
IXSCAN索引扫描,使用索引来查找文档。
FETCH获取阶段,用于检索索引扫描后找到的文档的其余字段。
SHARD_MERGE在分片集群中,合并来自不同分片的查询结果。
SORT排序阶段,对结果进行排序。
LIMIT限制阶段,限制返回的文档数量。
SKIP跳过阶段,跳过指定数量的文档。
IDHACK对于 _id 的查询,MongoDB 可以使用特殊的优化。
SHARDING_FILTER在分片集群中,用于过滤掉不属于当前查询的分片数据的阶段。
PROJECTION投影阶段,只返回文档中的特定字段。
TEXT文本搜索阶段,用于文本索引的搜索。
GEONEAR地理空间查询阶段,用于查找最接近某个点的文档。
GEOFILTER地理空间过滤阶段,用于过滤地理空间查询的结果。
COUNT计数阶段,用于 count 操作。
COUNT_SCAN使用索引进行计数扫描的阶段。
COUNT_SCAN_WITH_FILTER使用索引进行计数扫描,并且应用过滤器的阶段。
DISTINCT_SCAN用于 distinct 操作的索引扫描阶段。
SUBPLAN子计划阶段,用于处理复杂查询的一部分。
IXHASH使用散列索引的阶段。
FORCED_SCAN强制进行集合扫描,即使存在索引。
COVERED索引覆盖查询,所有需要的字段都在索引中,不需要回表查询。
EOF查询结束。

4.4 覆盖查询

当查询条件和查询的投影仅包含索引字段时,MongoDB 会直接从索引返回结果,而不扫描任何文档或将文档带入内存,这些覆盖的查询非常高效(类似于 MySQL 中的覆盖索引)


db.comment.find(
  { user_id: "1003" },
  { user_id: 1, _id: 0 }
).explain();

MongoDB 返回的结果

{
  explainVersion: '1',
  queryPlanner: {
    namespace: 'test.comment',
    parsedQuery: {
      user_id: {
        '$eq': '1003'
      }
    },
    indexFilterSet: false,
    queryHash: 'DC80EEEF',
    planCacheKey: 'B8237218',
    optimizationTimeMillis: 0,
    maxIndexedOrSolutionsReached: false,
    maxIndexedAndSolutionsReached: false,
    maxScansToExplodeReached: false,
    prunedSimilarIndexes: false,
    winningPlan: {
      isCached: false,
      stage: 'PROJECTION_COVERED',
      transformBy: {
        user_id: 1,
        _id: 0
      },
      inputStage: {
        stage: 'IXSCAN',
        keyPattern: {
          user_id: 1
        },
        indexName: 'user_id_1',
        isMultiKey: false,
        multiKeyPaths: {
          user_id: []
        },
        isUnique: false,
        isSparse: false,
        isPartial: false,
        indexVersion: 2,
        direction: 'forward',
        indexBounds: {
          user_id: [
            '["1003", "1003"]'
          ]
        }
      }
    },
    rejectedPlans: []
  },
  command: {
    find: 'comment',
    filter: {
      user_id: '1003'
    },
    projection: {
      user_id: 1,
      _id: 0
    },
    '$db': 'test'
  },
  serverInfo: {
    host: 'LAPTOP-G7HILK54',
    port: 27017,
    version: '8.0.3',
    gitVersion: '89d97f2744a2b9851ddfb51bdf22f687562d9b06'
  },
  serverParameters: {
    internalQueryFacetBufferSizeBytes: 104857600,
    internalQueryFacetMaxOutputDocSizeBytes: 104857600,
    internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,
    internalDocumentSourceGroupMaxMemoryBytes: 104857600,
    internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,
    internalQueryProhibitBlockingMergeOnMongoS: 0,
    internalQueryMaxAddToSetBytes: 104857600,
    internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,
    internalQueryFrameworkControl: 'trySbeRestricted',
    internalQueryPlannerIgnoreIndexWithCollationForRegex: 1
  },
  ok: 1
}

在这里插入图片描述

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

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

相关文章

Ubuntu20.04 Rk3588 交叉编译ffmpeg7.0

firefly 公司出的rk3588的设备,其中已经安装了gcc 交叉编译工具,系统版本是Ubuntu20.04。 使用Ubuntu20.04 交叉编译ffmpeg_ubuntu下配置ffmpeg交叉编译器为arm-linux-gnueabihf-gcc-CSDN博客文章浏览阅读541次。ubuntu20.04 交叉编译ffmpeg_ubuntu下配…

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

Java项目-基于SpringBoot+vue的租房网站设计与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

24.UE5枚举,怪物分类,龙卷风技能

2-26 枚举、怪物分类、龙旋风技能、掉落概率_哔哩哔哩_bilibili 目录 1.枚举 1.1枚举类型的创建 1.2 将枚举类型绑定到怪物蓝图上 1.3枚举类型的使用 1.3.1创建新的掉落物 1.3.2更改怪物掉落逻辑 2.龙卷风技能 2.1输入映射 2.2龙卷风发射物的创建 2.3龙卷风伤害逻辑…

推荐几个 VSCode 流程图工具

Visual Studio Code(简称VSCode)是一个由微软开发的免费、开源的代码编辑器。 VSCode 发布于 2015 年,而且很快就成为开发者社区中广受欢迎的开发工具。 VSCode 可用于 Windows、macOS 和 Linux 等操作系统。 VSCode 拥有一个庞大的扩展市…

解决 VMware 嵌套虚拟化提示 关闭“侧通道缓解“

最近给电脑做了新版的 Windows 11 LTSC操作系统,在启动VMware Workstation时,提示"此虚拟机已启用侧通道缓解,可增强安全性,但也会降低性能",但是我没有启用 Hyper-V 相关的任何功能以及 WSL, 从…

Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复

目录 安装包 flume的部署 负载均衡测试 故障恢复 安装包 在这里给大家准备好了flume的安装包 通过网盘分享的文件:apache-flume-1.9.0-bin.tar.gz 链接: https://pan.baidu.com/s/1DXMA4PxdDtUQeMB4J62xoQ 提取码: euz7 --来自百度网盘超级会员v4的分享 ----…

P2TR(Taproot 交易)和Musig2

目录 P2TR(Taproot 交易)和Musig2 P2TR(Taproot 交易) Musig2 总结 P2TR(Taproot 交易)和Musig2 都是比特币和区块链技术中的先进功能,它们各自具有独特的特点和应用场景。以下是两者的区别及举例说明: P2TR(Taproot 交易) 定义: P2TR是一种比特币交易类型,旨…

Web 入门

HTTP 一、概念 Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 二、特点 基于TCP协议:面向连接,安全。基于请求-响应模型的:一次请求对应一次响应。HTTP协议是无状态的协…

Docker+Nginx | Docker(Nginx) + Docker(fastapi)反向代理

在DockerHub搜 nginx,第一个就是官方镜像库,这里使用1.27.2版本演示 1.下载镜像 docker pull nginx:1.27.2 2.测试运行 docker run --name nginx -p 9090:80 -d nginx:1.27.2 这里绑定了宿主机的9090端口,只要访问宿主机的9090端口&#…

Postman之变量操作

系列文章目录 1.Postman之安装及汉化基本使用介绍 2.Postman之变量操作 3.Postman之数据提取 4.Postman之pm.test断言操作 5.Postman之newman Postman之变量操作 1.pm.globals全局变量2.pm.environment环境变量3.pm.collectionVariables集合变量4.pm.variables5.提取数据-设置变…

鸿蒙动画开发08——帧动画

1、概 述 帧动画通过应用onFrame逐帧回调的方式,让开发者在应用侧的每一帧都可以设置属性值,从而实现设置了该属性值对应组件的动画效果。 相比于属性动画,开发者可感知动画的过程,实时修改UI侧的值,具有事件可实时响…

《Python基础》之字符串格式化输出

目录 方式一 1、带索引 {0} 2、不带索引 { } 3、{自定义变量} 方式二 方式三 控制浮点数精度 方式一 使用.format( )进行格式化 1、带索引 {0} name boy age 18 high 183.55555 gender man print(姓名是:{0},年龄是:{1},身高是:{2},性别是:{3},身高是…

OpenCV相机标定与3D重建(3)校正鱼眼镜头畸变的函数calibrate()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::fisheye::calibrate 函数是 OpenCV 中用于校正鱼眼镜头畸变的一个重要函数。该函数通过一系列棋盘格标定板的图像来计算相机的内参矩阵和畸变…

Redis五大基本类型——Set集合命令详解(命令用法详解+思维导图详解)

目录 一、Set集合类型介绍 二、常见命令 1、SADD 2、SMEMBERS 3、SISMEMBER 4、SCARD 5、SRANDMEMBER 6、SPOP 7、SMOVE 8、SREM ​编辑 9、集合间操作 (1)SINTER (2)SINTERSTORE (3)SUNION…

CCE-基础

背景: 虚拟化产生解决物理机资源浪费问题,云计算出现实现虚拟化资源调度和管理,容器出现继续压榨虚拟化技术产生的资源浪费,用命名空间隔离(namespace) 灰度升级(升级中不影响业务&#xff09…

Chrome离线安装包下载

1、问Chrome的官网:https://www.google.cn/chrome/ 直接下载的是在线安装包,安装需要联网。 2、如果需要在无法联网的设备上安装Chrome,需要在上面的地址后面加上?standalone1。 Chrome离线安装包下载地址:https://www.google.c…

二进制 分析工具:Radare2、r2frida、Binutils、file、string、as、nm、ldd、objdump、readelf、strip

1、二进制 分析工具 工欲善其事,必先利其器,在二进制安全的学习中,​使用工具尤为重要。遇到一个不熟悉的文件时, 首先要确定 "这是什么类型的文件",回答这个问题的首要原则是,绝不要根据文件的扩…

快速图像识别:落叶植物叶片分类

1.背景意义 研究背景与意义 随着全球生态环境的变化,植物的多样性及其在生态系统中的重要性日益受到关注。植物叶片的分类不仅是植物学研究的基础,也是生态监测、农业管理和生物多样性保护的重要环节。传统的植物分类方法依赖于人工观察和专家知识&…

Chrome 浏览器 131 版本新特性

Chrome 浏览器 131 版本新特性 一、Chrome 浏览器 131 版本更新 1. 在 iOS 上使用 Google Lens 搜索 自 Chrome 126 版本以来,用户可以通过 Google Lens 搜索屏幕上看到的任何图片或文字。 要使用此功能,请访问网站,并点击聚焦时出现在地…