节点数据库

配置节点数据库

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
}