一、知识记录#
Yarn(前端包管理工具)介绍#
全称为Yarn Package Manager(Yet Another Resource Negotiator 的缩写),是JavaScript / Node.js 的包管理器,用于管理项目依赖(类似于 npm)。
核心特点(相比 npm 的优势):
安装速度更快:并行下载 + 离线缓存机制。
更安全可靠:生成 yarn.lock 文件,锁定所有依赖的精确版本,保证“一次安装,到处一致”。
支持 Workspaces:特别适合大型 monorepo 项目(一个仓库管理多个子包)。
安装过程更干净:输出信息简洁,错误提示友好。
其他实用功能:零安装模式(Plug’n’Play)、更好的依赖冲突解决等。
常用命令对比(与 npm):
| 操作 | npm 命令 | Yarn 命令 |
|---|---|---|
| 安装依赖 | npm install | yarn 或 yarn install |
| 添加依赖 | npm install xxx | yarn add xxx |
| 添加开发依赖 | npm install xxx –save-dev | yarn add xxx -D |
| 全局安装 | npm install -g xxx | yarn global add xxx |
| 删除依赖 | npm uninstall xxx | yarn remove xxx |
npm是Node.js的默认包管理器,当你安装Node.js时,npm会自动安装;yarn 是Facebook开发的替代npm的包管理器,需要单独安装:npm install -g yarn。 两者功能相同:都用于管理JavaScript/Node.js项目的依赖包,都读取同一个 package.json 文件。
winget#
winget 是 Windows Package Manager(Windows 包管理器) 的官方命令行工具,由微软开发。它是 Windows 系统内置的包管理器,类似于 Linux 的 apt、yum 或 macOS 的 brew。
- 和npm的区别:
winget管的是“系统软件”,npm管的是“代码依赖”
ShardingSphere#
ShardingSphere 是一个开源的分布式数据库中间件,主要用于解决数据库的 水平扩展 和 分库分表 问题。它由 Apache 基金会 维护。它本质上是一个 中间层,可以让应用透明地访问多个数据库,而不必直接处理分库分表的复杂逻辑。
它的核心功能包括:
分库分表(Sharding):把数据分散到多个数据库或表中,提高并发能力。
读写分离(Read/Write Splitting):主库处理写操作,从库处理读操作,提高读写性能。
分布式事务:保证跨库操作的一致性。
数据治理:如数据加密、脱敏、审计等。
简单说,如果你的数据库要存储的数据量非常大,一台数据库服务器扛不住访问压力,ShardingSphere 可以帮你把数据“拆开”,同时对应用透明,不用改太多代码。
- ShardingSphere:
负责 让应用层像操作普通单库一样操作 SQL
它做了中间层的事情:
SQL 解析 → 知道你查的是哪个库、哪个表
路由 → 自动选择正确的数据库和表
聚合结果 → 如果查询跨表,它会把结果合并返回给应用
提供额外功能 → 读写分离、分布式事务、限流、数据脱敏等
换句话说,ShardingSphere 不帮你拆库分表,它帮你 透明访问已经拆分的数据库。
举例:
场景:电商系统的用户订单表#
假设你有一个 orders 表,记录所有用户的订单信息。随着用户和订单量增加,单表可能会变得 非常大,查询和写入都慢。
- 原始单表设计:
当订单量达到 上亿条,查询 user_id=101 的订单可能就非常慢了。
分库分表设计示例#
1️⃣ 分库(按用户ID取模)#
假设我们有 2 个数据库实例:
db0存储 user_id % 2 = 0 的用户db1存储 user_id % 2 = 1 的用户
2️⃣ 分表(每个库内再分表,按月份)#
每个数据库的 orders 表再按月份拆分,比如:
orders_202604→ 2026 年 4 月订单orders_202605→ 2026 年 5 月订单
这样,每个库里每个月只有一部分订单,查询速度更快。
查询示例(使用 ShardingSphere)#
假设你要查 user_id=101 的订单,ShardingSphere 会自动:
计算 user_id % 2 → 101 % 2 = 1 → 去
db1根据创建时间去对应表 → 例如 2026-04 月的表
orders_202604返回结果给应用
应用层不需要知道分库分表规则,只写普通 SQL:
SELECT * FROM orders WHERE user_id = 101 AND created_at >= ‘2026-04-01’;
背后其实跑的查询是:
SELECT * FROM db1.orders_202604 WHERE user_id = 101;
💡 好处:
查询单个用户订单时,只访问 一个表,非常快
写入也分散到不同数据库,避免单点压力
可以按需水平扩展,增加数据库实例或表
二、开发感悟#
1.这个项目仓库中的 Maven 不强依赖本机安装,因为仓库里自带 mvnw.cmd与mvnw(maven Wrapper)。#
Maven 项目现在不需要强制要求每个人都在自己电脑上提前安装 Maven 了。因为项目代码仓库(Git 等)里已经自带了 mvnw.cmd(Windows 系统)和 mvnw(Mac/Linux 系统)这两个脚本,你可以直接用它们来运行 Maven 命令。
.mvn/wrapper/maven-wrapper.properties —— 配置文件,指定项目需要的 精确 Maven 版本