首页/数据/NoSQL 速查

NoSQL 速查

MongoDB 命令与聚合、Elasticsearch 查询与集群、ClickHouse 表引擎与查询、时序数据库与键值选型:非关系型数据库速查。

共 322 条更新于 2026-10-12所属领域:数据
共 322 条

MongoDB

文档模型、CRUD、索引与聚合管道

find 条件查询与投影热门

find(filter, projection) 返回游标:filter 支持嵌套字段与各类操作符,projection 控制返回字段(默认总是带 _id)。

mongosh 连接 MongoDB 实例热门

mongosh 是官方命令行 Shell:本地默认连接 127.0.0.1:27017,远程可用 --host/--port 选项或直接传连接串;进入后可执行 JavaScript 与数据库命令。

聚合管道总览热门

aggregate 把文档流依次通过各阶段处理:过滤、分组、投影、排序、联表、写出;每个阶段输出交给下一阶段。

insertOne / insertMany 写入文档

插入单条或多条文档;insertMany 默认顺序写入(ordered:true),传 ordered:false 时单条失败仍继续,返回体里可定位失败项。

更新操作符 $set / $unset / $inc / $rename

局部修改字段的四件套:$set 赋值或新增、$unset 删除字段、$inc 原子自增、$rename 重命名字段;比整文档替换更安全。

createIndex 创建索引

索引创建语法 createIndex(keys, options):keys 描述字段与方向,options 可命名、加唯一约束或特殊类型;构建期间业务一般可继续读写。

MongoDB 连接串 URI 参数

标准连接串格式 mongodb://[用户:密码@]主机:端口/库?参数;常用参数有 authSource、replicaSet、tls、readPreference,多主机写逗号分隔。

explain 解读查询计划

explain("executionStats") 展示索引选择与执行统计:重点看 winningPlan 的阶段(IXSCAN/COLLSCAN)以及扫描文档数与返回数之比。

创建数据库用户与内置角色

db.createUser 创建账号并用 roles 授权;常用内置角色 read、readWrite、dbAdmin、userAdmin、clusterMonitor,跨库角色用 {role, db} 形式声明。

deleteOne / deleteMany 与清空集合

按条件删除文档:deleteOne 删除首条匹配,deleteMany 删除全部匹配,drop() 直接删除整个集合(更快但索引一并消失)。

聚合 $group 分组统计

$group 按键分组并用累加器计算:_id 定义分组键,$sum/$avg/$min/$max/$push/$addToSet/$first/$last 产出指标。

rs.status 查看复制集状态

rs.status() 展示复制集成员与同步状态:重点看每个成员的 stateStr、health、optimeDate 与同步来源,是复制集体检第一步。

updateOne / updateMany 批量更新

updateOne 只改匹配到的第一条,updateMany 修改全部匹配;返回 matchedCount 与 modifiedCount 用于核对影响面。

聚合 $lookup 关联查询

$lookup 在管道内做左外连接:localField 与 foreignField 相等的文档放入 as 数组,替代应用侧两次查询。

游标 sort / limit / skip 与翻页

在游标上链式调用 sort、limit、skip;mongosh 里可用 it 继续取下一批,toArray() 一次取完(注意内存占用)。

数组操作符 $push / $pull / $addToSet

维护数组字段:$push 追加(可配 $each/$slice/$sort)、$addToSet 去重添加、$pull 按条件移除、$pop 弹出首尾元素。

ISODate 与时间范围查询

日期以 UTC 毫秒存储:mongosh 用 ISODate("...Z") 构造,查询区间按 UTC 换算,避免本地时区偏移踩坑。

聚合 $unwind 展开数组

$unwind 把数组字段拆成多条输出文档(每条对应一个元素),是数组聚合与 $group 组合的常见前置步骤。

authSource 认证库与 db.auth

账号在哪个库创建就在哪个库校验:连接串未写 authSource 时默认取连接串里的库名,写错目录就会报 Authentication failed。

findOne 取单条文档

返回满足条件的第一条文档,不存在时返回 null;适合按 _id 或业务键点查与存在性探测。

点号路径查询嵌套字段

嵌套对象与数组用点号定位:"addr.city" 匹配子文档字段,"items.sku" 匹配数组中任一元素的 sku。

聚合 $match 过滤阶段

$match 用与 find 相同的过滤语法在管道内筛文档;作为首阶段时能直接利用索引,是聚合性能的主要抓手。

mongodump 逻辑备份

mongodump 导出 BSON 备份:支持指定库/集合、gzip 压缩与归档文件;复制集上用 --oplog 获取一致时间点快照。

upsert 不存在则插入

updateOne/updateMany 传 {upsert:true}:无匹配文档时按“过滤条件 + 更新内容”新建;$setOnInsert 只在插入分支生效。

countDocuments / estimatedDocumentCount

精确计数用 countDocuments(条件),集合总量用 estimatedDocumentCount()(读元数据,不扫描文档,更快但有误差)。

TTL 索引自动过期文档

给日期字段建 TTL 索引,后台线程按 expireAfterSeconds 定时清理过期文档;可用 collMod 调整过期时间。

mongosh 执行脚本与 --eval

非交互执行:--eval 就地跑一段 JS,或把 .js 文件作为参数执行;--quiet 去掉横幅,适合放进脚本与流水线。

findOneAndUpdate 原子读改写

一步完成查找与更新并返回文档,适合领取队列任务、原子计数器等场景;排序决定哪条文档先被选中。

比较操作符 $gt / $lte / $in / $nin

范围比较 $gt $gte $lt $lte、等值 $eq $ne、列表匹配 $in/$nin;$in 列表可走索引,$nin 通常全表扫描。

数组查询 $all / $size / $elemMatch

数组字段支持等值命中任一元素、$all 全含、$size 精确长度;$elemMatch 要求同一条元素满足多个条件。

MongoDB 索引类型一览

不同查询形态对应不同索引:单字段、复合、多键、文本、地理、TTL、唯一、部分、稀疏、哈希与通配符索引,各自有适用边界。

聚合 $project 投影与计算

$project 决定输出字段:保留、排除、重命名与表达式计算都在这里完成,是控制下游数据形状的开关。

mongorestore 恢复与重命名

mongorestore 还原 mongodump 产物:支持 --drop 覆盖已有集合、--oplogReplay 回放增量,以及 nsFrom/nsTo 迁移到新库名。

mongosh 库与集合导航命令

use 切库、show dbs / show collections 查看层级;db.help() 与 db.<集合>.help() 打印当前上下文的可用方法清单。

投影规则与字段裁剪

投影 {field:1} 保留、{field:0} 排除;两者不可混用(_id 是例外),合理投影可减少磁盘回表与网络传输。

逻辑操作符 $or / $nor / $not

$or 任一条件成立即命中,$nor 全部条件都不成立才命中,$not 对单个字段表达式取反(常配正则使用)。

文本索引与 $text 查询

$text 查询依赖文本索引:支持词项、短语与排除词,配合 $meta: "textScore" 可按相关度排序。

建库、切库与 dropDatabase

use 只切换上下文,首次写入或建集合才真正创建数据库;dropDatabase 删除当前库的全部集合、索引与元数据。

复合索引字段顺序与 ESR 原则

复合索引按字段顺序生效:等值(Equality)字段在前、排序(Sort)字段居中、范围(Range)字段在后,能同时兼顾过滤与排序。

隐式 AND 与显式 $and

过滤器多个键之间天然 AND;$and 用于同字段多个条件或显式组织逻辑,优化器会自行安排条件顺序。

null 与缺失字段的查询差异

{field: null} 同时匹配“值为 null”和“字段缺失”的文档;只想要显式 null 用 $type:"null",只想要存在且非空用 $exists+$ne 组合。

$regex 正则查询

字符串正则匹配:预编译正则对象或 $regex/$options 表达式都可;只有锚定前缀(^)且区分大小写时才有机会走索引。

db.stats 与 serverStatus 概览

db.stats() 给库级数据量与索引规模;db.serverStatus() 提供连接数、opcounters、wiredTiger 缓存等运行指标,是监控采集入口。

唯一索引与重复键报错

唯一索引阻止字段组合重复;写入冲突抛 E11000 duplicate key error,需要业务侧捕获并给出明确错因。

慢查询剖析器 profiling

profiler 把慢操作写入 system.profile 集合:setProfilingLevel(1, {slowms}) 只记录超阈值操作,level 2 记录全部(慎用)。

distinct 去重取值

返回字段的全部去重值数组;支持加查询条件与嵌套路径,结果受 BSON 16MB 限制。

$exists 与 $type 字段检查

