MongoDB part3-MongoDB的索引详解
索引简介
什么是索引
索引是 MongoDB
中优化查询性能的核心手段,通过创建索引可以大幅幅减少查询时的文档扫描量(从全集合扫描变为索引扫描)
本质上,索引是一种数据结构(类似书籍的目录),存储集合中某个 /
某些字段的值及其对应文档的位置信息,用于快速定位满足查询条件的文档。
索引并非没有代价,索引会占用额外存储空间,且写入操作(插入 / 更新 /
删除)会触发索引更新,可能降低写入性能。因此需平衡查询效率和写入成本,避免过度索引。
默认情况下,索引的创建是为每个集合自动为 _id
字段创建唯一索引(_id_),_id
索引可防止客户端插入两个具有相同 _id
字段值的文档。无法删除此索引。
在分片群集中,如果您不使用
_id 字段作为分分片键,那么您的应用程序必须确保
_id
字段中的值具有唯一性。为此,您可以使用一个具有自动生成的 ObjectId
的字段。
MongoDB 索引使用 B-Tree 数据结构(MySQL 是 B+Tree)
索引类型概述
MongoDB...
MongoDB part2—MongoDB的基本操作和mongosh命令
MongoDB Shell
MongoDB Shell(简称简称 mongo 或
mongosh)是 MongoDB 官方提供的交互式命令行工具,用于连接
MongoDB 数据库并执行各种操作(如查询、插入、更新数据,管理数据库 /
集合等)。它是开发者与 MongoDB 交互的最直接方式之一,其使用的命令是
MongoDB 操作的 “原生语法”
它的本质实际上是一个基于 JavaScript 的交互式环境,支持 JavaScript
语法和 MongoDB 扩展命令。你可以在其中输入命令,实时执行并获取结果,类似
MySQL 的 mysql 命令行工具。
从 MongoDB 5.0 开始,官方推荐使用新一代 Shell 工具
mongosh(功能更完善,支持语法高亮、自动补全、更好的错误提示等),旧的
mongo 工具已逐步废弃。
也就是说,你可以使用 js 操作 MongoDB
12345678910111213141516// 在 mongosh 中执行 JS 逻辑const userList = [ { name:...
使用n8n搭建基于Ollama本地模型的工作流—搭建天气邮件助手
关于Ollama
安装就不说了,直接快进到拉取模型这步骤
Ollama上拉取本地模型
Ollama上可以拉取的模型在官网就能看
https://ollama.com/search
image-20251024170841437
我的笔记本是 4060 RAM是48G 的,所以我直接拉取 qwen3:4b
规模的模型就可以
image-20251024170948644
下载略慢,耐心一些
byd 这个Ollama拉取模型貌似非要在 C盘 中
我改那个环境变量貌似没好使
位置在
image-20251024171105764
n8n搭建工作流
我们搭建一个基于 Ollama 本地 qwen3
的工作流,目的是能够结合今日的实时天气,去发送对应的请求然后给出出行和穿衣的建议
高德地图的 api 自己去看吧,是需要自己申请 key
的,比和风好搞多了,我这边也不是很明白,我只知道一些比较简单的
https://console.amap.com/dev/index...
MongoDB part1—了解MongoDB及其存储结构和数据类型
MongoDB介绍
什么是MongoDB,主要是做什么的
NoSQL的内容在这里就不展开说了,我相信看到这个的大家都知道什么是
NoSQL
MongoDB 是一款开源的分布式文档型 NoSQL 数据库,由
MongoDB Inc. 开发维护,由C++语言编写,核心是存储 “文档”
而非传统关系型数据库的 “行 - 列”
数据,旨在解决海量数据存储、高并发读写、灵活 schema
等传统数据库难以高效应对的问题。
作为基于分布式文件存储的数据库,它天生为处理大规模数据设计,目前是
NoSQL 数据库中市场份额最高、生态最完善的产品之一。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
它支持的数据结构非常松散,是类似 Json的...
Elasticsearch part6—ES分片,服务器和集群
Elasticsearch 集群
ES的集群是啥样的
Elasticsearch(ES)集群是分布式搜索引擎的核心形态,通过多节点协同工作实现高可用、高扩展和负载均衡。
和其他分布式的其实差不多,ES的集群无非就是,由一个或多个节点(Node)组成的集合,共同管理整个数据集,并提供分布式查询能力。
集群通过唯一的 集群名称(默认
elasticsearch)标识,节点通过加入相同名称的集群实现协同。
节点是单个运行的 ES
实例,是集群的基本组成单元。每个节点有唯一名称(默认随机生成),可通过配置指定角色。
角色
功能说明
适用场景
主节点(Master)
管理集群元数据(索引创建 /
删除、分片分配),不处理数据和查询(默认)。
集群控制节点,建议单独部署
数据节点(Data)
存储数据(分片),处理 CRUD、搜索、聚合等操作。
承载数据和计算,需高 CPU /...
Elasticsearch part4—ES的文档基础操作和_search查询
文档基本操作
Elasticsearch(ES)中的 “文档(Document)”
是存储数据的基本单元(类似数据库中的
“行”),所有业务数据最终都以文档形式存储在索引中。
文档结构:JSON
格式,包含多个字段(如id、name),字段值需符合索引映射(Mapping)定义的类型。
文档 ID:唯一标识文档,可手动指定或由 ES
自动生成。
元数据:文档自带的系统字段,如_index(所属索引)、_id(文档
ID)、_version(版本号,每次修改递增)。
文档创建
新增文档有两种方式:指定
ID(PUT)或自动生成
ID(POST)
指定 ID 新增(PUT)
适用于已知唯一 ID 的场景(如用业务 ID 作为文档 ID)。
123456PUT /索引名/_doc/文档ID{ "字段1": "值1", "字段2": "值2", ...}
示例(向users_test索引新增...
Elasticsearch part5—在Spring框架中操作ES文档
RestAPI
在前面我们讲解了手动发送的对 ES 索引库和文档的操作
本质上这些都是组装请求,携带JSON,进行我们想要的操作,通过http请求发送给ES。
REST(Representational State
Transfer,表述性状态转移)是一种软件架构风格,用于构建网络应用程序。而基于
REST 风格设计的 API 就称为 RestAPI。
RestAPI 具备以下特点:
资源抽象:将网络中的一切都视为资源,比如一篇文章、一个用户、一条订单记录等,每个资源都有对应的唯一
URI(Uniform Resource
Identifier,统一资源标识符)来标识,像https://example.com/api/users/1
就可以表示 ID 为 1 的用户资源。
无状态通信:客户端和服务器之间的通信是无状态的,即每次请求都包含了处理该请求所需的全部信息,服务器不会依赖之前请求的状态来处理当前请求。这使得请求可以被独立处理,提高了系统的可扩展性和可靠性。
统一接口:使用标准的 HTTP
方法(GET、POST、PUT、DELETE...
Elasticsearch_part3—ES分词器和索引基础操作
分词器
什么是分词器
分词器是 Elasticsearch
中用于处理文本数据的核心组件。它的任务是将一串原始的、连续的文本(比如一个句子或一段话),切分成一个个独立的、有意义的词条,并可能对这些词条进行规范化处理。
分词器是将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具。
想象一下你在处理英文句子
"I'm loving the beautiful scenery!"。
未经处理:对计算机来说,这只是一长串字符。
经过分词器处理后:它会被切分成
["i'm", "loving", "the", "beautiful", "scenery"],并且可能进一步规范化为
["i", "love", "beautiful", "scenery"](去停用词、词干提取等)。
这样,计算机才能基于这些独立的词条来构建倒排索引,并进行高效的搜索。
其中,ES 内置了许多分词器:
Standard Analyzer -
默认分词器,按词切分,小写处理
Simple Analyzer...
Elasticsearch part2—深入讲解ES倒排索引及其优化机制
Elasticsearch的索引
深入理解 ES 的索引
Elasticsearch是一个基于Lucene库的开源搜索引擎,它提供分布式的实时文件存储和搜索,可扩展性好,并且支持通过HTTP网络接口交互,数据以JSON格式展示。
之前中我们介绍过,Elasticsearch
索引是一个逻辑命名空间,其中包含一系列的文档。每个文档由一系列字段组成,字段则是包含数据的键值对。可以将
Elasticsearch
集群视为一个数据库,索引就相当于数据库中的表,而文档类似于表中的行。
而关系数据库中的索引是与表相关联的一种数据结构,用于加速数据检索。
Elasticsearch
索引是一个包含文档的逻辑单元,且无需预先定义模式便可导入数据,具有更高的灵活性。
而 Elasticsearch 的索引机制是完全不同于MySQL的 B+Tree
结构。索引会被压缩放入内存用于加速搜索过程,这一点在效率上是完爆 MySQL
的。但是 Elasticsearch 会对全部...
Elasticsearch part1—ES相关内容的安装和初步配置
Elasticsearch介绍
前言
想象一下:
你拥有一个超大型的galgame数据库(你的数据),里面有数百个galgame游戏(你的文档)。Elasticsearch
就是这个数据库里一位强大的“老资历”。
传统查找(如数据库):
如果你想找一本名叫《XXX》的galgame,你得知道它在哪个区、哪个文件夹、哪一层(这相当于数据库的索引和主键)。如果你记不清全名,只记得游戏里提到了“人工智能”和“未来”,传统方式就几乎无能为力了。
Elasticsearch 的方式:
这位老资历不同,他不仅记得每个galgame的游戏名、出场角色、cv,他甚至记得每个场景里每一句对话的每一个词。你只需要走过去对他说:“老资历,帮我找所有谈到‘人工智能’和‘未来’的galgame”,他几乎能瞬间给你一个精确的、按相关性排序的游戏——未来广播与人工鸽。
这个“超级老资历”就是
Elasticsearch。它是一个开源的、分布式的、RESTful
的搜索和分析引擎。
本质上,ES...
Windows下minio的配置和在Spring框架的使用
MinIO的配置
前言
MinIO
是一款高性能、分布式的对象存储系统,常用于存储非结构化数据(如图片、视频、文档等)。它可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS,
Redis 或者 MySQL。
对象存储服务(Object...
Trinoline_Genesis安装教程
本体解压完之后需要继续解压,解压完后会出现这些内容
image-20251016172455279
挂载镜像,GENESIS.iso
是光盘映像文件,需要先 “挂载”
到系统,模拟成真实光盘才能安装。
系统会自动把 GENESIS.iso
挂载为一个虚拟光驱(比如新增一个 “DVD
驱动器”,盘符可能是 D:、E: 等,我是Y:)。
挂载完之后是这样的
image-20251016172905535
注意先挂载,然后以管理员权限运行 anzhuang.bat,序列号全用大写
A,用来破序列
请注意全部输入 A,20个,多了就报错
这个安装目录是默认安装到 c:,打开 anzhuang.bat
也可以修改,但是貌似修改到非 C 盘会报错,因为权限不够
右键点击 anzhuang.bat → 选择
“编辑”(用记事本打开)。
在打开的批处理文件中,找到设置安装路径的代码行(
set...
不同的开源协议之间都有什么区别
什么是开源协议
开源协议是一种法律文件,它规定了开源软件的使用者、修改者和分发者在使用、修改和分发该软件时的权利和义务。其核心目的是在保护版权的同时,推动软件的共享和创新。
开源协议本质上是版权所有者对软件使用、修改、分发的规则定义,以下是
GitHub 上最常用的协议类型:
image-20250614185512976
image-20250614185526130
开源协议有 LGPL,Mozilla,GPL,BSD,MIT 和 Apache。
核心条款包括
条款类型
具体内容
商业使用
是否允许将开源软件用于商业产品或服务(如 MIT、Apache 允许,CC-BY-NC
禁止)。
衍生作品开源
是否要求修改后的代码或衍生作品必须开源(如 GPL 强制开源,MIT
无此限制)。
版权声明
是否必须保留原作者的版权和许可声明(几乎所有协议均要求)。
专利授权
是否包含专利授权条款,避免用户因使用代码而被起诉(如 Apache...














