节点数据库¶
配置节点数据库¶
H2¶
By default, nodes store their data in an H2 database. See 访问 H2 数据库.
默认的,节点会将他们的数据存储在 H2 数据库中。查看 访问 H2 数据库。
Nodes can also be configured to use PostgreSQL and SQL Server. However, these are experimental community contributions. The Corda continuous integration pipeline does not run unit tests or integration tests of these databases.
节点也可以被配置用来使用 PostgreSQL 和 SQL Server。然而,这些还都是由社区贡献出来的处于试验的阶段。Corda 的持续集成 pipeline 还没有针对这些数据库运行单元测试和集成测试。
PostgreSQL¶
Nodes can also be configured to use PostgreSQL 9.6, using PostgreSQL JDBC Driver 42.1.4. Here is an example node configuration for PostgreSQL:
节点也可以配置来使用 PostgreSQL 9.6,使用 PostgreSQL JDBC Driver 42.1.4。下边是配置使用 PostgreSQL 的例子:
dataSourceProperties = {
dataSourceClassName = "org.postgresql.ds.PGSimpleDataSource"
dataSource.url = "jdbc:postgresql://[HOST]:[PORT]/[DATABASE]"
dataSource.user = [USER]
dataSource.password = [PASSWORD]
}
database = {
transactionIsolationLevel = READ_COMMITTED
}
Note that:
- Database schema name can be set in JDBC URL string e.g. currentSchema=my_schema
- Database schema name must either match the
dataSource.user
value to end up on the standard schema search path according to the PostgreSQL documentation, or the schema search path must be set explicitly for the user. - If your PostgresSQL database is hosting multiple schema instances (using the JDBC URL currentSchema=my_schema) for different Corda nodes, you will need to create a hibernate_sequence sequence object manually for each subsequent schema added after the first instance. Corda doesn’t provision Hibernate with a schema namespace setting and a sequence object may be not created. Run the DDL statement and replace my_schema with your schema namespace:
需要注意:
数据库 schema 名字可以在 JDBC URL 字符中被设置为 currentSchema=my_schema
数据库 schema 名字必须根据 PostgreSQL 文档,在标准的 schema 检索路径以 ``dataSource.user``结尾,或者这个 schema 检索的路径必须为用户显式地配置。
如果你的 PostgresSQL 数据库为了不同的 Corda 节点存储了多个 schema 实例(使用 JDBC URL currentSchema=my_schema),那么你需要为在第一个实例后边的这些 schema 手动地创建一个 hibernate_sequence 有序对象。Corda 并没有初始带有一个 schema 命名空间设置的 Hibernate,所以一个有序对象可能不会被创建。运行 DDL 语句并且将 my_schema 替换成你的 schema 命名空间:
CREATE SEQUENCE my_schema.hibernate_sequence INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 8 CACHE 1 NO CYCLE;
SQLServer¶
Nodes also have untested support for Microsoft SQL Server 2017, using Microsoft JDBC Driver 6.2 for SQL Server. Here is an example node configuration for SQLServer:
节点也可以支持未测试过的 Microsoft SQL Server 2017,使用 Microsoft JDBC Driver 6.2 for SQL Server,下边是一个对于 SQL Server 的节点配置:
dataSourceProperties = {
dataSourceClassName = "com.microsoft.sqlserver.jdbc.SQLServerDataSource"
dataSource.url = "jdbc:sqlserver://[HOST]:[PORT];databaseName=[DATABASE_NAME]"
dataSource.user = [USER]
dataSource.password = [PASSWORD]
}
database = {
transactionIsolationLevel = READ_COMMITTED
}
jarDirs = ["[FULL_PATH]/sqljdbc_6.2/enu/"]
Note that:
- Ensure the directory referenced by jarDirs contains only one JDBC driver JAR file; by the default, sqljdbc_6.2/enu/contains two JDBC JAR files for different Java versions.
- 确认 jarDirs 引用的路径里仅仅包含一个 JDBC driver JAR 文件;默认的 sqljdbc_6.2/enu/ 包含了两个针对不同的 Java 版本的 JDBC JAR 文件。
节点数据库表¶
By default, the node database has the following tables:
默认的,节点的数据库包含以下表:
Table name | Columns |
---|---|
DATABASECHANGELOG | ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, EXECTYPE, MD5SUM, DESCRIPTION, COMMENTS, TAG, LIQUIBASE, CONTEXTS, LABELS, DEPLOYMENT_ID |
DATABASECHANGELOGLOCK | ID, LOCKED, LOCKGRANTED, LOCKEDBY |
NODE_ATTACHMENTS | ATT_ID, CONTENT, FILENAME, INSERTION_DATE, UPLOADER |
NODE_ATTACHMENTS_CONTRACTS | ATT_ID, CONTRACT_CLASS_NAME |
NODE_ATTACHMENTS_SIGNERS | ATT_ID, SIGNER |
NODE_CHECKPOINTS | CHECKPOINT_ID, CHECKPOINT_VALUE |
NODE_CONTRACT_UPGRADES | STATE_REF, CONTRACT_CLASS_NAME |
NODE_IDENTITIES | PK_HASH, IDENTITY_VALUE |
NODE_INFOS | NODE_INFO_ID, NODE_INFO_HASH, PLATFORM_VERSION, SERIAL |
NODE_INFO_HOSTS | HOST_NAME, PORT, NODE_INFO_ID, HOSTS_ID |
NODE_INFO_PARTY_CERT | PARTY_NAME, ISMAIN, OWNING_KEY_HASH, PARTY_CERT_BINARY |
NODE_LINK_NODEINFO_PARTY | NODE_INFO_ID, PARTY_NAME |
NODE_MESSAGE_IDS | MESSAGE_ID, INSERTION_TIME, SENDER, SEQUENCE_NUMBER |
NODE_NAMED_IDENTITIES | NAME, PK_HASH |
NODE_NETWORK_PARAMETERS | HASH, EPOCH, PARAMETERS_BYTES, SIGNATURE_BYTES, CERT, PARENT_CERT_PATH |
NODE_OUR_KEY_PAIRS | PUBLIC_KEY_HASH, PRIVATE_KEY, PUBLIC_KEY |
NODE_PROPERTIES | PROPERTY_KEY, PROPERTY_VALUE |
NODE_SCHEDULED_STATES | OUTPUT_INDEX, TRANSACTION_ID, SCHEDULED_AT |
NODE_TRANSACTIONS | TX_ID, TRANSACTION_VALUE, STATE_MACHINE_RUN_ID |
PK_HASH_TO_EXT_ID_MAP | ID, EXTERNAL_ID, PUBLIC_KEY_HASH |
STATE_PARTY | OUTPUT_INDEX, TRANSACTION_ID, ID, PUBLIC_KEY_HASH, X500_NAME |
VAULT_FUNGIBLE_STATES | OUTPUT_INDEX, TRANSACTION_ID, ISSUER_NAME, ISSUER_REF, OWNER_NAME, QUANTITY |
VAULT_FUNGIBLE_STATES_PARTS | OUTPUT_INDEX, TRANSACTION_ID, PARTICIPANTS |
VAULT_LINEAR_STATES | OUTPUT_INDEX, TRANSACTION_ID, EXTERNAL_ID, UUID |
VAULT_LINEAR_STATES_PARTS | OUTPUT_INDEX, TRANSACTION_ID, PARTICIPANTS |
VAULT_STATES | OUTPUT_INDEX, TRANSACTION_ID, CONSUMED_TIMESTAMP, CONTRACT_STATE_CLASS_NAME, LOCK_ID, LOCK_TIMESTAMP, NOTARY_NAME, RECORDED_TIMESTAMP, STATE_STATUS, RELEVANCY_STATUS, CONSTRAINT_TYPE, CONSTRAINT_DATA |
VAULT_TRANSACTION_NOTES | SEQ_NO, NOTE, TRANSACTION_ID |
V_PKEY_HASH_EX_ID_MAP | ID, PUBLIC_KEY_HASH, TRANSACTION_ID, OUTPUT_INDEX, EXTERNAL_ID |
数据库连接池¶
Corda uses Hikari Pool for creating the connection pool. To configure the connection pool any custom properties can be set in the dataSourceProperties section.
Corda 使用 Hikari Pool 来创建连接池。要配置连接池,可以在 dataSourceProperties 部分配置任何的自定义属性。
For example:
dataSourceProperties = {
dataSourceClassName = "org.postgresql.ds.PGSimpleDataSource"
...
maximumPoolSize = 10
connectionTimeout = 50000
}