$exists 判断字段是否出现;$type 按 BSON 类型过滤,别名 number 覆盖 int/long/double/decimal,也可传类型数组。

db.hello 判断节点角色

db.hello() 返回当前节点角色与复制集信息:isWritablePrimary、secondary、setName、primary 等,用于快速确认主从。

聚合中的 $sort / $limit / $skip

排序、截断与跳过:$sort 后接 $limit 可表达 Top-N;注意排序阶段内存占用与大 skip 的代价。

多文档事务使用方式

复制集(4.0+)与分片集群(4.2+)支持多文档事务:通过会话 startTransaction 包住多次读写,最后统一提交或回滚。

replaceOne 整文档替换

用新文档整体替换匹配到的第一条(_id 保留);替换文档里不允许出现更新操作符,否则报错。

ObjectId 结构与生成时间

默认 _id 是 12 字节 ObjectId:4 字节秒级时间戳 + 5 字节随机值 + 3 字节递增计数器;可反解时间戳做粗略排序参考。

读偏好 readPreference 与从节点读

控制读请求走哪个节点:primary(默认)、primaryPreferred、secondary、secondaryPreferred、nearest;写入总是送往主节点。

$addFields / $set 添加计算字段

在保留原有字段的基础上新增或覆盖字段:$addFields 与 $set 等价($set 是 4.2 起的别名),随时可接其它阶段。

聚合日期函数 $dateToString / $dateTrunc

日期维度汇总常用:$dateToString 格式化、$dateTrunc 截断到指定时间粒度、$dateDiff 求差,按日按小时都能直接分组。

mongoexport / mongoimport JSON 交换

mongoexport 导出 JSON/CSV 供外部系统使用,mongoimport 导入文件;注意类型映射:CSV 全部按文本处理,日期需要额外转换。

bulkWrite 混合批量操作

一次提交插入/更新/删除/替换的混合操作序列;ordered:true(默认)遇到失败停止后续,false 则继续并集中汇报错误。

$expr 比较同文档两字段

在查询里引用字段值做计算或跨字段比较:$expr 使用聚合表达式语法,适合“同文档字段互比”的场景。

集合统计与索引占用

db.<集合>.stats() 返回文档数、数据大小、存储大小与各索引占用,是评估膨胀与索引成本的常用依据。

聚合 $facet 一次多面统计

$facet 在同一批输入文档上并行跑多个子管道,一次请求返回多种维度的统计结果,适合仪表盘数据接口。

聚合性能优化要点

管道性能看三条:尽早过滤、尽量走索引、控制中间结果体积;照此调整阶段顺序通常收益明显。

oplog 窗口与容量评估

oplog 记录主节点全部写操作供从节点复制;其时间窗口决定“从节点断开后能追赶多久”,过小会触发全量同步。

currentOp 查看与 killOp 终止

db.currentOp() 列出正在执行的操作(可按时长、命名空间过滤),发现异常长操作可 killOp 终止。

游标方法 hasNext / next / toArray

游标是懒加载结果集:hasNext/next 逐条取,forEach/map 遍历,toArray 一次性读进内存;batchSize 控制每次网络批量。

地理空间查询 $near / $geoWithin

基于 GeoJSON 或传统坐标对做距离与范围查询;$near 按距离近到远返回,$geoWithin 判断点是否落在区域内。

TLS 加密连接参数

开启传输加密用 URI 参数 tls=true(旧写法 ssl=true);可指定 CA 文件与客户端证书,托管环境常要求强制 TLS。

文本索引的创建细节

文本索引为字符串字段建立词项表:可对多字段赋权重、指定 default_language;每个集合只能建一个文本索引。

rs.initiate 初始化复制集

在单个节点上执行 rs.initiate 并在配置中列出全部成员:hostname 必须是各成员都能解析的地址;副本集名自定但要全组一致。

写关注 writeConcern 语义

writeConcern 决定写入确认强度:w:1 主节点确认、w:"majority" 多数确认、j:true 等待日志落盘;按业务容忍度选择。

createCollection 与集合选项

显式创建集合可以带上 capped 固定集合、validator 校验器、collation 排序规则等选项;隐式创建只能用默认选项。

索引查看与删除

getIndexes 查看现有索引与选项,dropIndex 按名称删除单个索引;删除前用 explain 与隐藏索引验证依赖关系。

聚合条件表达式 $cond / $ifNull / $switch

管道内做条件分支:$cond 三元、$ifNull 兜底空值、$switch 多分支匹配,用于打标、分档与容错。

allowDiskUse 与聚合内存限制

聚合各阶段默认内存上限 100MB:超限报错时显式传 allowDiskUse:true 让阶段落盘,或先重构管道降低中间结果体积。

变更流 change stream 监听

watch() 基于 oplog 输出数据变更事件(插入/更新/删除),支持断点续传(resume token),适合做数据同步与事件驱动。

集合 JSON Schema 校验器

建集合时或用过 collMod 给集合挂 $jsonSchema 校验器;validationLevel 与 validationAction 控制触发范围与处理方式。

db.runCommand 调用数据库命令

管理类能力大多以数据库命令形式提供,均可通过 db.runCommand({...}) 调用,如 ping、buildInfo、collStats。

覆盖查询(不回表)

查询条件与返回字段全部来自同一个索引时,引擎无需读取文档本体;explain 显示 totalDocsExamined 为 0 即为覆盖。

部分索引只索引子集

partialFilterExpression 让索引只覆盖满足条件的文档:空间更小、写放大更低,但查询必须包含兼容条件才能命中。

$lookup 管道式关联

进阶写法用 let + pipeline 在关联侧再做过滤、排序与截断,适合“每个主文档只关联少量子文档”的场景。

聚合 $merge 增量写出

$merge 把管道结果合并回集合:按 on 字段匹配,支持 insert/merge/replace/keepExisting/fail 等冲突处理方式。

聚合数组函数 $filter / $map / $reduce

在管道里加工数组:$filter 筛选、$map 映射、$reduce 折叠聚合、$arrayElemAt 取元素、$size 取长度。

复制集扩容与缩容

rs.add 加入新成员(默认异步追赶数据),rs.remove 从配置中移除节点;变更后核对 rs.status 与同步进度。

复制延迟查看与判断

rs.printSecondaryReplicationInfo() 列出各从节点落后主节点的时间;持续增长说明复制链路或负载有问题。

隐藏索引做上线前验证

hideIndex 让索引对查询规划器不可见:可以在不删索引的前提下验证“移除它会影响哪些查询”,随时可恢复。

聚合 $out 覆盖输出集合

$out 把管道结果写入集合:目标存在时整体替换(原子性切换),不存在则创建;必须作为管道最后阶段。

rs.stepDown 主动主从切换

让主节点主动退位触发选举,便于滚动维护;stepDown(60) 表示 60 秒内不参与竞选,为新主节点让路。

分片集群概念与分片键

分片集群由 mongos 路由、config 配置库与多个 shard 组成;分片键决定数据分布,范围分片适合区间查询,哈希分片更均匀。

$where 表达式过滤

用 JavaScript 表达式逐文档过滤(this 指向文档);无法利用索引且执行任意脚本,只适合小集合或临时排查。

稀疏索引与缺失字段

sparse:true 的索引跳过不含该字段的文档;适合可选字段较多、只想加速“存在值”查询的集合。

聚合 $bucket 按值分桶

$bucket 按边界把数值或日期分到相邻区间并聚合;$bucketAuto 自动等分桶,适合分布类统计。

mongosh 打印与调试辅助

print 输出纯文本、printjson 格式化打印对象、Object.keys 快速看字段结构,做临时排查很方便。

collation 排序规则

collation 定义字符串比较规则(大小写、变音符号、语言习惯):索引与查询要使用一致的 collation 才能互相命中。

聚合 $count 简单计数

$count 是 $group + $sum:1 的语法糖:把输入文档数写入指定字段;常与 $match 组合做条件计数。

聚合 $replaceWith 重塑文档

$replaceWith 用指定对象替换输出文档结构(旧名 $replaceRoot + newRoot),配合 $arrayElemAt 可把数组元素提升为文档。

聚合字符串函数速用

管道内处理字符串:$concat 拼接、$split 拆分、$toUpper/$toLower 大小写、$substrCP 截取、$regexMatch 正则判断。

WiredTiger 缓存与存储引擎观察

WiredTiger 是默认存储引擎:内存缓存默认取(物理内存 - 1GB)的 50%,可用 cacheSizeGB 调整;缓存压力大时出现频繁淘汰与读放大。

通配符索引覆盖未知字段

