gaussdb-guide.md
... ...
@@ -1,123 +1,423 @@
1
-# GaussDB 高斯数据库参考手册
2 1
3
-## 1. 使用 DBeaver 客户端连接 GaussDB 数据库
4 2
5
-以下是使用 DBeaver 客户端连接 GaussDB 数据库的详细步骤:
3
+# GaussDB 数据库参考手册
6 4
7
-### 1.1 获取驱动包
5
+## 1. 产品概述
8 6
9
-- 根据 GaussDB 数据库的版本,下载对应版本的驱动包。
10
-- 解压驱动包,找到 `gaussdbjdbc.jar` 文件。
7
+GaussDB 是华为云推出的一款高性能、高可用、可扩展的云数据库产品,支持分布式和集中式两种部署模式。它适用于多种应用场景,包括企业级应用、数据分析和物联网等。
11 8
12
-### 1.2 安装 DBeaver 客户端
9
+更多版本信息请参考:[GaussDB 文档中心](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/productdesc/gaussdb_01_059.html)
13 10
14
-- 访问 [DBeaver 官网](https://dbeaver.io/),下载适合您操作系统的安装包并完成安装。
11
+**高斯数据库支持的版本**:
15 12
16
-### 1.3 配置驱动
13
+```
14
+SELECT VERSION();
15
+gaussdb (GaussDB Kernel 505.2.0 build 5a40f15c) compiled at 2024-09-20 00:15:19 commit 9967 last mr 19883 release
16
+```
17
+
18
+**引擎版本**: v2.8.1-RELEASE
19
+
20
+引擎支持的高斯数据库默认是使用的 MySQL 兼容模式,所以应用程序的SQL语法和MySQL基本兼容.
21
+
22
+**IIDP目前支持高斯数据库的MySQL数据库兼容MySQL模式**
23
+
24
+```xml
25
+<dependency>
26
+ <groupId>com.sie.meta</groupId>
27
+ <artifactId>sie-snest-engine</artifactId>
28
+ <version>v2.8.1-RELEASE</version>
29
+</dependency>
30
+```
17 31
18
-1. 打开 DBeaver,选择 **“数据库”** -> **“驱动管理器”**,点击 **“新建”**。
19
-2. 在 **“设置”** 页签中:
20
- - 输入驱动名称(如 **“GaussDB”**)。
21
- - 选择驱动类型为 **“Generic”**。
22
- - 填写类名为 `com.huawei.gaussdb.jdbc.Driver`。
23
- - URL 模板为空。
24
- - 默认端口为 `8000`。
25
-3. 在 **“库”** 页签中:
26
- - 点击 **“添加文件”**,选择 `gaussdbjdbc.jar` 文件。
27
- - 点击 **“找到类”** 以识别驱动类。
28 32
29
-![image-20250409161636762](./uploads/Home/gaussdb_1.png)
30 33
34
+**SqlProvider实现:** com.sie.snest.engine.db.relationdb.provider.GaussDBProvider
31 35
32
-![image-20250409161636762](./uploads/Home/gaussdb_2.png)
36
+返回数据库类型DBType: GaussDB
33 37
34
-### 1.4 创建数据库连接
38
+```java
39
+ com.sie.snest.engine.db.relationdb.provider.GaussDBProvider
40
+ /**
41
+ * return GaussDB
42
+ */
43
+ @Override
44
+ public String getDBType() {
45
+ return DBType.GaussDB.getName();
46
+ }
47
+```
35 48
36
-1. 在 DBeaver 主界面,点击 **“新建数据库连接”**,选择刚才配置的 **“GaussDB”** 驱动,点击 **“下一步”**。
37
-2. 输入数据库的主机 IP 地址、端口(通常是 `8000`)、数据库名、用户名和密码。
38
-3. 点击 **“测试连接”**,若显示 **“已连接”**,则说明连接成功,点击 **“完成”**。
39 49
40
-![image-20250409161636762](./uploads/Home/gaussdb_3.png)
41 50
42
-### 1.5 使用 DBeaver 操作数据库
43 51
44
-连接成功后,您可以在 DBeaver 中浏览数据库结构、执行 SQL 查询、导入导出数据等。如果在连接过程中遇到问题,可以参考 GaussDB 的官方文档或 DBeaver 的官方文档。
45 52
46
----
53
+## 2. 部署方案
47 54
48
-## 2. GaussDB Maven 驱动下载
55
+- [分布式版部署方案](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/productdesc/gaussdb_01_060.html)
49 56
50
-### 2.1 GaussDB 驱动
57
+- [集中式版部署方案](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/productdesc/gaussdb_01_061.html)
51 58
52
-下载地址:
53
-[http://192.168.168.156:8081/repository/maven-releases/com/huawei/gaussdb/gaussdbjdbc/5.0.0/gaussdbjdbc-5.0.0.jar](http://192.168.168.156:8081/repository/maven-releases/com/huawei/gaussdb/gaussdbjdbc/5.0.0/gaussdbjdbc-5.0.0.jar)
59
+
54 60
55
-Maven 依赖配置:
56
-```xml
57
-<dependency>
58
- <groupId>com.huawei.gaussdb</groupId>
59
- <artifactId>gaussdbjdbc</artifactId>
60
- <version>5.0.0</version>
61
-</dependency>
61
+## 3. GaussDB 数据库兼容性说明
62
+
63
+GaussDB 支持多种兼容性模式,具体如下:
64
+
65
+- **集中式部署**:
66
+ - `A`:兼容 Oracle。
67
+ - `B`:兼容 MySQL。
68
+ - `PG`:兼容 PostgreSQL。
69
+- **分布式部署**:
70
+ - `ORA`:兼容 Oracle。
71
+ - `MYSQL`:兼容 MySQL。
72
+ - `PG`:兼容 PostgreSQL。
73
+
74
+执行以下 SQL 命令,可以查看所有数据库的兼容性模式:
75
+
76
+```sql
77
+SELECT datname, datcompatibility FROM pg_database;
78
+
79
+datname |datcompatibility|
80
+-----------+----------------+
81
+templatea |ORA |
82
+snest_test3|MySQL |
83
+test |MYSQL |
84
+template1 |MYSQL |
85
+template0 |MYSQL |
86
+templatem |M |
87
+postgres |MYSQL |
88
+tpcc |MYSQL |
62 89
```
63 90
64
-### 2.2 dbcp.properties 示例
91
+### 1. MySQL 兼容模式
65 92
66
-```yaml
67
-######## DBCP ##########
68
-######## GaussDB########
69
-driverClassName=com.huawei.gaussdb.jdbc.Driver
70
-url=jdbc:gaussdb://ip:8000,ip:8000,ip:8000/tpcc?currentSchema=snest_changwen&autoBalance=true&refreshCNIpListTime=3&prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
71
-username=***
72
-password=***
73
-validationQuery=SELECT 1
74
-gaussdbDeployment=Distributed
93
+**IIDP只支持高斯数据库的MySQL数据库兼容MySQL模式**
75 94
76
-initialSize=5
77
-maxActive=2000
78
-minIdle=5
79
-filters=stat
80
-maxWait=6000
81
-timeBetweenEvictionRunsMillis=60000
82
-minEvictableIdleTimeMillis=1800000
83
-testOnBorrow=false
84
-testOnReturn=false
85
-testWhileIdle=true
86
-poolPreparedStatements: true
87
-maxOpenPreparedStatements: 20
88
-connectionProperties:druid.stat.sql.MaxSize=100;
89
-keepAlive=true
95
+GaussDB 提供了对 MySQL 5.7 的兼容模式,通过设置特定的参数,可以实现与 MySQL 5.7 数据库的高度兼容。以下是具体的兼容性说明:
96
+
97
+由于GaussDB数据库与MySQL数据库底层框架实现存在差异,GaussDB数据库与MySQL数据库仍存在部分差异。
98
+
99
+分布式版MySQL兼容性说明
100
+
101
+- **[概述](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/compatibility-description/gaussdb-20-0031.html)**
102
+- **[MySQL数据库兼容MySQL模式](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/compatibility-description/gaussdb-20-0001.html)**
103
+- **[MySQL数据库兼容性M-Compatibility模式](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/compatibility-description/gaussdb-20-0032.html)**
104
+
105
+**参考文档:** https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.7.30.10/compatibility-description/gaussdb-20-0002.html
106
+
107
+
108
+
109
+#### 1.1 参数设置
110
+
111
+为了启用 MySQL 兼容模式,需要在 GaussDB 数据库中设置以下参数:
112
+
113
+- **`sql_compatibility`**:设置为 `'MYSQL'`,以启用 MySQL 兼容模式。
114
+
115
+- **`b_format_version`**:设置为 `'5.7'`,以指定 MySQL 的版本兼容性。
116
+
117
+- **`b_format_dev_version`**:设置为 `'s1'`,以指定开发版本的兼容性。
118
+
119
+ ```
120
+ SHOW enable_gtm_free;
121
+ SHOW gtm_option;
122
+ show b_format_version;
123
+ show b_format_dev_version;
124
+ ```
125
+
126
+#### 1.2 数据类型兼容性
127
+
128
+- GaussDB 支持 MySQL 5.7 中定义的大多数数据类型,包括但不限于:
129
+ - **数值类型**:`TINYINT`、`SMALLINT`、`MEDIUMINT`、`INT`、`BIGINT`、`DECIMAL`、`FLOAT`、`DOUBLE` 等。
130
+ - **字符串类型**:`CHAR`、`VARCHAR`、`TEXT`、`BLOB` 等。
131
+ - **日期和时间类型**:`DATE`、`TIME`、`DATETIME`、`TIMESTAMP` 等。
132
+- 在某些情况下,GaussDB 可能对某些数据类型的行为或限制进行了优化或调整,以适应其自身的架构和性能要求。
133
+
134
+#### 1.3 SQL 功能兼容性
135
+
136
+- **SQL 语法**:GaussDB 支持 MySQL 5.7 的大多数 SQL 语法,包括:
137
+ - 数据定义语言(DDL):如 `CREATE TABLE`、`ALTER TABLE`、`DROP TABLE` 等。
138
+ - 数据操纵语言(DML):如 `INSERT`、`UPDATE`、`DELETE`、`SELECT` 等。
139
+ - 数据控制语言(DCL):如 `GRANT`、`REVOKE` 等。
140
+- **存储过程和函数**:支持 MySQL 5.7 的存储过程和函数语法,用户可以创建和使用存储过程来实现复杂的业务逻辑。
141
+- **视图和索引**:支持视图和索引的创建和使用,用户可以通过视图简化复杂的查询操作,并利用索引提高查询性能。
142
+- **事务支持**:支持事务操作,确保数据的一致性和完整性。
143
+
144
+#### 1.4 数据库对象兼容性
145
+
146
+- **表和表空间**:支持 MySQL 5.7 中的表和表空间概念,用户可以创建、修改和删除表,以及管理表空间。
147
+- **用户和权限管理**:支持 MySQL 5.7 的用户和权限管理机制,用户可以创建和管理用户账户,并授予或撤销用户权限。
148
+- **字符集和校对规则**:支持 MySQL 5.7 的字符集和校对规则,用户可以根据需要选择合适的字符集和校对规则。
149
+
150
+#### 1.5 特殊兼容性说明
151
+
152
+- **语法差异**:尽管 GaussDB 努力实现与 MySQL 5.7 的高度兼容,但在某些复杂的 SQL 语法或特定功能上可能存在差异。例如,某些特定的 MySQL 函数或存储过程可能在 GaussDB 中表现略有不同。
153
+- **性能优化**:GaussDB 在某些场景下可能需要额外的性能优化配置,以充分发挥其性能优势。
154
+- **功能限制**:某些 MySQL 特性可能在 GaussDB 中不完全支持,或者需要通过其他方式实现。
155
+
156
+### 2. **其他兼容模式**
157
+
158
+GaussDB 还支持其他数据库的兼容模式,例如 Oracle、PostgreSQL 和 Teradata 等。以下是简要说明:
159
+
160
+#### 2.1 Oracle 兼容模式
161
+
162
+- **参数设置**:使用参数 `c='A'` 或 `dbcompatibility='ORA'` 创建兼容 Oracle 的数据库。
163
+- **功能支持**:支持 Oracle 的数据类型、SQL 语法、系统函数、日期时间类型等。
164
+
165
+#### 2.2 PostgreSQL 兼容模式
166
+
167
+- **参数设置**:使用参数 `dbcompatibility='PG'` 创建兼容 PostgreSQL 的数据库。
168
+- **功能支持**:支持 PostgreSQL 的数据类型、SQL 语法和对象定义。
169
+
170
+更多详细信息和完整兼容性说明,请参考 GaussDB 官方文档:
171
+
172
+- [GaussDB 文档中心 - MySQL 兼容性概述](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/compatibility-description/gaussdb-20-0002.html)
173
+
174
+
175
+
176
+## 4. 高斯数据库不兼容项
177
+
178
+### 1. 不支持唯一索引,不支持复合唯一索引
179
+
180
+在华为GaussDB中,当出现“Cannot create index whose evaluation cannot be enforced to remote nodes”错误时,通常是因为在分布式数据库系统中创建索引时,没有包含分布列(即决定数据如何在各个节点间分布的列)。 **之前的MySQL唯一索引就失效了**.
181
+
182
+主键约束的本质就是一个非空约束加一个唯一约束,重点关注这个唯一约束(通过一个唯一索引实现)。
183
+
184
+对于hash分布表,分布列决定了这条数据将在CN(CoordinateNode协调节点)被hash分布到哪个DN(DataNode数据节点)上,所以唯一约束本质上是确保分布到这个DN的数据的唯一性。如果允许唯一约束不包含分布列,那么就会出现在不同DN上查询到相同唯一键的情况,这肯定不是期望内的。
185
+
186
+对于复制表(replicated table), 由于每个数据在每个DN上都被存有一份,所以不存在这个问题。
187
+
188
+所以出现这个报错的时候要么使主键的定义包含分布列,要么改用复制表,要么使用复合唯一索引,要么使用全局二级索引。
189
+
190
+
191
+
192
+**不支持原因:**
193
+
194
+1. 使用唯一索引时: 唯一列必须包含分布式列,导致复合唯一索引失效了,因为必须带ID字段加唯一字段,就违背了复合唯一索引的定义.
195
+
196
+2. 使用全局二级索引:遇到下面3个错误:
197
+
198
+ ```sql
199
+ ERROR: INSERT/UPDATE/DELETE/MERGE contains multiple remote queries under GTM-free mode
200
+
201
+ 解决方式:开启GTM-free 模式
202
+ ```
203
+
204
+
205
+
206
+ 解决完第一个错误后,然后又遇到下面的错误:
207
+
208
+ ```sql
209
+ INSERT ... SELECT ... WHERE NOT EXISTS 不支持, INSERT INTO IGNORE不支持, 改为INSERT INTO " + sql +" ON DUPLICATE KEY UPDATE NOTHING
210
+ 解决方式:使用流算子或 Hint
211
+ SET enable_stream_operator=on;
212
+ 或者在 SQL 语句中添加 `/*+ multinode */` Hint:
213
+ ```
214
+
215
+
216
+
217
+ 修复完上面的2个错误后,又遇到往数据库插入或更新数据时报错,提示分布键不能被更新,错误信息如下所示:
218
+
219
+ ```
220
+ ERROR: Distributed key column can't be updated in current version
221
+ ```
222
+
223
+这个错误的意思是,如果列是分布式列,就不能更新该字段,这种就会导致应用程序更新失败.咨询了华为的同事.没有参数可以跳过.
224
+
225
+3. 因为引擎插入和更新的时候会做唯一校验,如果不支持唯一校验,不影响业务的插入和更新时的唯一校验.
226
+
227
+
228
+
229
+### 2. SELECT AS 别名问题,如果别名不带标识符``或者"",PostgreSQL/GaussDB会将别名转成小写
230
+
231
+请注意,在 PostgreSQL/GaussDB 中,关键词和不被引号修饰的标识符是大小写不敏感的。因此,如果字段不带修饰符双引号,会转换成小写.
232
+
233
+如果自定义SQL列别名不带修饰符,这样就会导致代码获取displayName值为NULL, get("displayName")=NULL.就会导致数据库迁移的时候,不兼容.
234
+
235
+**正确的SQL写法,列别名如果是驼峰或者包含大小写的,一定要用 ``或者 ""引起来.**
90 236
91
-######## OceanBase ########
92
-# driverClassName=com.mysql.cj.jdbc.Driver
93
-# url=jdbc:mysql://ip:2881/snest_changwen?rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE&useLocalSessionState=TRUE&useUnicode=TRUE&characterEncoding=utf-8&socketTimeout=10000&connectTimeout=30000&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
94
-# username=***
95
-# password=***
96
-
97
-######## Oracle ########
98
-# driverClassName=oracle.jdbc.OracleDriver
99
-# url=jdbc:oracle:thin:@ip:1521:ORCLCDB
100
-# username=C##***
101
-# password=***
102
-# validationQuery=SELECT 'x' FROM DUAL
103
-
104
-######## PostgreSQL ########
105
-# driverClassName=org.postgresql.Driver
106
-# url=jdbc:postgresql://ip:5432/postgres?currentSchema=snest_changwen&encoding=UTF-8&timezone=UTC
107
-# username=***
108
-# password=***
109
-# validationQuery=SELECT 1
110 237
```
238
+select display_name as displayName from meta_app;
239
+
240
+--MySQL
241
+displayName |
242
+-----------------+
243
+基础模块 |
244
+
245
+
246
+--PostgreSQL/GaussDB
247
+displayname |
248
+-----------------+
249
+基础模块
250
+
251
+
252
+正确的SQL写法,列别名如果是驼峰或者包含大小写的
253
+MYSQL: select display_name as `displayName` from meta_app;
254
+GAUSSDB select display_name as `displayName` from meta_app;
255
+PostgreSQL: select display_name as "displayName" from meta_app;
256
+
257
+项目自定义SQL错误的示范:
258
+SELECT param_name paramName, param_value paramValue FROM base_process_spec bps;
259
+
260
+标准的SQL语法:
261
+SELECT param_name "paramName", param_value `paramValue` FROM base_process_spec bps
262
+SELECT param_name "paramName", param_value "paramValue" FROM base_process_spec bps
263
+```
264
+
265
+
266
+
267
+### 3. ERROR: INSERT/UPDATE/DELETE/MERGE contains multiple remote queries under GTM-free mode
268
+
269
+```
270
+-数据源:main,执行SQL失败:INSERT INTO ui_file_seed (`bucket`, `path`, `file_archive_path`, `name`, `attachment_id` , `download_path`, `id`, `create_user`, `create_date`, `app_id` , `url`, `md5`) SELECT 'apps' , '/file/document/doc/定制权限-导入模板.xlsx' , 'BOOT-INF/classes/com/sie/app/tenant/file/document/doc/定制权限-导入模板.xlsx', '下载定制权限导入模板', '04pebasn0auvo' , '/apps/2025-03-20/619344493502774957.xlsx' , 'sie-snest-tenant.master.custom_permission_import_template', 'rbac_user_superuser' , '2025-03-20 17:40:54.917', '04peack6huebq' , '/fileSystem/apps/2025-03-20/619344493502774957.xlsx' , '38ea78b3e59ef8cfbfa77ada296a71a0' FROM dual WHERE NOT EXISTS ( SELECT 1 FROM ui_file_seed WHERE id = 'sie-snest-tenant.master.custom_permission_import_template' ),异常信息:[2.0.0.1:55959/192.168.96.11:8000] ERROR: INSERT/UPDATE/DELETE/MERGE contains multiple remote queries under GTM-free mode
271
+ 建议:modify your SQL to generate light-proxy or fast-query-shipping plan
272
+
273
+```
274
+
275
+**问题分析**
276
+
277
+- **GTM-free 模式**:在这种模式下,GaussDB 对分布式事务的管理方式有所限制,尤其是对涉及多个远程节点(如跨节点的子查询)的复杂查询支持较弱。
278
+- **错误原因**:你的 SQL 语句中使用了 `INSERT ... SELECT ... WHERE NOT EXISTS`,这种结构会被解析为多个远程查询,导致 GTM-free 模式下无法执行。
279
+- **参考**: https://support.huaweicloud.com/distributed-devg-v2-gaussdb/gaussdb-12-1095.html
111 280
112
----
281
+解决方案
113 282
114
-## 3. GaussDB 环境配置示例
283
+根据错误信息中的建议,你需要修改 SQL,使其生成 **light-proxy** 或 **fast-query-shipping** 计划。
115 284
116
-### 3.1 dbcp.properties 示例
117 285
118
-```properties
119 286
120
-######## DBCP ##########
287
+### 4. INSERT ... SELECT ... WHERE NOT EXISTS 不支持, INSERT INTO IGNORE不支持, 改为INSERT INTO " + sql +" ON DUPLICATE KEY UPDATE NOTHING
288
+
289
+### 5. 不支持修改分布式列的字段,比如修改主键的长度.
290
+
291
+### 6. 事物回滚机制和MySQL不同,事物机制和PostgreSQL一致.
292
+
293
+
294
+
295
+## 4. 用户指南
296
+
297
+数据库管理员应具备以下能力:拥有极强的数据库技术理解能力;能够安装数据库、执行相关操作并排除故障;能够进行云数据库GaussDB管理平台(TPOPS)的日常维护。
298
+
299
+工程师应具备以下能力:了解数据库技术常识;能够执行数据库相关的操作并排除故障。
300
+
301
+请参考:https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.7.30.10/usermanual/qlh_02_0001.html
302
+
303
+
304
+
305
+## 5. 数据库基本概念
306
+
307
+**数据库(Database)**
308
+
309
+数据库是存储在一起的相关数据的集合,这些数据可以被访问,管理以及更新。
310
+
311
+数据库用于管理各类数据对象,与其他数据库隔离。创建数据对象时可以指定对应的表空间,如果不指定相应的表空间,相关的对象会默认保存在PG_DEFAULT空间中。数据库管理的对象可分布在多个表空间上。
312
+
313
+**数据块(Block)**
314
+
315
+数据块是数据库管理的基本单位,默认大小为8KB。
316
+
317
+**行(Row)**
318
+
319
+一行(元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
320
+
321
+**列(Cloumn)**
322
+
323
+每一列被当作是一个字段。每个字段中的值代表一种类型的数据。例如,一个表可能有3个字段,姓名、城市和国家。这个表就会有3列,一列代表姓名,一列代表城市,一列代表国家。表中的每一行包含3个字段的内容,姓名字段包含姓名,城市字段包含城市,国家字段包含国家。
324
+
325
+**表(Table)**
326
+
327
+表是由行与列组合成的,是数据库中用来存储数据的对象,是整个数据库系统的基础。
328
+
329
+每张表只能属于一个数据库,也只能对应到一个表空间。每张表对应的数据文件必须在同一个表空间中。
330
+
331
+**数据文件(Datafile Segment)**
332
+
333
+通常每张表只对应一个数据文件。如果某张表的数据大于1GB,则会分为多个数据文件存储。
334
+
335
+**表空间(Tablespace)**
336
+
337
+在Gauss中,表空间是一个目录,在物理数据和逻辑数据间提供了抽象的一层,为所有的数据库对象分配存储空间,里面存储的是它所包含的数据库的各种物理文件。由于表空间是一个目录,仅是起到了物理隔离的作用,其管理功能依赖于文件系统。
338
+
339
+表空间可以存在多个,创建好之后,创建数据库对象时可以指定该对象所属的表空间。
340
+
341
+**模式(Schema)**
342
+
343
+**数据库对象集,包括逻辑结构,例如表、视图、序、存储过程、同义名、索引及数据库链接。**
344
+
345
+**事务(Transaction)**
346
+
347
+数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
348
+
349
+同时,事务也是恢复和并发控制的基本单位,必须具备ACID特性,即:
350
+
351
+- 原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
352
+- 一致性(Consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
353
+- 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
354
+- 持久性(Durability):持久性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
355
+
356
+请参考: https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.7.30.10/devg-dist/gaussdb-12-0002.html
357
+
358
+
359
+
360
+## 6. 分布式开发指南
361
+
362
+请参考文档:https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0078.html
363
+
364
+#### 6.1 数据库系统概述
365
+
366
+- **[数据库逻辑结构图](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0012.html)**
367
+- **[数据查询请求处理过程](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0013.html)**
368
+- **[管理事务](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0014.html)**
369
+
370
+
371
+
372
+#### 6.2 数据库安全
373
+
374
+- **[用户及权限](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0017.html)**
375
+- **[数据库审计](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0026.html)**
376
+
377
+
378
+
379
+#### 6.3 操作数据库
380
+
381
+本节描述使用数据库的基本操作。通过此节您可以完成创建数据库用户、创建数据库、创建表及向表中插入数据和查询表中数据等操作。
382
+
383
+- **[创建数据库用户](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0032.html)**
384
+- **[管理数据库](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0033.html)**
385
+- **[管理表空间](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0034.html)**
386
+- **[管理表](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0035.html)**
387
+- **[查看系统表](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0041.html)**
388
+- **[其他操作](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0042.html)**
389
+
390
+
391
+
392
+#### 6.5 数据库设计规范
393
+
394
+- **[基本规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0052.html)**
395
+- **[部署规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0053.html)**
396
+- **[数据库对象命名规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0054.html)**
397
+- **[Database和Schema设计规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0055.html)**
398
+- **[权限设计规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0056.html)**
399
+- **[字符集设计规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0057.html)**
400
+- **[表设计规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0058.html)**
401
+- **[字段设计规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0059.html)**
402
+- **[索引设计规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0060.html)**
403
+- **[函数/存储过程设计规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0061.html)**
404
+- **[约束设计](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0062.html)**
405
+- **[视图和关联表设计](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0063.html)**
406
+
407
+
408
+
409
+#### 6.6 应用程序开发教程
410
+
411
+- **[GaussDB应用程序开发教程概述](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0079.html)**
412
+- **[开发规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0080.html)**
413
+- **[基于JDBC开发](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0081.html)**
414
+
415
+**本地JDBC配置:**
416
+
417
+**1. dbcp.properties 示例:**
418
+
419
+```
420
+########DBCP##########
121 421
initialSize=5
122 422
maxActive=2000
123 423
minIdle=5
... ...
@@ -133,7 +433,8 @@ maxOpenPreparedStatements: 20
133 433
connectionProperties:druid.stat.sql.MaxSize=100;
134 434
keepAlive=true
135 435
136
-######## GaussDB ########
436
+
437
+########gaussdb########
137 438
driverClassName=com.huawei.gaussdb.jdbc.Driver
138 439
url=jdbc:gaussdb://127.0.0.1:8000,127.0.0.1:8000,127.0.0.1:8000/tpcc?currentSchema=snest_jichen&autoBalance=true&refreshCNIpListTime=3&prepareThreshold=1&batchMode=on&fetchsize=10&loggerLevel=OFF
139 440
username=******
... ...
@@ -142,11 +443,122 @@ validationQuery=SELECT 1
142 443
gaussdbDeployment=Distributed
143 444
```
144 445
446
+**2. spring配置文件添加参数适配高斯自定义SQL列字段别名转换**
145 447
146
-### 3.2 Spring 配置文件适配
448
+正常不需要添加这个配置,除非项目特殊需要.
147 449
148
-在 `application-dev.properties` 文件中添加以下参数,以适配 GaussDB 自定义 SQL 列字段别名转换:
450
+application-dev.properties添加:
149 451
150
-```properties
452
+```
151 453
orm.sql.wrap_camelcase_alias=true
152 454
```
455
+
456
+
457
+
458
+
459
+
460
+#### 6.7 SQL调优指南
461
+
462
+SQL调优的唯一目的是“资源利用最大化”,即CPU、内存、磁盘I/O、网络IO四种资源利用最大化。所有调优手段都是围绕资源使用开展的。所谓资源利用最大化是指SQL语句尽量高效,节省资源开销,以最小的代价实现最大的效益。比如做典型点查询的时候,可以用seqscan+filter(即读取每一条元组和点查询条件进行匹配)实现,也可以通过indexscan实现,显然indexscan可以以更小的代价实现相同的效果。
463
+
464
+- **[Query执行流程](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0320.html)**
465
+- **[SQL执行计划介绍](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0321.html)**
466
+- **[调优流程](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0327.html)**
467
+- **[更新统计信息](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0328.html)**
468
+- **[审视和修改表定义](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0329.html)**
469
+- **[典型SQL调优点](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0335.html)**
470
+- **[经验总结:SQL语句改写规则](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0343.html)**
471
+- **[SQL调优关键参数调整](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0344.html)**
472
+- **[使用Plan Hint进行调优](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0345.html)**
473
+- **[检查隐式转换的性能问题](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0377.html)**
474
+- **[使用向量化执行引擎进行调优](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0378.html)**
475
+- **[使用SQL PATCH进行调优](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0379.html)**
476
+- **[实际调优案例](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0380.html)**
477
+
478
+
479
+
480
+#### 6.8 SQL参考
481
+
482
+- **[GaussDB SQL](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0394.html)**
483
+- **[关键字](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0395.html)**
484
+- **[数据类型](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0396.html)**
485
+- **[字符集与字符序](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0420.html)**
486
+- **[常量与宏](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0428.html)**
487
+- **[函数和操作符](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0429.html)**
488
+- **[表达式](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0505.html)**
489
+- **[伪列](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0512.html)**
490
+- **[类型转换](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0513.html)**
491
+- **[系统操作](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0519.html)**
492
+- **[事务控制](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0520.html)**
493
+- **[全文检索](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0521.html)**
494
+- **[SQL语法](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0556.html)**
495
+- **[附录](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0791.html)**
496
+
497
+
498
+
499
+#### 6.9 最佳实践
500
+
501
+- **[SQL查询最佳实践](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0798.html)**
502
+- **[权限配置最佳实践](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0799.html)**
503
+- **[数据倾斜查询最佳实践](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0800.html)**
504
+- **[存储过程最佳实践](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/devg-dist/gaussdb-12-0835.html)**
505
+
506
+
507
+
508
+#### 6.10 工具指南
509
+
510
+**分布式工具指南**
511
+
512
+1. **工具介绍**:GaussDB 提供了多种工具支持分布式开发,如 GaussDB 数据库管理工具、备份工具等。
513
+2. **使用方法**:参考 [GaussDB 分布式工具指南](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/toolguide/gaussdb_03_0100.html) 获取工具的使用方法和示例。
514
+
515
+**集中式工具指南**
516
+
517
+1. **工具介绍**:GaussDB 提供了多种工具支持集中式开发,如 GaussDB 数据库管理工具、性能监控工具等。
518
+2. **使用方法**:参考 [GaussDB 集中式工具指南](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/toolguide/gaussdb_03_0200.html) 获取工具的使用方法和示例。
519
+
520
+
521
+
522
+## 7. 特性描述
523
+
524
+### 7.1 分布式特性描述
525
+
526
+- **弹性扩展**:支持水平扩展,可根据业务需求动态调整实例数量。
527
+- **高可用性**:支持多副本存储和自动故障切换,确保数据的高可用性。
528
+- **高性能**:采用分布式架构,提供高性能处理能力。
529
+
530
+### 7.2 集中式特性描述
531
+
532
+- **性能优化**:针对集中式场景进行优化,提供高性能处理能力。
533
+- **数据安全**:支持数据加密、访问控制等安全功能。
534
+- **易用性**:提供简单的管理界面和操作方式。
535
+
536
+
537
+
538
+## 8. 常见问题
539
+
540
+### 8.1 性能问题
541
+
542
+- **Q:如何优化 GaussDB 的性能?**
543
+ - A:可以通过调整数据库参数、优化 SQL 查询、增加实例规格等方式提升性能。具体优化方法请参考 [性能优化指南](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/bestpractice/gaussdb_04_0100.html)。
544
+
545
+### 8.2 安全问题
546
+
547
+- **Q:如何确保 GaussDB 的数据安全?**
548
+
549
+ - A:可以通过设置访问控制、数据加密、备份与恢复等方式确保数据安全。具体安全措施请参考 [安全指南](https://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.7.30.10/security/gaussdb_05_0100.html)。
550
+
551
+
552
+
553
+## 9. 资源链接
554
+
555
+- [官方文档中心](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.7.30.10/productdesc/qlh_03_0001.html)
556
+
557
+- [分布式版MySQL兼容性说明](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.7.30.10/compatibility-description/gaussdb_01_0003.html)
558
+
559
+- [SQL参考](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.7.30.10/devg-dist/gaussdb-12-0320.html)
560
+
561
+- [M-Compatibility数据库系统概述](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.7.30.10/m_comp_devg-dist/gaussdb-81-0001.html)
562
+
563
+
564
+