Skip to content

Commit e551e30

Browse files
committed
docs: 文档整理
1 parent 3feda7e commit e551e30

38 files changed

+178
-164
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<p align="center">
22
<a href="https://dunwu.github.io/db-tutorial/" target="_blank" rel="noopener noreferrer">
3-
<img src="http://dunwu.test.upcdn.net/common/logo/dunwu-logo.png" alt="logo" width="150px"/>
3+
<img src="https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png" alt="logo" width="150px"/>
44
</a>
55
</p>
66

@@ -31,7 +31,7 @@
3131

3232
#### [Mysql](docs/sql/mysql) 📚
3333

34-
![img](http://dunwu.test.upcdn.net/snap/20200716103611.png)
34+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716103611.png)
3535

3636
- [Mysql 应用指南](docs/sql/mysql/mysql-quickstart.md)
3737
- [Mysql 工作流](docs/sql/mysql/mysql-index.md) - 关键词:`连接``缓存``语法分析``优化``执行引擎``redo log``bin log``两阶段提交`
@@ -57,7 +57,7 @@
5757

5858
#### [Redis](docs/nosql/redis) 📚
5959

60-
![img](http://dunwu.test.upcdn.net/snap/20200713105627.png)
60+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713105627.png)
6161

6262
- [Redis 面试总结](docs/nosql/redis/redis-interview.md) 💯
6363
- [Redis 应用指南](docs/nosql/redis/redis-quickstart.md) ⚡ - 关键词:`内存淘汰``事件``事务``管道``发布与订阅`