字段名不固定的子文档可建通配符索引 { "attrs.$**": 1 },为其中任意标量字段提供等值与范围加速。

哈希索引与分片配合

哈希索引按值哈希分布:只支持等值匹配,常用于哈希分片让数据均匀散开,不支持范围查询与排序。

聚合 $graphLookup 图式遍历

$graphLookup 在集合内部沿引用关系递归查找(如汇报链、物料层级),支持出发字段、连接字段与深度上限。

Elasticsearch

索引映射、DSL 查询与集群运维

bool 布尔组合查询

bool 用 must、should、must_not、filter 组合子查询:filter 不参与评分且可被缓存,适合状态、时间范围这类纯筛选条件。

集群健康 _cluster/health

集群健康接口返回状态色、节点与分片计数:green 表示主副本齐全,yellow 表示副本未分配,red 表示存在主分片未分配;可带 wait_for_status 做等待。

_cat/indices 查看索引列表与健康状态

_cat/indices 用表格列出集群内索引:健康色、主分片与副本数、文档数、存储占用;支持选择列、排序与通配符过滤,适合巡检与容量核对。

text 与 keyword 字段类型选择

text 会分词并支持全文检索但默认不能用于排序聚合;keyword 保留整串、适合精确过滤、排序与聚合;字符串两种需求常一起用 multi-field 兼顾。

match 全文查询

match 先对查询串做分析再匹配:默认 OR 语义,命中词越多得分越高;需要全部命中时用 operator: and 或 minimum_should_match 控制。

term 精确查询

term 对字段值做精确匹配且不对查询串分词:keyword 字段匹配整串,数值与布尔直接比较;对 text 字段则匹配分词后的单个词条。

_bulk 批量写入

批量接口用 NDJSON 组织操作:动作行与文档行交替,支持 index/create/update/delete 四类动作;单条失败不影响其他条目,需逐条检查响应。

terms 聚合:按字段分组统计

terms 聚合按字段值分桶计数,字段必须是 keyword 或数值(text 会因 fielddata 关闭而报错);size 控制返回桶数量,结果含误差提示字段。

创建索引与分片副本设置

建索引时用 settings 指定主分片数、副本数与刷新间隔,mappings 里显式定义字段类型;主分片数建好后不可直接修改。

sort 排序与 from/size 分页

搜索默认按 _score 相关度排序,也可指定字段排序(支持 order、missing、mode);from+size 分页受 index.max_result_window 限制,默认最多取到一万条。

单文档读写与 _create

文档级 CRUD 通过 _doc 接口完成:PUT 指定 ID 时整体替换,POST 不指定 ID 自动生成;_create 在 ID 已存在时返回 409,适合只允许插入一次的语义。

新增字段与更新 mapping

已有索引可继续补充新字段:调用 PUT /<index>/_mapping 提交 properties;但已存在字段的类型不能修改,只能新建索引后重建数据。

range 范围查询(数值与日期)

range 用 gt/gte/lt/lte 表达开闭区间,日期支持 now-1d/d 这类日期数学表达式;跨时区查询可加 time_zone,格式不标准时用 format 指定。

date_histogram 时间直方图聚合

date_histogram 按时间区间分桶统计,calendar_interval 按日历单位(day/month),fixed_interval 按固定时长(30m/7d);时区与空桶策略影响结果口径。

_analyze 测试分词结果

分词器决定文本如何切分与归一化:用 _analyze 可直接观察 analyzer 或自定义 tokenizer + filter 链条的输出,是排查查询无命中的常用手段。

_reindex 重建索引与数据迁移

reindex 把源索引数据复制到目标索引,常用于映射调整、分片数变更与跨集群迁移;支持脚本改写文档、切片并行与冲突处理。

dynamic mapping 动态映射策略

dynamic 控制未知字段如何处理:true 自动推断并加入映射,false 不索引但保留在 _source,strict 直接拒绝写入;生产索引建议显式定义映射。

match_phrase 短语查询

match_phrase 要求查询词按顺序相邻出现;slop 允许词之间最多可移动的总位置数,常用于放宽顺序约束同时保留短语语义。

文档 update 与 upsert

更新接口支持部分字段更新(doc)、脚本更新(script)与 upsert 语义;doc_as_upsert 让文档不存在时按 doc 内容插入,是幂等写入的常用写法。

别名_aliases 管理与切换

别名指向一个或多个索引,用于读写解耦与零停机切换:写入别名用 is_write_index 指定唯一写目标,过滤别名可限定可见数据范围。

_cat/nodes 查看节点负载

_cat/nodes 汇总每个节点的角色、堆内存使用率、磁盘水位、CPU 与负载;巡检时用 h= 挑关键列,快速定位资源偏高的节点。

创建快照 _snapshot create

快照按索引集合备份分片数据与集群状态:支持指定索引模式、忽略不可用索引、只备份部分全局状态;大数据量用异步加任务接口跟踪。

指标聚合:avg/sum/stats 等数值计算

指标聚合对数值字段做统计:avg、sum、min、max、value_count 返回单值,stats、extended_stats 一次返回均值方差等多个指标。

_cat/shards 检查分片分布

_cat/shards 列出每个索引的每个分片状态、所在节点、文档数与存储量;排查未分配分片与分布倾斜时的首站接口。

IK 中文分词器安装与使用

IK 是常见的中文分词插件:安装包版本必须与集群版本一致,安装后需重启节点;映射里可分别指定索引期 analyzer 与查询期 search_analyzer。

ids 按文档 ID 查询

ids 查询直接按内部 _id 取文档,绕过分词与评分,等价于按主键点查;跨索引批量按 ID 取文档更常见的是 _mget。

nested 类型与嵌套查询

普通 object 数组在索引时会被扁平化,跨对象条件会互相串位;若数组内字段必须成组匹配,需要声明 nested 类型并用 nested 查询(可加 inner_hits 返回命中的子文档)。

索引模板与组件模板

索引模板按名称模式把 settings、mappings、aliases 自动应用到新建索引;组合式模板(composable)支持组件模板复用,并按 priority 决定冲突时谁生效。

更新索引 settings

部分索引设置可以动态更新:副本数、刷新间隔、结果窗口上限、分片分配开关等;主分片数与分词器类设置不能热改,需要重建索引或先关闭索引。

ILM 索引生命周期策略

ILM 把索引按年龄或体积分到 hot/warm/cold/delete 阶段并自动执行 rollover、shrink、force merge、删除等动作;策略通过模板绑定到索引,需搭配写别名使用。

multi_match 多字段查询

multi_match 把一个查询串同时作用到多个字段:默认 best_fields 取单字段最高分,most_fields 汇总各字段分值,cross_fields 把多字段当作一张大表处理。

refresh 与 flush 的区别

refresh 让新写入的文档进入可搜索状态(默认每秒一次),flush 把内存缓冲区与 translog 落盘并清空 translog;两者目的不同,不能互相替代。

_cat/allocation 磁盘与分片数概览

_cat/allocation 按节点汇总分片数量与磁盘指标(已用索引占比、剩余空间、使用率),用于判断是否触达水位线导致无法分配新分片。

_rollover 滚动新索引

rollover 在别名指向的写索引满足条件(最大年龄、主分片体积、文档数)时创建递增编号的新索引并把写别名切过去;索引名要符合 -数字 后缀规范。

常用 mapping 参数

除类型外,字段级参数能控制索引与存储行为:index 关闭检索、doc_values 关闭列存、ignore_above 截断、null_value 提供默认值、format 约定日期格式。

exists 字段存在性查询

exists 匹配字段存在且至少有一个非空值的文档:字段缺省、JSON null 与空数组都不算存在;常与 must_not 组合查找缺失数据。

search_after 深分页

search_after 用上一页最后一个文档的排序值作为下一页起点,避免 from+size 的深分页开销;排序字段组合必须能确定唯一顺序,常加 _id 或时间戳做兜底。

子聚合与按指标排序

聚合可以嵌套:外层分桶、内层再做指标或分桶聚合,形成两层统计;用 order 按子聚合结果排序,可以回答按业务指标排前 N 的问题。

集群级设置 _cluster/settings

集群设置分持久化与临时两类,影响分片分配、磁盘水位、快照与恢复速率等;8.x 已移除 transient 设置,统一写 persistent。

注册快照仓库 _snapshot

快照需要先在每个节点可见的共享存储上注册仓库(fs 类型),路径必须在 elasticsearch.yml 的 path.repo 白名单内;注册后可用 _verify 验证连通性。

query_string 与 simple_query_string

