一、知识记录#

Yarn(前端包管理工具)介绍#

全称为Yarn Package Manager(Yet Another Resource Negotiator 的缩写),是JavaScript / Node.js 的包管理器,用于管理项目依赖(类似于 npm)。

核心特点(相比 npm 的优势)

  • 安装速度更快:并行下载 + 离线缓存机制。

  • 更安全可靠:生成 yarn.lock 文件,锁定所有依赖的精确版本,保证“一次安装,到处一致”。

  • 支持 Workspaces:特别适合大型 monorepo 项目(一个仓库管理多个子包)。

  • 安装过程更干净:输出信息简洁,错误提示友好。

  • 其他实用功能:零安装模式(Plug’n’Play)、更好的依赖冲突解决等。

常用命令对比(与 npm):

操作npm 命令Yarn 命令
安装依赖npm installyarn 或 yarn install
添加依赖npm install xxxyarn add xxx
添加开发依赖npm install xxx –save-devyarn add xxx -D
全局安装npm install -g xxxyarn global add xxx
删除依赖npm uninstall xxxyarn 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 会自动:

  1. 计算 user_id % 2 → 101 % 2 = 1 → 去 db1

  2. 根据创建时间去对应表 → 例如 2026-04 月的表 orders_202604

  3. 返回结果给应用

应用层不需要知道分库分表规则,只写普通 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 版本

image

image