docs/.vuepress/config.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module.exports = {
1515
},
1616
},
1717
themeConfig: {
18-
logo: 'images/dunwu-logo-100.png',
18+
logo: 'https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png',
1919
repo: 'dunwu/db-tutorial',
2020
repoLabel: 'Github',
2121
docsDir: 'docs',
@@ -77,6 +77,17 @@ module.exports = {
7777
updatePopup: true,
7878
},
7979
],
80+
[
81+
'@vuepress/last-updated',
82+
{
83+
transformer: (timestamp, lang) => {
84+
// 不要忘了安装 moment
85+
const moment = require('moment')
86+
moment.locale(lang)
87+
return moment(timestamp).fromNow()
88+
},
89+
},
90+
],
8091
['@vuepress/medium-zoom', true],
8192
[
8293
'container',

docs/README.md

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
---
22
home: true
3-
heroImage: /images/dunwu-logo-200.png
3+
heroImage: https://raw.githubusercontent.com/dunwu/images/dev/common/dunwu-logo-200.png
44
heroText: DB-TUTORIAL
55
tagline: 💾 db-tutorial 是一个数据库教程。
66
actionLink: /
77
footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
88
---
99

10-
# DB-TUTORIAL
11-
1210
![license](https://badgen.net/github/license/dunwu/db-tutorial)
1311
![build](https://api.travis-ci.com/dunwu/db-tutorial.svg?branch=master)
1412

@@ -32,7 +30,7 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
3230

3331
#### [Mysql](sql/mysql) 📚
3432

35-
![img](http://dunwu.test.upcdn.net/snap/20200716103611.png)
33+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200716103611.png)
3634

3735
- [Mysql 应用指南](sql/mysql/mysql-quickstart.md)
3836
- [Mysql 工作流](sql/mysql/mysql-index.md) - 关键词:`连接``缓存``语法分析``优化``执行引擎``redo log``bin log``两阶段提交`
@@ -58,7 +56,7 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
5856

5957
#### [Redis](nosql/redis) 📚
6058

61-
![img](http://dunwu.test.upcdn.net/snap/20200713105627.png)
59+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200713105627.png)
6260

6361
- [Redis 面试总结](nosql/redis/redis-interview.md) 💯
6462
- [Redis 应用指南](nosql/redis/redis-quickstart.md) ⚡ - 关键词:`内存淘汰``事件``事务``管道``发布与订阅`

docs/middleware/flyway.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ migrations 最常用的编写形式就是 SQL。
386386

387387
为了被 Flyway 自动识别,SQL migrations 的文件命名必须遵循规定的模式:
388388

389-
![img](http://dunwu.test.upcdn.net/cs/database/flyway/sql-migrations.png!zp)
389+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/database/flyway/sql-migrations.png)
390390

391391
- **Prefix** - `V` 代表 versioned migrations (可配置), `U` 代表 undo migrations (可配置)、 `R` 代表 repeatable migrations (可配置)
392392
- **Version** - 版本号通过`.`(点)或`_`(下划线)分隔 (repeatable migrations 不需要)
@@ -405,7 +405,7 @@ migrations 最常用的编写形式就是 SQL。
405405

406406
为了被 Flyway 自动识别,JAVA migrations 的文件命名必须遵循规定的模式:
407407

408-
![img](http://dunwu.test.upcdn.net/cs/database/flyway/java-migrations.png!zp)
408+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/database/flyway/java-migrations.png)
409409

410410
- **Prefix** - `V` 代表 versioned migrations (可配置), `U` 代表 undo migrations (可配置)、 `R` 代表 repeatable migrations (可配置)
411411
- **Version** - 版本号通过`.`(点)或`_`(下划线)分隔 (repeatable migrations 不需要)

docs/middleware/shardingsphere-jdbc.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ shardingsphere-jdbc 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供
88
- 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
99
- 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。
1010

11-
![](http://dunwu.test.upcdn.net/snap/20201008151213.png)
11+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151213.png)
1212

1313
## 快速入门
1414

@@ -74,14 +74,14 @@ DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(dataSou
7474

7575
ShardingSphere 的 3 个产品的数据分片主要流程是完全一致的。 核心由 `SQL 解析 => 执行器优化 => SQL 路由 => SQL 改写 => SQL 执行 => 结果归并`的流程组成。
7676

77-
![](http://dunwu.test.upcdn.net/snap/20201008153551.png)
77+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008153551.png)
7878

7979
- QL 解析:分为词法解析和语法解析。 先通过词法解析器将 SQL 拆分为一个个不可再分的单词。再使用语法解析器对 SQL 进行理解,并最终提炼出解析上下文。 解析上下文包括表、选择项、排序项、分组项、聚合函数、分页信息、查询条件以及可能需要修改的占位符的标记。
8080
- 执行器优化:合并和优化分片条件,如 OR 等。
8181
- SQL 路由:根据解析上下文匹配用户配置的分片策略,并生成路由路径。目前支持分片路由和广播路由。
8282
- SQL 改写:将 SQL 改写为在真实数据库中可以正确执行的语句。SQL 改写分为正确性改写和优化改写。
8383
- SQL 执行:通过多线程执行器异步执行。
84-
- 结果归并:将多个执行结果集归并以便于通过统一的 JDBC 接口输出。结果归并包括流式归并、内存归并和使用装饰者模式的追加归并这几种方式
84+
- 结果归并:将多个执行结果集归并以便于通过统一的 JDBC 接口输出。结果归并包括流式归并、内存归并和使用装饰模式的追加归并这几种方式
8585

8686
### 解析引擎
8787

docs/middleware/shardingsphere.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(计划中)这 3 款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
88

9-
![](http://dunwu.test.upcdn.net/snap/20201008151613.png)
9+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151613.png)
1010

1111
#### ShardingSphere-JDBC
1212

@@ -16,7 +16,7 @@ ShardingSphere 是一套开源的分布式数据库中间件解决方案组成
1616
- 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
1717
- 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。
1818

19-
![](http://dunwu.test.upcdn.net/snap/20201008151213.png)
19+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151213.png)
2020

2121
#### Sharding-Proxy
2222

@@ -25,15 +25,15 @@ ShardingSphere 是一套开源的分布式数据库中间件解决方案组成
2525
- 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用。
2626
- 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端。
2727

28-
![](http://dunwu.test.upcdn.net/snap/20201008151434.png)
28+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151434.png)
2929

3030
#### Sharding-Sidecar(TODO)
3131

3232
定位为 Kubernetes 的云原生数据库代理,以 Sidecar 的形式代理所有对数据库的访问。 通过无中心、零侵入的方案提供与数据库交互的的啮合层,即 `Database Mesh`,又可称数据库网格。
3333

3434
Database Mesh 的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互进行有效地梳理。 使用 Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。
3535

36-
![](http://dunwu.test.upcdn.net/snap/20201008151557.png)
36+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151557.png)
3737

3838
| _Sharding-JDBC_ | _Sharding-Proxy_ | _Sharding-Sidecar_ | |
3939
| :-------------- | :--------------- | :----------------- | ------ |
@@ -50,7 +50,7 @@ ShardingSphere-JDBC 采用无中心化架构,适用于 Java 开发的高性能
5050

5151
Apache ShardingSphere 是多接入端共同组成的生态圈。 通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合与当前业务的最佳系统架构。
5252

53-
![](http://dunwu.test.upcdn.net/snap/20201008151658.png)
53+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20201008151658.png)
5454

5555
### 功能列表
5656

docs/nosql/hbase.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -45,17 +45,17 @@ HBase 表模型结构为:
4545
- 列族(column family)是列的集合。
4646
- 列(row)是键值对的集合。
4747

48-
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551164163369.png!zp)
48+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/bigdata/hbase/1551164163369.png)
4949

5050
HBase 表的单元格(cell)由行和列的坐标交叉决定,是有版本的。默认情况下,版本号是自动分配的,为 HBase 插入单元格时的时间戳。单元格的内容是未解释的字节数组。
5151

5252
行的键也是未解释的字节数组,所以理论上,任何数据都可以通过序列化表示成字符串或二进制,从而存为 HBase 的键值。
5353

54-
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551164224778.png!zp)
54+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/bigdata/hbase/1551164224778.png)
5555

