f63233b21fb02752212d167b009697d9b25f1065
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 | - |
|
30 | 33 | |
34 | +**SqlProvider实现:** com.sie.snest.engine.db.relationdb.provider.GaussDBProvider |
|
31 | 35 | |
32 | - |
|
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 | - |
|
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 | + |