query_string 支持 AND/OR、字段前缀、通配符等完整查询语法,一个字符串即可表达组合条件;语法错误会直接报错。simple_query_string 语法更宽松,遇到不支持的结构只忽略不会报错。

allocation explain 定位未分配分片

分片一直 UNASSIGNED 时,allocation explain 给出分配决策链与原因(如磁盘水位、分配过滤规则、已有同分片副本无法共存),并附带可执行的修复建议。

索引统计 _stats

_stats 汇总索引级别的文档数、存储字节、写入与检索计数、段与合并信息;按 level=shards 能看到分片分布是否均衡。

从快照恢复 _restore

恢复快照时可指定索引与重命名规则,恢复到新名字避免覆盖线上数据;目标索引必须不存在或处于关闭状态,升级前可先恢复到临时索引验证。

wildcard 与 prefix 通配查询

wildcard 支持 * 与 ? 通配符,prefix 只匹配前缀;两者作用在词条层面,对 keyword 字段匹配整串,对 text 字段匹配单个词条,扫描成本随通配范围上升。

_source 结果过滤

_source 控制响应中返回哪些原始字段:可以关闭整体返回、用通配符挑字段,或用 includes/excludes 组合;仅影响回显,不影响检索与聚合。

_update_by_query 按条件批量更新

update_by_query 先快照查询再逐条更新,默认遇版本冲突中止;大批量操作建议设 slices 并行、wait_for_completion=false 异步执行,并用 _tasks 跟踪。

cardinality 基数聚合(去重计数)

cardinality 聚合估算字段的不同值个数(类似 count distinct),内部使用 HyperLogLog++,结果近似;precision_threshold 越高越准但内存消耗上升。

_cat/health 快速看分片计数

_cat/health 用一行表格给出状态、节点数、主分片与总分片计数,适合写进巡检脚本;加 ts=false 去掉时间戳列便于解析。

_forcemerge 段合并与空间回收

段合并把大量小段合成大段,减少段数量与磁盘占用、提升查询效率;max_num_segments=1 表示合到单段,only_expunge_deletes 只清理已删除文档。

慢查询与慢索引日志配置

慢日志按耗时阈值记录检索与写入请求:可在索引级设置 warn/info/debug/trace 四档阈值;日志输出位置由节点 log4j2 配置决定。

_delete_by_query 按条件批量删除

delete_by_query 按查询删除文档并保留索引结构,同样支持切片并行与冲突策略;删除量极大时会留下大量墓碑段,需要配合 force merge 或等待合并。

_count 统计命中数量

_count 只返回匹配文档数,不取 hits、不做聚合;配合查询条件可在批量操作前核对影响范围,比 search 更轻量。

_cluster/reroute 手动分片调拨

reroute 手动执行分片迁移、副本分配或取消迁移动,命令默认仅演练(dry_run),确认可行后再提交;滥用会打乱自动均衡。

_cat/thread_pool 线程池与拒绝率

线程池按操作类型(search/write/get 等)限流,队列满后请求被拒绝;_cat/thread_pool 展示各池的活跃线程、队列长度与累计拒绝数。

regexp 与 fuzzy 模糊查询

regexp 使用 Lucene 正则语法匹配词条(不是完整 POSIX 正则),fuzzy 按编辑距离容错;两者都作用于词条,范围过宽时成本高。

scroll 遍历大批量结果

scroll 在查询时创建快照上下文,用 scroll_id 分批取回全部结果,适合全量导出与离线处理;代价是期间段文件不能合并、占用资源。

range 与 histogram 区间聚合

range 聚合按显式区间分桶(自定义边界),histogram 按固定步长切分数值;两者都能让统计结果按业务价位、时长等区间展示。

_mget 批量读取文档

multi get 一次请求取多篇文档,支持跨索引与 _source 过滤;相比循环单文档 GET 大幅减少网络往返,是批量补数据场景的基础接口。

_nodes/stats 节点资源指标

节点统计接口返回 JVM 堆与 GC、文件系统、操作系统负载、线程池等指标;用 filter_path 只取需要字段,适合接入监控采集。

分片与副本规模规划

分片规模影响恢复速度、集群状态体积与聚合并行度:常见经验是单分片控制在十几到几十 GB、每 1GB 堆内存承载的分片数控制在 20 以内,副本按可用性要求设置。

脚本字段与 painless 脚本查询

script_fields 在返回结果时用 painless 计算派生字段(不写入索引),script query 则用脚本作为过滤条件;两者都依赖 doc values 或 _source。

_seq_no 与 _primary_term 乐观并发控制

文档的 _seq_no 随每次写入递增、_primary_term 标识主分片任期;写入或更新时带上 if_seq_no 与 if_primary_term,可避免覆盖别人刚写的版本。

_tasks 查看与取消长任务

任务接口列出正在执行的集群任务(搜索、reindex、force merge 等)及耗时;需要中断时用任务 ID 取消,是排查长任务与资源占用的关键入口。

断路器 circuit breaker 与内存保护

断路器防止聚合、请求或 fielddata 占用过多堆内存:父断路器默认限制在堆的 70%,触发时返回 429 与 circuit_breaking_exception。

PIT 搜索上下文(point in time)

PIT 为一次搜索会话固定索引视图,与 search_after 搭配实现稳定且省资源的深分页;用完需显式关闭,否则会一直保留段引用。

管道聚合:对聚合结果再计算

管道聚合不产生新桶,而是对已有桶结果做二次计算:derivative 求差分、cumulative_sum 累计求和、bucket_script 做桶内指标算术。

_explain 解读单文档得分

_explain 返回指定文档对某查询的得分推导过程:哪个字段、哪个词条贡献了多少分,是排查排序异常与查询无命中的直接手段。

_cat/recovery 查看分片恢复进度

分片恢复(副本初始化、节点回归后的数据补齐)是磁盘与网络密集型操作;_cat/recovery 显示每个分片恢复的阶段、字节进度与耗时。

SLM 快照生命周期策略

SLM 按 cron 周期自动创建快照并按保留策略清理旧快照:schedule 用 Quartz cron(6 段)、name 支持日期数学、retention 控制过期与最少保留份数。

runtime fields 运行时字段

runtime 字段在查询时计算、不占索引空间,可在查询请求里临时定义,也可写进索引映射长期生效;适合对已有数据做探索性统计而不重建索引。

_msearch 一次提交多个查询

multi search 用 NDJSON 在单个请求里执行多个查询:头部行指定索引与参数,紧随一行查询体,成对出现;适合仪表盘同时拉取多组数据。

kNN 向量检索(dense_vector)

Elasticsearch 8.x 支持将 dense_vector 字段建索引后做近似 kNN:查询用 knn 参数指定查询向量、k 与候选集大小,可与全文查询组合成混合检索。

_cat/pending_tasks 集群任务积压

pending_tasks 是 master 待处理的任务队列(创建索引、更新映射、分片分配等);持续增长说明集群变更速度超过 master 处理能力。

查看索引用到的全部设置

GET /<index>/_settings 只看显式配置,加 include_defaults=true 能列出所有生效默认值;flat_settings=true 把嵌套设置压平成点号键,便于 diff 与脚本比对。

highlight 关键词高亮

highlight 让匹配片段在结果中带标记返回:fields 指定要高亮的字段,pre_tags/post_tags 自定义包裹标签,number_of_fragments 控制片段数量。

composite 聚合分页遍历全部桶

composite 聚合把多个维度组合成分页游标:单次返回 size 个桶与 after_key,循环请求可完整遍历所有桶组合,适合对全量维度做导出式统计。

Elasticsearch SQL 查询

SQL 接口让熟悉 SQL 的用户直接查询索引:SELECT/FROM/WHERE/GROUP BY/ORDER BY/LIMIT 的子集可用,translate 接口能看到等价的 DSL。

ILM explain 查看索引所处阶段

ILM explain 显示每个索引当前所在 phase、action、step 与可能的错误,用来回答"为什么这个索引没有按期滚动或删除"。

constant_score 与 boosting 打分调整

constant_score 把过滤条件包成固定分值查询,避免无意义的评分计算;boosting 通过 positive/negative 给匹配项降权,让不想要的结果沉底而不是被排除。

_nodes/hot_threads 热点线程排查

hot_threads 采样节点上 CPU 占用高的线程栈,用于定位是哪些查询、合并或 GC 在消耗资源;默认按 CPU 采样,也可按 wait 或 block。

_validate/query 校验查询语法

_validate/query 提前校验查询结构是否合法并可返回重写后的执行计划(explain),适合在工具链里做查询自检,避免线上才暴露语法错误。

_cat/segments 查看段信息

