From d6df8424c68825dda5c1e2c201d6bff9bf83ce78 Mon Sep 17 00:00:00 2001 From: Mister-Hope Date: Tue, 17 Dec 2024 13:34:56 +0800 Subject: [PATCH] docs: standardize download --- src/Download/README.md | 65 +++++++-------- src/zh/Download/README.md | 169 ++++++++++++++++++++------------------ 2 files changed, 118 insertions(+), 116 deletions(-) diff --git a/src/Download/README.md b/src/Download/README.md index af8d015b..702199dd 100644 --- a/src/Download/README.md +++ b/src/Download/README.md @@ -1,22 +1,19 @@ # Release version @@ -233,7 +230,7 @@ Legacy version are available here: [https://archive.apache.org/dist/iotdb/](http - Set the somaxconn as 65535 to avoid "connection reset" error when the system is under high load. - ``` + ```bash # Linux > sudo sysctl -w net.core.somaxconn=65535 @@ -264,7 +261,7 @@ In previous versions of syntax conventions, when do you need to add quotation ma In previous versions of syntax conventions, path node names were defined as identifiers, but when the path separator . was required in the path node name, single or double quotes were required. This goes against the rule that identifiers are quoted using backquotes. -```SQL +```sql # In the previous syntax convention, if you need to create a time series root.sg.`www.baidu.com`, you need to use the following statement: create root.sg.'www.baidu.com' with datatype=BOOLEAN, encoding=PLAIN @@ -276,7 +273,7 @@ select 'www.baidu.com' from root.sg; **In the 1.0 syntax conventions, special node names are uniformly quoted using backquotes:** -```SQL +```sql # In the new syntax convention, if you need to create a time series root.sg.`www.baidu.com`, the syntax is as follows: create root.sg.`www.baidu.com` with 'datatype' = 'BOOLEAN', 'encoding' = 'PLAIN' @@ -288,7 +285,7 @@ select `www.baidu.com` from root.sg; In previous versions of syntax conventions, when single quotes ' and double quotes " are used in path node names, they need to be escaped with a backslash \, and the backslashes will be stored as part of the path node name. Other identifiers do not have this restriction, causing inconsistency. -```SQL +```sql # Create time series root.sg.\"a create timeseries root.sg.`\"a` with datatype=TEXT,encoding=PLAIN; @@ -356,7 +353,7 @@ Query the data of root.sg.a, you can see that there is no unescaping: Instead use SQL to insert data into root.sg.a: -```SQL +```sql # SQL insert insert into root.sg(time, a) values(1, "\\") insert into root.sg(time, a) values(2, "\t") @@ -391,27 +388,27 @@ Query the data of root.sg.a, you can see that the string is unescaped: - The data format (i.e., TsFile data) of v0.12.x and v0.13.x are compatible, but the WAL file is incompatible. So, you can follow the steps: - - ** Execute `SET SYSTEM TO READONLY` command in CLI. ** - - ** Stop writing new data.** + - ** Execute `SET SYSTEM TO READONLY` command in CLI. ** + - ** Stop writing new data.** - Execute `flush` command to close all TsFiles. - We recommend to back up all data files before upgrading for rolling back. - - Just download, unzip v0.13.x.zip, and modify conf/iotdb-engine.properties, ** especially the unchangeable configurations like timestamp precision**. Let all the + - Just download, unzip v0.13.x.zip, and modify conf/iotdb-engine.properties, ** especially the unchangeable configurations like timestamp precision**. Let all the directories point to the data folder set in v0.12.x (or the backup folder). You can also modify other settings if you want. - Stop IoTDB v0.12.x instance, and then start v0.13.x. - - **After the steps above, please make sure the `iotdb_version` in `data/system/schema/system.properties` file is `0.13.x`. - If not, please change it to `0.13.x` manually.** + - **After the steps above, please make sure the `iotdb_version` in `data/system/schema/system.properties` file is `0.13.x`. + If not, please change it to `0.13.x` manually.** - **NOTICE: V0.13 changes many settings in conf/iotdb-engine.properties, so do not use v0.12's configuration file directly.** - **In 0.13, the SQL syntax has been changed. The identifiers not enclosed in backquotes can only contain the following characters, otherwise they need to be enclosed in backquotes.** - - **[0-9 a-z A-Z _ : @ # $ { }] (letters, digits, some special characters)** - - **['\u2E80'..'\u9FFF'] (UNICODE Chinese characters)** + - **\[0-9 a-z A-Z _ : @ # $ { }] (letters, digits, some special characters)** + - **\['\u2E80'..'\u9FFF'] (UNICODE Chinese characters)** - **In 0.13, if the path node name in the `SELECT` clause consists of pure numbers, it needs to be enclosed in backquotes to distinguish it from the constant in the expression. For example, in the statement "select 123 + \`123\` from root.sg", the former 123 represents a constant, and the latter \`123\` will be spliced with root.sg, indicating the path root.sg.\`123\`.** - How to upgrade from v0.11.x or v0.10.x to v0.12.x? - Upgrading from v0.11 or v0.10 to v0.12 is similar as v0.9 to v0.10. The upgrade tool will rewrite the data files automatically. - - **Stop writing new data.** + - **Stop writing new data.** - Call `flush` command using sbin/start-cli.sh in original version to close all TsFiles. - We recommend to backup the data file (also the wal files and mlog.txt) before upgrading for rolling back. - Just download, unzip v0.12.x.zip, and modify conf/iotdb-engine.proeprties to let all the @@ -428,7 +425,7 @@ Query the data of root.sg.a, you can see that the string is unescaped: - The data format (i.e., TsFile data) of v0.10.x and v0.11 are compatible, but the WAL file is incompatible. So, you can follow the steps: - - **Stop writing new data.** + - **Stop writing new data.** - Call `flush` command using `sbin/start-cli.sh` in v0.10.x to close all TsFiles. - We recommend to backup the wal files and mlog.txt before upgrading for rolling back. - Just download, unzip v0.11.x.zip, and modify conf/iotdb-engine.properties to let all the @@ -442,7 +439,7 @@ Query the data of root.sg.a, you can see that the string is unescaped: - How to upgrade from v0.9.x to v0.10.x? - Upgrading from v0.9 to v0.10 is more complex than v0.8 to v0.9. - - **Stop writing new data.** + - **Stop writing new data.** - Call `flush` command using sbin/start-client.sh in v0.9 to close all TsFiles. - We recommend to backup the data file (also the wal files and mlog.txt) before upgrading for rolling back. - Just download, unzip v0.10.x.zip, and modify conf/iotdb-engine.proeprties to let all the @@ -465,4 +462,4 @@ Find all releases in the [Archive repository](https://archive.apache.org/dist/io # Verifying Hashes and Signatures -Along with our releases, we also provide sha512 hashes in _.sha512 files and cryptographic signatures in _.asc files. The Apache Software Foundation has an extensive tutorial to [verify hashes and signatures ](http://www.apache.org/info/verification.html)which you can follow by using any of these release-signing [KEYS ](https://downloads.apache.org/iotdb/KEYS). +Along with our releases, we also provide sha512 hashes in _.sha512 files and cryptographic signatures in `_.asc` files. The Apache Software Foundation has an extensive tutorial to [verify hashes and signatures](http://www.apache.org/info/verification.html)which you can follow by using any of these release-signing [KEYS](https://downloads.apache.org/iotdb/KEYS). diff --git a/src/zh/Download/README.md b/src/zh/Download/README.md index c0b2ef64..bd54e5c2 100644 --- a/src/zh/Download/README.md +++ b/src/zh/Download/README.md @@ -1,24 +1,23 @@ + # 发行版本 + @@ -228,11 +227,13 @@ ## 环境配置 - 推荐修改的操作系统参数 - * 将 somaxconn 设置为 65535 以避免系统在高负载时出现 "connection reset" 错误。 - ``` + + - 将 somaxconn 设置为 65535 以避免系统在高负载时出现 "connection reset" 错误。 + + ```bash # Linux > sudo sysctl -w net.core.somaxconn=65535 - + # FreeBSD or Darwin > sudo sysctl -w kern.ipc.somaxconn=65535 ``` @@ -240,8 +241,8 @@ ## 关于 Version 1.0 - 如何从 v0.13.x 升级到 v1.0.x? - - - **1.0版本进行了 SQL 语法约定的改动(请参考用户手册语法约定章节),不兼容之处可以参考下方1.0 版本不兼容的语法详细说明**。 + + - **1.0 版本进行了 SQL 语法约定的改动(请参考用户手册语法约定章节),不兼容之处可以参考下方 1.0 版本不兼容的语法详细说明**。 - 为了保证 UDF 相关 API 的稳定性,1.0 版本中 UDF 相关 API 被独立为一个单独的 module,不再依赖 tsfile 包,已经实现的 UDF 需要改写代码,将 `TsDataType` 替换为 `Type`,将 `org.apache.iotdb.tsfile.utils.Binary` 替换成 `org.apache.iotdb.udf.api.type.Binary`,并重新进行打包装载流程。 ### 1.0 版本不兼容的语法详细说明 @@ -250,7 +251,7 @@ #### 标识符限制增强 -在0.13及之前版本中,不使用反引号引用的标识符(包括路径结点)允许为实数(实数路径名在 `SELECT` 子句中需要用反引号括起),且允许包含部分特殊字符,**在 1.0 版本中,不使用反引号引用的标识符不允许为实数,不使用反引号引用的标识符,只允许包含字母、中文字符、下划线。** +在 0.13 及之前版本中,不使用反引号引用的标识符(包括路径结点)允许为实数(实数路径名在 `SELECT` 子句中需要用反引号括起),且允许包含部分特殊字符,**在 1.0 版本中,不使用反引号引用的标识符不允许为实数,不使用反引号引用的标识符,只允许包含字母、中文字符、下划线。** #### 路径名使用的相关问题 @@ -260,7 +261,7 @@ 在之前的语法约定中,路径结点名被定义成标识符,但是当需要在路径结点名中使用路径分隔符 . 时,需要使用单引号或者双引号引用。这与标识符使用反引号引用的规则相悖。 -```SQL +```sql # 在之前的语法约定中,如果需要创建时间序列 root.sg.`www.baidu.com`,需要使用下述语句: create root.sg.'www.baidu.com' with datatype=BOOLEAN, encoding=PLAIN @@ -272,7 +273,7 @@ select 'www.baidu.com' from root.sg; **而在 1.0 版本的语法约定中,特殊路径结点名统一使用反引号引用:** -```SQL +```sql # 在现有语法约定中,如果需要创建时间序列 root.sg.`www.baidu.com`,语法如下: create root.sg.`www.baidu.com` with datatype = BOOLEAN, encoding = PLAIN @@ -284,7 +285,7 @@ select `www.baidu.com` from root.sg; 在旧语法约定中,在路径结点名中使用单引号 ' 和 双引号 " 时,需要使用反斜杠 \ 进行转义,且反斜杠会被视为路径结点名的一部分存入,而在使用其它标识符时没有这个限制,造成了不统一。 -```SQL +```sql # 创建时间序列 root.sg.\"a create timeseries root.sg.`\"a` with datatype=TEXT,encoding=PLAIN; @@ -303,26 +304,26 @@ select `\"a` from root.sg; ##### Session 接口语法限制 -在0.13版本中,对于非SQL接口中使用路径结点的限制如下: +在 0.13 版本中,对于非 SQL 接口中使用路径结点的限制如下: - 经参数传入的路径或路径前缀中的节点: - 在 SQL 语句中需要使用反引号(`)进行转义的,此处均不需要进行转义。 - 使用单引号或双引号括起的节点,仍需要使用单引号或双引号括起,并且要针对 JAVA 字符串进行反转义。 - 对于 `checkTimeseriesExists` 接口,由于内部调用了 IoTDB-SQL 接口,因此需要和 SQL 语法规范保持一致,并且针对 JAVA 字符串进行反转义。 -**1.0 版本中,对非SQL接口中使用路径结点的限制增强:** +**1.0 版本中,对非 SQL 接口中使用路径结点的限制增强:** - **经参数传入的路径或路径前缀中的节点: 在 SQL 语句中需要使用反引号(`)进行转义的,均需要使用反引号进行转义。** - **语法说明相关代码示例可以参考:**`example/session/src/main/java/org/apache/iotdb/SyntaxConventionRelatedExample.java` -##### SQL和Session接口对字符串反转义处理不一致 +##### SQL 和 Session 接口对字符串反转义处理不一致 **在之前版本中,使用字符串时,SQL 和 Session 接口存在不一致的情况**。比如使用 SQL 插入 Text 类型数据时,会对字符串进行反转义处理,而使用 Session 接口时不会进行这样的处理,存在不一致。**在新的语法约定中,我们统一不对字符串做反转义处理,存入什么内容,在查询时就会得到什么内容(字符串内部使用单双引号的规则可以参考本文档字符串常量章节)。** **下面是旧语法约定中不一致的例子:** -使用 Session 的 insertRecord 方法向时序 root.sg.a 中插入数据 +使用 Session 的 insertRecord 方法向时序 `root.sg.a` 中插入数据 ```Java // session 插入 @@ -353,7 +354,7 @@ for(int i = 0; i <= values.length; i++){ 而使用 SQL 向 root.sg.a 中插入数据 -```SQL +```sql # SQL 插入 insert into root.sg(time, a) values(1, "\\") insert into root.sg(time, a) values(2, "\t") @@ -378,65 +379,69 @@ insert into root.sg(time, a) values(4, "\u96d5") # 如何升级 - 如何升级小版本 (例如,从 v0.12.4 to v0.12.5)? - * 同一个大版本下的多个小版本是互相兼容的。 - * 只需要下载新的小版本, 然后修改其配置文件,使其与原有版本的设置一致。 - * 停掉旧版本进程,启动新版本即可。 + + - 同一个大版本下的多个小版本是互相兼容的。 + - 只需要下载新的小版本, 然后修改其配置文件,使其与原有版本的设置一致。 + - 停掉旧版本进程,启动新版本即可。 - 如何从 v0.13.x 升级到 v1.0.x? - * 0.13版本与1.0版本的文件目录结构不同,**不能将0.13的data目录直接拷贝到1.0集群使用**。如果需要将0.13的数据导入至1.0,可以使用[LOAD](../UserGuide/latest/Tools-System/TsFile-Import-Export-Tool.md)功能; - * __0.13版本的默认RPC地址是0.0.0.0,1.0版本的默认RPC地址是127.0.0.1__ + + - 0.13 版本与 1.0 版本的文件目录结构不同,**不能将 0.13 的 data 目录直接拷贝到 1.0 集群使用**。如果需要将 0.13 的数据导入至 1.0,可以使用 [LOAD](../UserGuide/latest/Tools-System/Data-Import-Tool.md) 功能; + - **0.13 版本的默认 RPC 地址是 0.0.0.0,1.0 版本的默认 RPC 地址是 127.0.0.1** - 如何从 v1.0.0 升级到 v1.x.0? - * 停止写入,下载新版本文件,将lib文件夹全部替换,重启即可 + + - 停止写入,下载新版本文件,将 lib 文件夹全部替换,重启即可 - 如何从 v0.12.x 升级到 v0.13.x? - * 0.12 与 0.13 的数据文件格式兼容,但写前日志等格式不兼容,因此需要进行升级(但速度很快): - * **在 0.12 的 CLI 中执行 `SET SYSTEM TO READONLY` 命令,并停止新数据的写入。** - * 在 CLI 执行 `flush` 命令,确保关闭所有的 TsFile 文件。 - * 我们推荐提前备份整个 data 目录,以备回滚。 - * 下载最新 0.13 版本,解压并修改配置文件,尤其是 **时间戳精度等首次启动后不可修改的配置参数 **。并将各数据目录都指向备份的或者 v0.12 原来使用的数据目录。 - * 停止 v0.12 的实例,启动 v0.13 的实例。 - * **执行上述步骤后, 请确认`data/system/schema/system.properties`文件中的 `iotdb_version` 是 `0.13.x`. - 如果不是,请手动修改为`0.13.x`。** - * __注意:0.13 的配置文件进行了较大改动,因此不要直接将 0.12 的配置文件用于 0.13__ - * **0.13 进行了 SQL 语法的改动,不使用反引号括起的标识符中仅能包含如下字符,否则需要使用反引号括起。** - * **[0-9 a-z A-Z _ : @ # $ { }] (字母,数字,部分特殊字符)** - * **['\u2E80'..'\u9FFF'] (UNICODE 中文字符)** - * **0.13 中 `SELECT` 子句中路径结点名如果是实数,需要使用反引号引起,用于与表达式中的常数区分。如语句 "select 123 + \`123\` from root.sg",前一个123表示常数,后一个 \`123\`会和 root.sg 拼接,表示路径 root.sg.\`123\`。** - -- 如何从 v0.11.x 或 v0.10.x 升级到 v0.12.x? - * 从 0.11 或 0.10 升级到 0.12 的过程与 v0.9 升级到 v0.10 类似,升级工具会自动进行数据文件的升级。 - * **停掉旧版本新数据写入。** - * 用 CLI 调用`flush`,确保关闭所有的 TsFile 文件。 - * 我们推荐提前备份数据文件(以及写前日志和 mlog 文件),以备回滚。 - * 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.11 或 0.10 原来使用的数据目录。 把 0.11 中的其他修改都放到 0.12 中。 - * 停止旧版本 IoTDB 的实例,启动 v0.12 的实例。IoTDB 将后台自动升级数据文件格式。在升级过程中数据可以进行查询和写入。 - * 当日志中显示`All files upgraded successfully! ` 后代表升级成功。 - * __注意 1:0.12 的配置文件进行了较大改动,因此不要直接将原本的配置文件用于 0.12__ - * __注意 2: 由于 0.12 不支持从 0.9 或者更低版本升级,如果需要升级,请先升级到 0.10 版本__ - * __注意 3: 在文件升级完成前,最好不要进行 delete 操作。如果删除某个 database 内的数据且该 database 内存在待升级文件,删除会失败。__ + - 0.12 与 0.13 的数据文件格式兼容,但写前日志等格式不兼容,因此需要进行升级(但速度很快): + - **在 0.12 的 CLI 中执行 `SET SYSTEM TO READONLY` 命令,并停止新数据的写入。** + - 在 CLI 执行 `flush` 命令,确保关闭所有的 TsFile 文件。 + - 我们推荐提前备份整个 data 目录,以备回滚。 + - 下载最新 0.13 版本,解压并修改配置文件,尤其是 **时间戳精度等首次启动后不可修改的配置参数 **。并将各数据目录都指向备份的或者 v0.12 原来使用的数据目录。 + - 停止 v0.12 的实例,启动 v0.13 的实例。 + - **执行上述步骤后, 请确认`data/system/schema/system.properties`文件中的 `iotdb_version` 是 `0.13.x`. + 如果不是,请手动修改为`0.13.x`。** + - **注意:0.13 的配置文件进行了较大改动,因此不要直接将 0.12 的配置文件用于 0.13** + - **0.13 进行了 SQL 语法的改动,不使用反引号括起的标识符中仅能包含如下字符,否则需要使用反引号括起。** + - **\[0-9 a-z A-Z _ : @ # $ { }] (字母,数字,部分特殊字符)** + - **\['\u2E80'..'\u9FFF'] (UNICODE 中文字符)** + - **0.13 中 `SELECT` 子句中路径结点名如果是实数,需要使用反引号引起,用于与表达式中的常数区分。如语句 "select 123 + \`123\` from root.sg",前一个 123 表示常数,后一个 \`123\`会和 root.sg 拼接,表示路径 root.sg.\`123\`。** +- 如何从 v0.11.x 或 v0.10.x 升级到 v0.12.x? + + - 从 0.11 或 0.10 升级到 0.12 的过程与 v0.9 升级到 v0.10 类似,升级工具会自动进行数据文件的升级。 + - **停掉旧版本新数据写入。** + - 用 CLI 调用 `flush`,确保关闭所有的 TsFile 文件。 + - 我们推荐提前备份数据文件(以及写前日志和 mlog 文件),以备回滚。 + - 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.11 或 0.10 原来使用的数据目录。 把 0.11 中的其他修改都放到 0.12 中。 + - 停止旧版本 IoTDB 的实例,启动 v0.12 的实例。IoTDB 将后台自动升级数据文件格式。在升级过程中数据可以进行查询和写入。 + - 当日志中显示 `All files upgraded successfully!` 后代表升级成功。 + - **注意 1:0.12 的配置文件进行了较大改动,因此不要直接将原本的配置文件用于 0.12** + - **注意 2: 由于 0.12 不支持从 0.9 或者更低版本升级,如果需要升级,请先升级到 0.10 版本** + - **注意 3: 在文件升级完成前,最好不要进行 delete 操作。如果删除某个 database 内的数据且该 database 内存在待升级文件,删除会失败。** - 如何从 v0.10.x 升级到 v0.11.x? - * 0.10 与 0.11 的数据文件格式兼容,但写前日志等格式不兼容,因此需要进行升级(但速度很快): - * **停掉 0.10 的新数据写入。** - * 用 CLI 调用`flush`,确保关闭所有的 TsFile 文件。 - * 我们推荐提前备份写前日志和 mlog 文件,以备回滚。 - * 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.10 原来使用的数据目录。 - * 停止 v0.10 的实例,启动 v0.11 的实例。IoTDB 将自动升级不兼容的文件格式。 - * __注意:0.11 的配置文件进行了较大改动,因此不要直接将 0.10 的配置文件用于 0.11__ - -- 如何从 v0.9.x 升级到 v0.10.x? - * **停掉旧版本新数据写入。** - * 用 CLI 调用`flush`,确保关闭所有的 TsFile 文件。 - * 我们推荐提前备份数据文件(以及写前日志和 mlog 文件),以备回滚。 - * 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.9 原来使用的数据目录。 - * 停止 v0.9 的实例,启动 v0.10 的实例。IoTDB 将自动升级数据文件格式。 -- 如何从 0.8.x 升级到 v0.9.x? - * 我们推荐提前备份数据文件(以及写前日志和 mlog 文件),以备回滚。 - * 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.8 原来使用的数据目录。 - * 停止 v0.8 的实例,启动 v0.9.x 的实例。IoTDB 将自动升级数据文件格式。 + - 0.10 与 0.11 的数据文件格式兼容,但写前日志等格式不兼容,因此需要进行升级(但速度很快): + - **停掉 0.10 的新数据写入。** + - 用 CLI 调用`flush`,确保关闭所有的 TsFile 文件。 + - 我们推荐提前备份写前日志和 mlog 文件,以备回滚。 + - 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.10 原来使用的数据目录。 + - 停止 v0.10 的实例,启动 v0.11 的实例。IoTDB 将自动升级不兼容的文件格式。 + - **注意:0.11 的配置文件进行了较大改动,因此不要直接将 0.10 的配置文件用于 0.11** + +- 如何从 v0.9.x 升级到 v0.10.x? + - **停掉旧版本新数据写入。** + - 用 CLI 调用`flush`,确保关闭所有的 TsFile 文件。 + - 我们推荐提前备份数据文件(以及写前日志和 mlog 文件),以备回滚。 + - 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.9 原来使用的数据目录。 + - 停止 v0.9 的实例,启动 v0.10 的实例。IoTDB 将自动升级数据文件格式。 + +- 如何从 0.8.x 升级到 v0.9.x? + - 我们推荐提前备份数据文件(以及写前日志和 mlog 文件),以备回滚。 + - 下载最新版,解压并修改配置文件。将各数据目录都指向备份的或者 v0.8 原来使用的数据目录。 + - 停止 v0.8 的实例,启动 v0.9.x 的实例。IoTDB 将自动升级数据文件格式。 # 所有版本 @@ -444,4 +449,4 @@ insert into root.sg(time, a) values(4, "\u96d5") # 验证哈希和签名 -除了我们的发行版,我们还在 *.sha512 文件中提供了 sha512 散列,并在 *.asc 文件中提供了加密签名。 Apache Software Foundation 提供了广泛的教程来 [验证哈希和签名](http://www.apache.org/info/verification.html),您可以使用任何这些发布签名的 [KEYS](https://downloads.apache.org/iotdb/KEYS) 来遵循这些哈希和签名。 +除了我们的发行版,我们还在 _.sha512 文件中提供了 sha512 散列,并在 `_.asc` 文件中提供了加密签名。 Apache Software Foundation 提供了广泛的教程来 [验证哈希和签名](http://www.apache.org/info/verification.html),您可以使用任何这些发布签名的 [KEYS](https://downloads.apache.org/iotdb/KEYS) 来遵循这些哈希和签名。