5656
### HBase 架构
5757

58-
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551164744748.png!zp)
58+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/bigdata/hbase/1551164744748.png)
5959

6060
和 HDFS、YARN 一样,HBase 也采用 master / slave 架构:
6161

@@ -70,7 +70,7 @@ HBase 表按行键范围水平自动划分为区域(region)。每个区域
7070

7171
**区域只不过是表被拆分,并分布在区域服务器。**
7272

73-
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551165887616.png!zp)
73+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/bigdata/hbase/1551165887616.png)
7474

7575
#### Master 服务器
7676

@@ -81,7 +81,7 @@ HBase 表按行键范围水平自动划分为区域(region)。每个区域
8181
- 监控集群中的所有 region 服务器
8282
- 支持 DDL 接口(创建、删除、更新表)
8383

84-
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551166513572.png!zp)
84+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/bigdata/hbase/1551166513572.png)
8585

8686
#### Regin 服务器
8787

@@ -93,13 +93,13 @@ HBase 表按行键范围水平自动划分为区域(region)。每个区域
9393
- `MemStore` - 是写缓存。它存储尚未写入磁盘的新数据。在写入磁盘之前对其进行排序。每个区域每个列族有一个 MemStore。
9494
- `Hfiles` - 将行存储为磁盘上的排序键值对。
9595

96-
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551166602999.png!zp)
96+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/bigdata/hbase/1551166602999.png)
9797

9898
#### ZooKeeper
9999

100100
HBase 使用 ZooKeeper 作为分布式协调服务来维护集群中的服务器状态。Zookeeper 维护哪些服务器是活动的和可用的,并提供服务器故障通知。集群至少应该有 3 个节点。
101101