段是 Lucene 索引的最小存储单元:_cat/segments 列出每个分片下的段数量、文档数、占用与是否已删除文档,用于评估合并压力与段爆炸。

关闭与打开索引 _close/_open

关闭索引后不占用文件句柄与检索资源、不允许读写,但元数据仍在集群状态中;重新打开后分片需要恢复。常用于归档前的临时处理与批量重建。

field_caps 查看多索引字段类型

field_caps 汇总一个或多个索引里字段的类型信息,跨索引查询报字段类型冲突前,用它先核对各索引字段定义差异。

_cat/templates 查看索引模板

列出集群中的索引模板及其匹配规则与优先级,用于排查新索引用错模板、模板冲突与 legacy 模板残留。

_termvectors 查看词条与词频

term vectors 返回字段的分词结果、词频与位置信息,用于验证写入后的实际索引内容、排查同义词与分词异常;需字段保存 term_vector 或从 _source 现算。

search template 存储查询模板

查询模板把带参数的查询存成脚本(mustache 语法),调用方只传参数不传查询结构;便于统一查询口径、限制可变的查询范围。

_cat/plugins 查看节点插件

插件按节点安装:_cat/plugins 列出每个节点已加载的插件名/版本/描述,用于核对集群各节点插件版本是否一致。

ClickHouse

表引擎、查询语法与常用运维

SELECT 查询基础

SELECT 按列式读取、只扫描用到的列:支持表达式、别名、WHERE/GROUP BY/HAVING/ORDER BY/LIMIT 与丰富的内置函数,聚合与窗口计算是大数据量下的常见用法。

INSERT 写入方式与批量建议

写入用 INSERT INTO … VALUES/SELECT/FORMAT:Values 适合小批量,SELECT 用于表间复制,JSONEachRow/CSV 等格式适合外部导入;每次 INSERT 生成一个 part。

MergeTree 引擎参数与数据组织

MergeTree 按 ORDER BY 排序存储、按 PARTITION BY 分区,插入形成独立 part,后台按规则合并;index_granularity 决定稀疏索引的粒度。

CREATE TABLE 建表语法骨架

建表三要素:列定义、表引擎与排序键;MergeTree 类引擎 ORDER BY 必填,PARTITION BY 可选,SETTINGS 用于调索引粒度等参数。

Distributed 分布式表

Distributed 引擎本身不存数据,负责把查询转发到集群各分片并把结果汇总:建表参数为集群名、库名、本地表名与可选分片键。

物化视图与增量聚合

ClickHouse 物化视图是触发式计算:源表插入新块时按 SELECT 逻辑计算并写入目标表(TO 形式),常用于实时预聚合、字段转换与列裁剪。

ReplicatedMergeTree 副本表

ReplicatedMergeTree 借助 ZooKeeper/Keeper 做多副本同步:建表时给出该表的协调路径与副本标识,或使用 Replicated 数据库自动生成路径;查询可读任一可用副本。

ReplacingMergeTree 去重存储

ReplacingMergeTree 在合并时按排序键保留版本号最大的行,实现去重;重复消除发生在合并时且只在同分区内,查询未合并数据要用 FINAL 或聚合手段。

system.parts 查看数据分片文件

system.parts 记录每个表的活动 part 与大小、行数、分区:排查小 part 过多、磁盘占用与分区数据量时先查这里。

表引擎分类与选择

ClickHouse 表引擎决定数据存储与读写方式:生产数据以 MergeTree 家族为主,集成引擎对接外部系统,Distributed 负责集群读写转发,Log 家族只适合小数据。

ALTER 修改表结构

列级变更用 ALTER TABLE:加列、改类型、删列、改默认值、加跳过索引;多数变更立即生效,但对旧数据的类型转换会以 mutation 形式在后台进行。

常用数据类型

ClickHouse 类型分整数、浮点、定点、字符串、日期时间、半结构与其他复合类型:优先整型与低基数编码,浮点仅用于确实需要近似计算的场景。

system.query_log 查询审计与性能分析

query_log 记录每条查询的类型、耗时、读取行数/字节、内存峰值与异常:是定位慢查询、分析扫描量与优化排序键的主要数据源。

clickhouse-client 连接与执行

clickhouse-client 是原生命令行客户端:连接用 --host/--port/--user/--password/--database,-q 直接执行语句,支持从标准输入导入与指定输出格式。

PARTITION BY 分区设计与裁剪

分区键把数据切成独立目录,便于按月/天批量删除、移动冷数据;查询里对分区键的过滤可以整块跳过分区,是运维与查询双层优化的关键。

mutation 异步变更与状态跟踪

ALTER DELETE/UPDATE 以 mutation 形式在后台按 part 重写数据:提交后立即返回,执行进度与失败原因在 system.mutations 查看,失败任务需要手动清理。

JOIN 与连接策略

ClickHouse JOIN 支持 INNER/LEFT/RIGHT/FULL 与 ASOF、ANY 等变体:右表通常加载进内存,把小表放右边、大表放左边更省资源。

ORDER BY 排序键与稀疏索引

ORDER BY 决定数据在 part 内的物理顺序,并生成每 index_granularity 行一条的稀疏主索引;WHERE 命中排序键前缀时可按粒度跳过数据块。

FINAL 去重读取

FINAL 在查询时按排序键对 ReplacingMergeTree 等表做去重/折叠,得到合并完成后的逻辑结果;代价是读取放大,适合小范围查询或对账,长跑查询要评估开销。

TTL 数据过期与冷热分层

TTL 在 MergeTree 表上定义数据生命周期:到期可以删除、移动到冷磁盘或卷,也可以按列级 TTL 压缩;清理动作在后台合并时执行,不保证到点即删。

system.replicas 副本健康检查

system.replicas 显示每个副本表的只读状态、任务队列、延迟与活跃副本数:is_readonly 或 queue_size 持续升高意味着副本同步出了问题。

ClickHouse 安装与目录结构

ClickHouse 官方提供 deb/rpm 仓库与单机 tar 包:repo 安装后由 systemd 管理 clickhouse-server;配置在 config.xml,用户与配额在 users.xml,数据默认落在 /var/lib/clickhouse。

PREWHERE 提前过滤

PREWHERE 先只读取过滤条件涉及的列,筛掉大部分数据后再读其他列,显著减少 IO;优化器对部分简单条件会自动上移,也可以手动指定。

AggregatingMergeTree 聚合状态

AggregatingMergeTree 存储聚合函数中间状态(AggregateFunction 列):写入用 -State 组合器,查询用 -Merge 组合器,通常作为物化视图的目标表实现增量预聚合。

日期时间函数与时间对齐

常用日期函数把时间戳归一到桶:toStartOfHour/Day/Month、toStartOfInterval 自定义区间对齐,dateDiff 计算差值,date_trunc 进行通用截断。

BACKUP / RESTORE 备份命令

ClickHouse 提供 SQL 级 BACKUP/RESTORE:目标可以是本地磁盘、文件或对象存储;支持整库、单表与增量(append 到同一备份路径),执行进度记录在 system.backups。

OPTIMIZE 触发合并与去重

OPTIMIZE TABLE 强制触发 part 合并;PARTITION 限定范围,FINAL 合并到单 part,DEDUPLICATE 按排序键或指定列去重(ReplacingMergeTree)。

SummingMergeTree 预聚合

SummingMergeTree 在合并时把排序键相同的行中的数值列做求和,实现轻量级预聚合:写入明细行,查询直接读聚合结果,减少数据量。

数组函数与 groupArray

数组类型配合函数族可以完成分组内列表聚合、元素展开与检索:groupArray 收集、arrayJoin 展开、arrayDistinct 去重、has/indexOf 判断元素。

system.tables 元数据总览

system.tables 汇总所有表的引擎、排序键、分区键、行数与磁盘占用,还提供 create_table_query 可直接复制的建表语句,是巡检与迁移的基础表。

LIMIT BY 分组取前 N

LIMIT BY 对每个分组各取前若干行:常配合 ORDER BY 实现按维度取最近/最高记录,比排序后过滤的结果更符合业务直觉。

SHOW / DESCRIBE 元数据查询

查看表结构用 SHOW CREATE TABLE 与 DESCRIBE TABLE;SHOW TABLES、EXISTS TABLE 用于脚本化探测;system.columns 可按列维度筛选表结构。

ON CLUSTER 集群 DDL

ON CLUSTER 让一条 DDL 在集群所有节点执行:创建库表、改结构、删表都可以用;执行进度与结果记录在 system.distributed_ddl_queue。

去重计数 uniq 系列函数

uniq 系列统计不同值个数:uniq 为近似算法(省内存、有误差),uniqExact 为精确算法(内存随基数线性增长),按精度要求选择。

