当前位置: 首页 > news >正文

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

文章目录

  • 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
}

在这里插入图片描述

相关文章:

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

文章目录 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 查看索…...

使用FFmpeg实现视频与GIF的画中画效果

用FFmpeg命令行工具将GIF动画作为画中画(Picture-in-Picture,简称PiP)叠加到视频上。FFmpeg是一个强大的多媒体框架,能够处理几乎所有格式的音频和视频文件。通过这个教程,你将学会如何将一个小的GIF动画循环播放&…...

车载信息安全框架 --- 车载信息安全相关事宜

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…...

Unreal5从入门到精通之EnhancedInput增强输入系统详解

前言 从Unreal5开始,老版的输入系统,正式替换为EnhancedInput增强型输入系统,他们之间有什么区别呢? 如果有使用过Unity的同学,大概也知道,Unity也在2020版本之后逐渐把输入系统也升级成了新版输入系统,为什么Unreal和Unity都热衷于升级输入系统呢?这之间又有什么联系…...

泛微E9与金蝶云星空的集成方案:实现审批流程与财务管理的无缝对接

泛微E9与金蝶云星空的集成方案:实现审批流程与财务管理的无缝对接 背景介绍: 在企业日常运营中,泛微OA-E9和金蝶云星空是两个关键的系统。泛微OA-E9是一款广受企业青睐的办公自动化软件,它通过流程管理、文档管理、协同办公等模…...

理解设计模式与 UML 类图:构建稳健软件架构的基石

在软件开发的广阔天地里,设计模式与 UML(统一建模语言)类图犹如两座灯塔,为开发者照亮前行的道路,指引着我们构建出高质量、可维护且易于扩展的软件系统。今天,就让我们一同深入探索单一职责、开闭原则、简…...

FastAPI重载不生效?解决PyCharm中Uvicorn无法重载/重载缓慢的终极方法!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 重载缓慢 📒📝 问题概述🚨 相关原因📝 解决方案一📝 解决方案二📝 解决方案三📝 解决方案四⚓️ 相关链接 ⚓️📖 介绍 📖 在使用FastAPI开发时,reload=True 本应让你在修改代码后自动重启服务,提升开发效率…...

最新子比主题zibll8.0开心版源码 无加密无后门

Zibll子比主题专为博客、自媒体及资讯类网站精心打造,以其简约而不失高雅的设计风格,为网站增添独特魅力与视觉美感。 8.0更新内容: 新增发帖选择板块、话题、标签时支持搜索,同时优化了选择栏目,更加方便快捷 新增小工具文章列表…...

【数据分析】认清、明确