102-
![img](http://dunwu.test.upcdn.net/cs/bigdata/hbase/1551166447147.png!zp)
102+
![img](https://raw.githubusercontent.com/dunwu/images/dev/cs/bigdata/hbase/1551166447147.png)
103103

104104
## HBase 和 RDBMS
105105

docs/nosql/mongodb/mongodb-aggregation.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ MongoDB Pipeline 由多个阶段([stages](https://docs.mongodb.com/manual/refe
1414

1515
同一个阶段可以在 pipeline 中出现多次,但 [`$out`](https://docs.mongodb.com/manual/reference/operator/aggregation/out/#pipe._S_out)[`$merge`](https://docs.mongodb.com/manual/reference/operator/aggregation/merge/#pipe._S_merge),和 [`$geoNear`](https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/#pipe._S_geoNear) 阶段除外。所有可用 pipeline 阶段可以参考:[Aggregation Pipeline Stages](https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline/#aggregation-pipeline-operator-reference)
1616

17-
![img](http://dunwu.test.upcdn.net/snap/20200921092725.png)
17+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200921092725.png)
1818

1919
- 第一阶段:[`$match`](https://docs.mongodb.com/manual/reference/operator/aggregation/match/#pipe._S_match) 阶段按状态字段过滤 document,然后将状态等于“ A”的那些 document 传递到下一阶段。
2020
- 第二阶段:[`$group`](https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group) 阶段按 cust_id 字段对 document 进行分组,以计算每个唯一 cust_id 的金额总和。
@@ -224,7 +224,7 @@ Pipeline 的内存限制为 100 MB。
224224
225225
Map-reduce 是一种数据处理范式,用于将大量数据汇总为有用的聚合结果。为了执行 map-reduce 操作,MongoDB 提供了 [`mapReduce`](https://docs.mongodb.com/manual/reference/command/mapReduce/#dbcmd.mapReduce) 数据库命令。
226226

227-
![img](http://dunwu.test.upcdn.net/snap/20200921155546.svg)
227+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200921155546.svg)
228228

229229
在上面的操作中,MongoDB 将 map 阶段应用于每个输入 document(即 collection 中与查询条件匹配的 document)。 map 函数分发出多个键-值对。对于具有多个值的那些键,MongoDB 应用 reduce 阶段,该阶段收集并汇总聚合的数据。然后,MongoDB 将结果存储在 collection 中。可选地,reduce 函数的输出可以通过 finalize 函数来进一步汇总聚合结果。
230230

@@ -240,7 +240,7 @@ MongoDB 支持一下单一目的的聚合操作:
240240

241241
所有这些操作都汇总了单个 collection 中的 document。尽管这些操作提供了对常见聚合过程的简单访问,但是它们相比聚合 pipeline 和 map-reduce,缺少灵活性和丰富的功能性。
242242

243-
![img](http://dunwu.test.upcdn.net/snap/20200921155935.svg)
243+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200921155935.svg)
244244

245245
## SQL 和 MongoDB 聚合对比
246246

@@ -371,7 +371,7 @@ db.orders.insertMany([
371371

372372
SQL 和 MongoDB 聚合方式对比:
373373

374-
![img](http://dunwu.test.upcdn.net/snap/20200921200556.png)
374+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200921200556.png)
375375

376376
## 参考资料
377377

docs/nosql/mongodb/mongodb-crud.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ MongoDB 提供以下操作向一个 collection 插入 document
1717

1818
> 注:以上操作都是原子操作。
1919
20-
![](http://dunwu.test.upcdn.net/snap/20200924112342.svg)
20+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924112342.svg)
2121

2222
插入操作的特性:
2323

@@ -66,7 +66,7 @@ db.inventory.insertMany([
6666

6767
MongoDB 提供 [`db.collection.find()`](https://docs.mongodb.com/manual/reference/method/db.collection.find/#db.collection.find) 方法来检索 document。
6868

69-
![](http://dunwu.test.upcdn.net/snap/20200924113832.svg)
69+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924113832.svg)
7070

7171
### Update 操作
7272

@@ -82,7 +82,7 @@ MongoDB 提供以下操作来更新 collection 中的 document
8282
- [`db.collection.updateMany(<filter>, <update>, <options>)`](https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/#db.collection.updateMany)
8383
- [`db.collection.replaceOne(<filter>, <update>, <options>)`](https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/#db.collection.replaceOne)
8484

85-
![](http://dunwu.test.upcdn.net/snap/20200924114043.svg)
85+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924114043.svg)
8686

8787
【示例】插入测试数据
8888

@@ -191,7 +191,7 @@ MongoDB 提供以下操作来删除 collection 中的 document
191191
- [`db.collection.deleteOne()`](https://docs.mongodb.com/manual/reference/method/db.collection.deleteOne/#db.collection.deleteOne):删除一条 document
192192
- [`db.collection.deleteMany()`](https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/#db.collection.deleteMany):删除多条 document
193193

194-
![](http://dunwu.test.upcdn.net/snap/20200924120007.svg)
194+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200924120007.svg)
195195

196196
删除操作的特性:
197197

docs/nosql/mongodb/mongodb-index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
1414

15-
![](http://dunwu.test.upcdn.net/snap/20200921210621.svg)
15+
![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200921210621.svg)
1616

1717
### createIndex() 方法
1818

docs/nosql/mongodb/mongodb-model-example.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ review collection 存储所有的评论
371371

372372
## 树形结构模型
373373

374-
![img](http://dunwu.test.upcdn.net/snap/20200911194846.svg)
374+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200911194846.svg)
375375

376376
### 具有父节点的树形结构模型
377377

@@ -525,7 +525,7 @@ db.categories.insertMany([
525525

526526
### 具有嵌套集的树形结构模型
527527

528-
![img](http://dunwu.test.upcdn.net/snap/20200911204252.svg)
528+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200911204252.svg)
529529

530530
```javascript
531531
db.categories.insertMany([
@@ -554,7 +554,7 @@ db.categories.find({
554554

555555
解决方案是:列转行
556556

557-
![img](http://dunwu.test.upcdn.net/snap/20200919225901.png)
557+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200919225901.png)
558558

559559
### 管理文档不同版本
560560

docs/nosql/mongodb/mongodb-model.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ This looks very different from the tabular data structure you started with in St
125125

126126
嵌入式 document 通过将相关数据存储在单个 document 结构中来捕获数据之间的关系。 MongoDB document 可以将 document 结构嵌入到另一个 document 中的字段或数组中。这些非规范化的数据模型允许应用程序在单个数据库操作中检索和操纵相关数据。
127127

128-
![img](http://dunwu.test.upcdn.net/snap/20200910193231.png)
128+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200910193231.png)
129129

130130
对于 MongoDB 中的很多场景,非规范化数据模型都是最佳的。
131131

@@ -137,7 +137,7 @@ This looks very different from the tabular data structure you started with in St
137137

138138
引用通过包含从一个 document 到另一个 document 的链接或引用来存储数据之间的关系。 应用程序可以解析这些引用以访问相关数据。 广义上讲,这些是规范化的数据模型。
139139

140-
![img](http://dunwu.test.upcdn.net/snap/20200910193234.png)
140+
![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20200910193234.png)
141141

142142
通常,在以下场景使用引用式的数据模型:
143143

0 commit comments

Comments
 (0)