DROP / TRUNCATE / DETACH 数据清理

DROP TABLE 删除表与数据,TRUNCATE 保留结构清空数据,DETACH 把表从服务下线但保留磁盘数据、可再 ATTACH 回来;按分区清理优先用 DROP PARTITION。

remote_servers 集群拓扑配置

集群拓扑在 config.xml(或 conf.d 下的独立文件)用 remote_servers 定义:每个 shard 下挂多个 replica,配 internal_replication=true 时写副本表只写其中一个副本。

分位数函数 quantile

quantile(q)(x) 计算分位数,quantiles(q1, q2)(x) 一次返回多个分位:P95、P99 等延迟指标常用;也有 quantileExact、quantileTiming 等按精度与耗时特征区分。

CREATE DATABASE 与默认引擎

建库语法 CREATE DATABASE [IF NOT EXISTS] db [ENGINE = Atomic];Atomic 支持原子 RENAME 与 EXCHANGE,是当前默认引擎,普通建库无需显式指定。

设置与查询级 SETTINGS

ClickHouse 设置分用户配置(users.xml/profile)与查询级 SETTINGS:后者只影响当前语句,适合临时控制线程数、内存上限与超时,排障与压测时常用。

ZooKeeper 协调配置

副本表与分布式 DDL 依赖 ZooKeeper(或 Keeper):在 config.xml 的 zookeeper 段配置节点列表,并设置 session 超时;同一集群的所有节点应指向同一组协调服务。

高阶函数与 lambda 表达式

高阶函数用 lambda 表达式对数组做映射、过滤与规约:arrayMap、arrayFilter、arrayReduce、arrayExists、arrayAll 等,适合在 SQL 内完成轻量数据处理。

system.merges 观察合并任务

system.merges 实时展示正在进行的 part 合并:涉及的表、进度、源 part 数与内存占用;导入高峰期观察它可判断合并是否成为瓶颈。

RENAME 与 EXCHANGE 表切换

RENAME TABLE 重命名表,EXCHANGE TABLES 原子交换两张表(需 Atomic 库);配合 ON CLUSTER 可把 DDL 下发到集群所有节点。

列压缩 CODEC 选择

CODEC 定义列的压缩算法与编码链:默认 LZ4;ZSTD 压缩率更高;时间戳用 Delta/DoubleDelta、浮点用 Gorilla 等差分编码后再套 ZSTD,能同时改善压缩率与读取。

窗口函数与 OVER 子句

ClickHouse 支持标准窗口函数:OVER (PARTITION BY … ORDER BY …) 配合 row_number、rank、lagInFrame/leadInFrame 与聚合函数,用于排名、同环比与滚动计算。

CollapsingMergeTree 折叠变更新

CollapsingMergeTree 用一个 Int8 的 Sign 列表达增删:+1 状态行与 -1 取消行在合并时抵消,适合保留变更轨迹的流水场景;读取未折叠数据可用 sum(Sign) 修正。

JSON 提取函数与 JSONEachRow

把半结构化数据存成 String 列时用 JSONExtract 系列按路径取值:JSONExtractString/Int/Float/Bool 以及 JSONExtractKeys 等;导入导出常用 JSONEachRow 格式。

字典 DICTIONARY 与 dictGet

字典把外部数据(ClickHouse 表、MySQL、文件、HTTP 等)加载为内存键值结构,用 dictGet 做维度补全与枚举翻译,避免每行做 JOIN。

GROUP BY 修饰符与汇总行

GROUP BY 支持 WITH ROLLUP、WITH CUBE、WITH TOTALS:在小计、交叉汇总与总计行上与普通分组一起返回,适合报表类查询一次取全口径。

SQL 化用户与权限管理

启用 SQL 访问控制后可以像常规数据库一样管理账号:CREATE USER、GRANT 权限、CREATE ROLE 与 QUOTA;账号信息默认存放在 access_control_path 下的本地文件。

ClickHouse Keeper 内置协调服务

Keeper 是 ClickHouse 自带的协调实现,可在 config.xml 用 keeper_server 段开启并配置 raft 集群,逐步替代外部 ZooKeeper;配置完成后客户端侧写法与 ZooKeeper 一致。

remote 与 cluster 跨实例查询

remote 表函数可在一条 SQL 里查询其他 ClickHouse 实例的表,cluster/clusterAllReplicas 按集群拓扑展开:适合临时跨集群对账与迁移校验。

分区运维:DETACH / ATTACH / FREEZE

分区级运维不重写全表:DETACH PARTITION 下线分区数据,ATTACH 重新挂载,FREEZE 创建硬链接快照用于备份;是迁移与回滚的轻量手段。

Log 家族与 Memory 引擎

Log 家族(TinyLog/Log/StripeLog)结构简单、无索引,适合小表与临时数据;Memory 引擎把数据放在内存、重启即失,用于中间计算与测试。

跳过索引(skip index)设计

跳过索引不定位具体行,只帮引擎跳过大块 granule:常用 minmax、set、bloom_filter、ngrambf_v1/tokenbf_v1;列数据越有序,收益越明显。

投影 projection 加速查询

投影为表预先维护一份按某查询模式组织的隐藏数据集(含不同排序或预聚合结果),优化器在匹配到查询时自动改用投影,无需改 SQL。

时序与列式

时序数据库概念、InfluxDB 与选型对照

InfluxDB line protocol 行协议

行协议是 InfluxDB 的写入格式:measurement,tag=value 空格 field=value 空格 可选时间戳;时间戳默认纳秒,不传则由服务端补当前时间。

序列基数与内存控制

序列基数 = measurement 与全部标签组合的唯一数量;每个序列都要维护索引与内存结构,基数失控是时序库最常见的性能故障源。

时序数据模型:measurement/tag/field/timestamp

时序库按"测量对象 + 标签集 + 字段集 + 时间戳"组织数据:标签用于检索与分组、字段存测量值;同一 measurement 与标签组合构成一个 series(序列)。

Flux 查询基础

Flux 是管道式查询语言:from 选择 bucket,range 限定时间范围,filter 用 lambda 过滤,后续接 group/aggregate/mean 等函数;range 应尽量靠前以利用时间裁剪。

保留策略与降采样策略

时序数据按"原始高精度短期保留 + 降采样低精度长期保留"分层:保留策略自动清理过期数据,降采样把分钟级聚合成小时/天级,控制长期存储成本。

Flux aggregateWindow 时间窗口聚合

aggregateWindow 按固定时间窗口聚合(如每 5 分钟取均值):every 定义窗口、fn 定义聚合函数,createEmpty 决定空窗口是否补值,timeSrc 决定结果时间戳来源。

/api/v2/write 写入接口

InfluxDB 2.x 用 HTTP 接口写数据:POST /api/v2/write 带 org、bucket 与 precision 参数,Authorization 用 Token;成功返回 204,无返回体。

时序 schema 设计:tag 与 field 划分

时序建模围绕"哪些维度要用来筛选与分组":频繁过滤、取值可控的维度放 tag;测量值、高变化值放 field;measurement 表示一批同结构的数据流。

influx CLI 常用命令

influx CLI 是 2.x 的官方命令行工具:管理组织、bucket 与任务,也能直接执行 Flux 查询;连接信息通过 influx config 或环境变量提供。

InfluxDB 2.x 定时降采样任务

Task 是 2.x 内置的定时 Flux 任务:用 option task 声明周期,每次执行读取上一窗口数据聚合并写入低精度 bucket,实现自动降采样。

bucket 创建、保留期与查询

bucket 是 2.x 的存储与保留单位:创建时用 -r 指定保留期(0 表示不自动过期),可随时更新;管理命令都基于 org 作用域。

降采样聚合口径设计

降采样不只是求平均:每层保留哪些统计量决定了上层还能回答什么问题;常见组合是保留 avg、max、min、sum 与 count,让上层可加权合并再算。

写入批量与重试策略

写入性能取决于批次大小、并发与压缩:常见实践是每批数千行、单请求控制在数 MB,开启 gzip;遇到 429/503 用指数退避重试,避免把集群压垮。

Telegraf 采集配置要点

Telegraf 是常用采集代理:配置由 inputs、processors、outputs 三部分组成;对接 2.x 用 outputs.influxdb_v2,配置 Token、org 与 bucket。

按条件删除时序数据

2.x 支持按时间段与 predicate 删除数据:influx delete 指定 bucket、start/stop 与可选谓词;删除请求进入队列异步执行,不等于立即可见。

Flux 查询性能要点