1、什么是数据分析。 - 通过对大量的数据进行科学的分析。 - 得出结论,提出建议,辅助公司企业的决策。2、数据分析分为几步。 - 1.明确目的! - 2.收集数据!自己的数据! 自动化采集的数据! - 3.数据处理! - 4.数据分析!数据分析(业务)数据挖掘(代码算法…...

工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程

一.背景 公司是非煤采矿业,核心业务是采选,大型设备多,安全风险因素多。当下政府重视安全,头部技术企业的安全解决方案先进但价格不低,作为民营企业对安全投入的成本很敏感。利用我本身所学,准备搭建公司的…...

人工智能(AI)与机器学习(ML)基础知识

目录 1. 人工智能与机器学习的核心概念 什么是人工智能(AI)? 什么是机器学习(ML)? 什么是深度学习(DL)? 2. 机器学习的三大类型 (1)监督式学…...

得物彩虹桥架构演进之路-负载均衡篇

文 / 新一 一、前言 一年一更的彩虹桥系列又来了,在前面两期我们分享了在稳定性和性能2个层面的一些演进&优化思路。近期我们针对彩虹桥 Proxy 负载均衡层面的架构做了一次升级,目前新架构已经部署完成,生产环境正在逐步升级中&#xf…...

Jmeter中的断言(四)

13--XPath断言 功能特点 数据验证:验证 XML 响应数据是否包含或不包含特定的字段或值。支持 XPath 表达式:使用 XPath 表达式定位和验证 XML 数据中的字段。灵活配置:可以设置多个断言条件,满足复杂的测试需求。 配置步骤 添加…...

vue2 src_Todolist编辑($nextTick)

main.js //引入Vue import Vue from "vue"; //引入App import App from ./App;//关闭Vue的生产提示 Vue.config.productionTip false;new Vue({el: #app,render: h > h(App),beforeCreate() {//事件总线Vue.prototype.$bus this;} });App.vue <template>…...

driver.js实现页面操作指引

概述 在访问某些网站的时候&#xff0c;第一次进去你会发现有个操作指引&#xff0c;本文引用driver.js&#xff0c;教你在你的页面也加入这般高大上的操作指引。 实现效果 实现 driver.js简介 driver.js是一个功能强大且高度可定制的基于原生JavaScript开发的新用户引导库…...

ffmpeg区域颜色覆盖

ffmpeg去除水印(遮盖指定区域)的几种办法_ffmpeg去水印-CSDN博客 ffmpeg -i a.mp4 -vf "drawboxx1560:y30:w310:h100:tfill" b.mp4 drawbox在视频帧上绘制一个矩形&#xff1a; x和y&#xff1a;矩形左上角的坐标。默认值是0。 w和h&#xff1a;矩形的宽度和高度。…...

【Python TensorFlow】进阶指南(续篇三)

在前几篇文章中&#xff0c;我们探讨了TensorFlow的高级功能&#xff0c;包括模型优化、分布式训练、模型解释等多个方面。本文将进一步深入探讨一些更具体和实用的主题&#xff0c;如模型持续优化的具体方法、异步训练的实际应用、在线学习的实现细节、模型服务化的最佳实践、…...

QT 实现仿制 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现

网络调试助手&#xff1a; 提前准备&#xff1a;在编写代码前&#xff0c;要在.pro工程文件中&#xff0c;添加network模块。 服务端&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QtWidgets> #inclu…...

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-31

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…...

面试题---深入源码理解MQ长轮询优化机制

引言 在分布式系统中&#xff0c;消息队列&#xff08;MQ&#xff09;作为一种重要的中间件&#xff0c;广泛应用于解耦、异步处理、流量削峰等场景。其中&#xff0c;延时消息和定时消息作为MQ的高级功能&#xff0c;能够进一步满足复杂的业务需求。为了实现这些功能&#xf…...

Qwen3.5-35B-A3B-AWQ-4bit企业降本增效案例:替代人工审核10万+商品图的自动化方案

Qwen3.5-35B-A3B-AWQ-4bit企业降本增效案例&#xff1a;替代人工审核10万商品图的自动化方案 1. 企业面临的商品图审核挑战 在电商行业&#xff0c;商品图片审核是一项繁重但至关重要的工作。以某大型电商平台为例&#xff0c;每天需要审核超过10万张商品图片&#xff0c;传统…...

SAP-ABAP:SAP ABAP 经典弹窗函数 POPUP_TO_CONFIRM 完全指南

SAP ABAP 经典弹窗函数 POPUP_TO_CONFIRM 完全指南在SAP开发中&#xff0c;如何优雅地让用户确认“你确定要删除这条数据吗&#xff1f;”——答案就是 POPUP_TO_CONFIRM。在 ABAP 开发的世界里&#xff0c;与用户的交互不仅仅是输入输出。很多时候&#xff0c;我们需要在程序执…...

百考通:一站式计算机与工程类项目学习与精准开发平台

在信息技术高速发展的今天&#xff0c;无论是高校学生、编程爱好者还是行业从业者&#xff0c;都面临着项目实践资源分散、学习路径不清晰、开发效率低下的困境。百考通&#xff08;https://www.baikaotongai.com&#xff09; 应运而生&#xff0c;以一站式项目资源聚合平台的姿…...

标普油气ETF富国(513350.SH)逆势走强、半导体承压:地缘扰动与产业逻辑共振下的ETF分化走势

4月2日&#xff0c;市场全天震荡调整&#xff0c;创业板指、科创50指数均跌超2%。板块方面&#xff0c;医药板块逆势走强&#xff0c;油气股表现活跃&#xff0c;光纤概念反复走强&#xff1b;算力租赁概念集体调整。ETF方面&#xff0c;标普油气ETF富国&#xff08;513350.SH&…...

OpenClaw日志分析实战:Phi-3-vision-128k-instruct多维度错误模式识别

OpenClaw日志分析实战&#xff1a;Phi-3-vision-128k-instruct多维度错误模式识别 1. 为什么需要智能日志分析 凌晨三点&#xff0c;我被手机警报惊醒——服务器又崩了。揉着惺忪睡眼打开终端&#xff0c;面对满屏的日志文件&#xff0c;那种熟悉的无力感再次袭来。这已经是本…...

Mavlink协议解析:从Pixhawk飞控到QGC地面站的完整通信流程

Mavlink协议深度解析&#xff1a;构建Pixhawk与QGC的高效通信桥梁 当Pixhawk飞控的LED指示灯开始规律闪烁&#xff0c;QGC地面站的地图上突然出现了一个蓝色圆点——这看似简单的连接背后&#xff0c;隐藏着一套精密的通信语言体系。Mavlink协议就像无人机系统的神经网络&#…...

OpenClaw+Phi-3-mini-128k-instruct低成本方案:自建文本生成流水线

OpenClawPhi-3-mini-128k-instruct低成本方案&#xff1a;自建文本生成流水线 1. 为什么选择本地部署Phi-3-mini-128k-instruct 去年我开始尝试用AI辅助写作时&#xff0c;发现商用API存在两个痛点&#xff1a;一是长文本生成成本高得惊人&#xff0c;二是某些敏感内容会被平…...

Go Channel 缓冲区机制分析

Go Channel 缓冲区机制分析 在Go语言的并发编程中&#xff0c;Channel是协程间通信的核心机制之一。其缓冲区机制的设计直接影响程序的性能和稳定性。理解缓冲区的运作原理&#xff0c;能够帮助开发者更高效地利用Channel&#xff0c;避免死锁或资源浪费。本文将从缓冲区的本质…...

电路板测试点设计与自动化测试实践

1. 测试点的本质作用在电子制造领域&#xff0c;测试点&#xff08;Test Point&#xff09;是电路板上那些看似多余的小圆点&#xff0c;但它们却是保证产品质量的关键设计。作为一名有十年经验的硬件工程师&#xff0c;我见过太多因为忽视测试点设计而导致量产失败的案例。测试…...

OpenClaw长任务优化:Qwen3-32B本地接口降低Token消耗实测

OpenClaw长任务优化&#xff1a;Qwen3-32B本地接口降低Token消耗实测 1. 为什么需要关注长任务Token消耗 去年冬天&#xff0c;当我第一次用OpenClaw整理全年积累的2000多份PDF文档时&#xff0c;账单上的API费用让我倒吸一口凉气——这个简单的文件分类任务竟然消耗了价值30…...