Flux 查询先裁剪时间与序列再计算:range 放最前、filter 尽量精确到测量与标签、避免无谓的 group 与 join;聚合窗口结合数据精度设置。

行协议转义规则

行协议对特殊字符有转义要求:measurement、tag 键值与字段键中的逗号、空格、等号要反斜杠转义;字符串字段值还需转义双引号与反斜杠。

SQL 通用时间桶写法

用 SQL 做时序统计时先把时间戳对齐到桶再聚合:date_trunc 适配 PostgreSQL/ClickHouse,floor 取整适配通用整数运算,两者结果都按桶标签分组。

Token 与权限管理

2.x 用 API Token 鉴权:可创建全权限、读写、指定 bucket 读写等不同范围的 Token;Token 创建时显示一次,之后无法再次查看完整值。

InfluxQL 查询(v1 语法)

InfluxQL 是 1.x 与兼容层的 SQL 风格查询语言:SELECT … FROM … WHERE time … GROUP BY time(interval), tag;保留像素 GROUP BY time 与 fill() 这样的时序特性。

时序库模型对比:InfluxDB 与 Prometheus 存储

InfluxDB 以推送写入、标签+字段模型与自带保留策略见长;Prometheus 本地 TSDB 以拉取采集、样本按标签序列存储、分块 + WAL 的架构为主,长期存储通常配合远程写。

时间戳精度与单位换算

时间戳位数直接对应单位:10 位约为秒、13 位约为毫秒、16 位约为微秒、19 位约为纳秒;写入与查询两侧的单位配置要一致。

1.x 保留策略(retention policy)

1.x 用数据库 + 保留策略管理生命周期:CREATE RETENTION POLICY 指定 DURATION 与 REPLICATION,DEFAULT 策略决定未显式指定 RP 时数据写入位置。

influx backup / restore 备份恢复

influx CLI 提供完整备份与恢复:备份包含元数据(用户、bucket、dashboard 等)与数据;恢复可以全量或指定 bucket 恢复到新实例。

1.x 连续查询(continuous query)

连续查询是 1.x 的自动降采样机制:按固定间隔对原始数据聚合写入另一个测量或 RP,实现长期保留的低精度数据。

v1 元数据 SHOW 命令

1.x 兼容层提供一组 SHOW 命令查看结构:数据库、测量、标签键值与序列;排查"数据写哪去了"与"标签有哪些取值"时很直接。

健康检查与指标端点

InfluxDB 2.x 暴露 /health、/ready 与 /metrics:前两者用于探活与就绪判断,/metrics 以 Prometheus 格式输出数据库自身运行指标。

时钟同步与时间对齐

分布式采集下各主机时钟偏差会直接体现在数据上:时间戳来自采集端时,主机必须配置 NTP 同步;跨主机聚合与告警依赖时间轴一致。

选型与架构

KV、文档、搜索与列式数据库选型要点

NoSQL 数据库分类与代表产品

NoSQL 按数据模型与访问模式分为文档、键值、宽列、搜索、时序、图等类别,各自解决的问题不同;选型从查询模式与一致性要求倒推,而不是先挑产品。

Redis 与 Memcached 选型对照

两者都做内存 KV,但能力边界不同:Memcached 定位纯缓存、多线程共享内存;Redis 提供数据结构、持久化、复制与集群。判断标准是要不要持久化、复杂结构与高可用,而不是单纯比较吞吐数字。

Redis 常用数据结构与场景对照

Redis 的价值在于按访问模式挑结构:string 做缓存与计数、hash 存对象字段、list 当队列、set 去重、zset 做排行、bitmap 记签到、HyperLogLog 估基数、stream 做消息流。结构选错会增加内存与实现复杂度。

Elasticsearch 作为检索层而非主存储

ES 面向检索与分析:默认近实时(写入到可搜索有刷新间隔)、更新会重建整篇文档、无跨文档事务,深分页受限;把业务数据全量托付给它需要慎重,常见做法是主存 + 检索副本。

Redis 持久化:RDB 与 AOF

RDB 是周期性快照,文件紧凑、恢复快;AOF 追加写命令,按 appendfsync 策略控制丢失窗口,Redis 7 采用多文件 AOF 并通过重写控制体积。两者可同时开启,用混合方式兼顾恢复速度与丢数窗口。

数据迁移流程:评估到切流回滚

迁移分六步:评估(查询清单与容量)、建目标结构、双写或 CDC 追增量、存量搬迁、校验(行数与校验和抽样)、灰度切流与回滚预案。每一步都要有可度量的完成标准,切流前保持旧路径可回退。

文档建模:内嵌与引用取舍

文档库建模的核心是"一次查询要拿到的数据放在一起":一对一与小规模一对多适合内嵌,无界增长与多对多适合引用;数组无序增长会带来重写与迁移成本。

各库备份方式对照与恢复要点

备份按库的能力组合:MongoDB 用 mongodump 逻辑备份或文件系统快照,副本集可加 oplog 做时间点恢复;ES 用快照仓库;ClickHouse 用 BACKUP 语句(老版本用 FREEZE);Redis 复制 RDB/AOF 文件;InfluxDB 2 用 influx backup。备份要配套恢复演练。

CAP 与 PACELC 基本判断

CAP 指出网络分区发生时只能在一致性与可用性之间取舍;PACELC 补充正常运行时还要在延迟与一致性间取舍。分布式系统分区难以避免,选型实际是在"C 优先还是 A 优先"上做决定。

旁路缓存模式与失效顺序

旁路缓存由应用负责读穿与写后失效:读 miss 回源并回填带 TTL 的值;写路径先落库再删除缓存键。反过来先删缓存再写库会留下旧值回填窗口,删除失败要重试补偿,TTL 作为最终兜底。

核心监控指标与采集入口

每个库都有对应的指标入口:延迟分位、错误率、连接与排队、复制延迟、缓存命中与资源水位。监控要先定义告警阈值与处置动作,再谈采集;只堆积仪表盘而没有动作等于没监控。

跨库慢查询排查路径

慢查询排查统一按四步走:找到慢操作(慢日志/分析器)、看清执行代价(扫描量与执行计划)、定位原因(缺索引、写法、数据倾斜)、验证修复(同数据对比前后)。各库都提供分析器与执行计划工具,先测量再改配置。

MongoDB 与 PostgreSQL JSONB 对比维度

两者都能存 JSON:MongoDB 原生文档模型与水平分片更成熟,PostgreSQL 以事务、SQL 生态与 JSONB + GIN 索引见长;选型看写入形态、查询复杂度与运维存量。

分片键选择与热点规避

分片键决定数据分布与查询路由:基数要高、取值频率要均匀、避免单调递增。MongoDB 支持范围与散列两类分片键,散列键能打散写入、代价是范围查询要扇出到所有分片核对。

NoSQL 安全基线:认证、传输与权限

安全基线从三件事开始:服务只监听内网地址、开启认证与 TLS、给应用分配最小权限账号。再补审计日志、备份加密与补丁管理。自建数据库暴露公网又无认证是事故的常见来源。

一致性模型与常见实现

从强到弱:线性一致、顺序一致、因果一致、读己之写、最终一致。多数 NoSQL 提供可配置的会话或读写级别,让业务在性能一致之间按场景选择。

缓存穿透、击穿与雪崩的处置

三类问题根因不同:穿透是不存在的 key 反复回源;击穿是热点 key 过期瞬间并发重建;雪崩是大批 key 同时失效或缓存层故障。对应处置是空值缓存/布隆过滤器、互斥重建或逻辑过期、TTL 抖动与降级预案。

CDC 与双写:把变更同步到派生存储

同步主库变更到搜索/缓存/分析库有两条主路:应用双写(实现直接,一致性靠补偿)与 CDC(消费 binlog/oplog/WAL 异步投递)。CDC 不侵入写路径且天然按变更顺序投递,代价是链路组件更多、重复投递要幂等消费。

NoSQL 常见使用反模式

多数线上问题来自几类反模式:无界增长的数组与文档、未锚定的正则全扫、把搜索库当主存储、深分页、单调分片键热点、过量索引拖慢写入。识别手段是看查询清单与增长趋势,而不是等出故障再补。

容量评估:从日增到磁盘预留

容量评估按链条推算:日均写入乘以保留周期得到逻辑量,再乘索引与副本系数,按实测压缩率折算磁盘,最后加水位余量。任何系数都要标注来源,并在上线后用监控数据持续校准。

OLTP 与 OLAP 选型差异

交易型负载(OLTP)以高并发点查点写、事务与低延迟为核心;分析型负载(OLAP)以批量扫描、聚合与吞吐为核心。用一套引擎硬扛两类负载通常两边都不理想。

热点 key 的识别与打散

热点 key 让单节点承担大部分读写,表现为 CPU 或带宽倾斜。先定位(Redis 提供基于 LFU 的 hotkeys 采样),再按读写路径处置:本地缓存挡读、key 加后缀拆多份、读写分离与限流降级。

数据生命周期与 TTL 清理对照

过期数据主动清理能控制成本:MongoDB 用 TTL 索引后台周期删除,ES 用 ILM 分阶段下沉与删除,ClickHouse TTL 在合并时执行并支持冷热分层,Redis 键过期是惰性加定期清理。清理策略要与备份与合规要求对齐。

反规范化的代价与冗余维护

反规范化用冗余换读取效率:把常一起访问的数据放进同一文档或宽表,省掉 join 与多次往返。代价是同一事实存多份,写入要同步更新多处,失败窗口带来数据漂移,需要补偿与对账兜底。

选型核对清单与决策留痕

选型结论要能回答一组具体问题:读写模式、一致性要求、查询能力、规模与增长、团队运维能力、成本与退出成本。用清单逐项打分并记录理由,避免几个月后只剩一个产品名而说不清当初的取舍。

行存与列存的选择依据

行存按整行连续存储,点查与整行读取高效;列存按列组织,扫描少量列的大范围统计时 IO 更省且压缩率高,代价是逐行更新与点查不擅长。

一致性哈希与虚拟节点

普通取模在扩容时会让多数 key 重新映射;一致性哈希把节点与 key 映射到同一个环上,扩缩容只影响相邻区间。虚拟节点用于缓解分布不均。Redis Cluster 使用 16384 槽位,思路相近但实现不同。

连接池与超时设置要点

客户端连接池限制并发与排队:MongoDB 驱动提供 maxPoolSize/minPoolSize/waitQueueTimeoutMS;ES 客户端维护每节点连接并在超时后重试;Redis 客户端一般复用少量长连接。连接、读写、整体超时要分层设置,重试配退避与幂等前提。

派生数据的对账与修复

派生存储(搜索索引、缓存、分析宽表)与主库之间迟早出现漂移:同步失败、消费者重放、程序缺陷都会造成差异。对账任务按时间窗比对计数与聚合指标,发现差异后重放变更或重建分片,修复动作要幂等。

分析建模:星型模型与预聚合落地

分析库建模先决定事实表粒度与常用过滤维度,再决定预聚合程度:ClickHouse 等列式库不支持高频 join,常把维度冗余进宽表(大宽表),并用物化视图维护聚合结果;牺牲存储与写入复杂度换查询延迟。

分页策略对照:offset 与游标

深分页的共同问题是 offset 越大代价越高:SQL OFFSET 要逐行跳过,MongoDB skip 类似,ES 的 from+size 受 index.max_result_window 限制。键集/游标分页用上一页末位值作为下一页条件,代价与页深基本无关,代价是不能随机跳页。

主存储到搜索索引的同步方案

检索副本与主存储之间的同步有四种常见做法:应用双写、CDC 投递、消息队列中转、定时全量重建加增量补偿。无论哪种都要处理删除事件与版本乱序,并保留从主存储全量重建索引的能力。

倒排索引与检索成本

倒排索引把"词条 → 文档列表"组织成词典与倒排表:词条匹配(term/match)走索引很快,而前导通配、正则与对分析后词条的整串匹配要扫描大量词条或全部文档。

多租户隔离:独立库、独立集合与共享结构

三种隔离级别各有取舍:每租户独立库/索引隔离强但连接与运维开销大;独立集合/索引是折中;共享结构加 tenantId 成本低,但要全链路强制过滤并防噪音邻居。选择看租户数量、合规要求与租户间规模差异。

存储成本构成与优化手段

NoSQL 成本由容量、副本、计算与流量共同构成。优化顺序通常是:压缩与编码、冷热分层、到期清理、副本与分片数精简、备份与日志的存储降级。先量化每类数据的单位成本,再决定动哪一块。

时序方案对照:Prometheus、InfluxDB 与列式库

时序选型围绕采集方式、查询语言与长期存储:Prometheus 拉取采集加 PromQL 告警,默认本地保留、长期存储靠远程写;InfluxDB 推送写入、自带保留策略与任务降采样;ClickHouse 用 SQL 做高基数明细与聚合;TimescaleDB 在 Postgres 内做时序扩展。

向量检索方案对照与选型

向量检索按现有栈与规模选:已有 PostgreSQL 用 pgvector 增加向量列;已有 ES 用 dense_vector 做混合检索;MongoDB 的向量能力主要随 Atlas 提供;独立大规模场景评估 Milvus/Qdrant 等专用库。关键是过滤条件、召回率与运维成本的平衡。

模式演进:无模式不等于免治理

文档库与搜索库放宽了建表约束,但数据形态依然随业务演进:新增字段、改类型、拆合字段都要有迁移计划。通行做法是版本字段加双写回填再切读,搜索库受映射限制还要走重建索引加别名切换。

过载保护:限流、排队与降级

过载时系统吞吐会随并发上升而下降,保护手段是限制在途请求:入口限流、队列上限、快速失败与按优先级降载。数据库层配合超时、只读降级与熔断,把压力挡在存储之前。

键值存储选型:缓存、配置与协调

键值类不只有缓存:Redis 适合高频读写与数据结构;Memcached 只做纯缓存;etcd/Consul 面向少量关键配置与协调(Raft、watch、租约),不适合当业务缓存;托管型 KV 用容量与延迟规格换取免运维。按访问模式与一致性要求对号入座。

写路径差异:LSM 与 B 树

存储引擎决定读写放大特征:LSM 类结构(写缓冲 + 不可变文件 + 后台合并)适合高吞吐写入,B 树原地更新适合点查与事务;很多系统是混合设计。

NewSQL 与分布式 SQL 的定位

NewSQL 用共识协议把单机数据库的强一致能力扩展到多节点:TiDB、OceanBase、CockroachDB、YugabyteDB 等提供 SQL 接口与水平扩展,部分还带列存副本做 HTAP。它适合单机容量与写入到瓶颈、又需要事务与 SQL 的场景。

备份恢复演练:从 RPO/RTO 到实操

备份只有在恢复演练过才算可用:先定义 RPO(可丢多少数据)与 RTO(可停多久),再定期在隔离环境执行恢复、校验数据并记录耗时。演练要覆盖部分恢复(单库、单集合、单索引)与全量恢复两类场景。

幂等设计:去重键与唯一索引

至少一次投递、用户重复点击、网络重试都会带来重复请求。幂等实现分两层:请求层用幂等键加唯一索引拦截重复提交;数据层用 upsert 与版本条件让重复执行不产生额外副作用。两层结合才能覆盖乱序与并发。

多机房部署模式的取舍

多机房方案按 RPO/RTO 与成本选择:主备(异步复制,站点级故障时切换)、同城双活(低延迟链路加仲裁)、单元化/多活(数据按单元切分,避免跨站写冲突)。一致性协议成员跨机房时,写入延迟取决于慢机房,机房布局要服从仲裁需求。

上线前压测要点

压测的价值取决于还原度:查询混合比例、数据总量与分布(热点 key)、缓存命中率都要接近生产,否则得到的是好看但无意义的数字。观察指标以 p99 延迟与资源饱和点为主,并做故障注入验证降级路径。

事务外盒:可靠事件发布

业务写入与事件发布要原子:在同一事务里写业务表和 outbox 表,再由中继任务读取 outbox 投递消息,投递成功后标记或删除。这样避免"数据库提交了但消息没发出去"的丢事件问题,代价是引入中继与幂等消费。

读扩散与写扩散的取舍

推送(写扩散)在写入时把数据分发到多处,读路径简单但写成本乘以扇出数;拉取(读扩散)在读取时聚合多处数据,写便宜但读延迟与查询成本高。社交时间线、关注流常见混合方案:活跃用户推送、长尾拉取。

数据质量巡检:完整性、时效与分布

数据接入后要持续巡检四类问题:量级异常(突增突降)、时效劣化(最新数据时间落后)、字段质量(空值率、非法值)、分布漂移(枚举与分位数变化)。把检查写成可调度查询,结果落表并接告警。

图数据库的适用场景与关联查询

当关系本身是查询主体(多跳路径、最短路径、环与社区)时,图数据库比在文档库或关系库上拼递归查询更直接:数据以顶点和边存储,遍历沿指针进行。层级浅、模式固定时继续用文档库的图查询或 SQL 递归即可。

没有匹配的条目。换个关键词试试,或直接全站搜索。
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