跳转到: 导航, 搜索

Designate/Blueprints/Records Table Redesign

概述

Gerrit补丁 []
Launchpad蓝图 [1]

目前,所有不同的记录类型只有一个 RecordSets 表和一个 Records 表。此蓝图建议将这些表细分为每个记录类型一个 RecordSet 表和一个 Record 表。

对于所有记录类型使用单个 RecordSets 表和 Records 表,随着表大小的增长可能会出现问题。如果需要进行任何修改,例如添加一列,则必须锁定整个表,并且更新包含数百万记录的表可能需要很长时间。此外,如果表变得太大,则必须对其进行分片,这涉及编写大量代码来确定为哪些记录调用哪个分片。另一方面,只要索引正确完成,跨表的连接不是问题。此外,每个记录类型一个表是一种经过验证的 DNS 数据库设计,因为一些公司已经以这种方式实现了它,并且拥有数百万条记录。

目前 Records 表中的大部分信息将被整合到 RecordSet 表中。每种类型的 Records 表将仅包含 record_id、recordset_id 以及该特定记录类型的唯一数据。例如,A_Record 表将包含 recordset_id 和 IPv4 地址。MX_Record 表将包含 recordset_id 和邮件服务器的 FQDN 及其优先级值。有关更多详细信息,请参阅下表。

数据库模式变更

现有的 Recordset 表和 Records 表将变得过时,并被每个记录类型的新表取代。

现有表

Recordsets 表

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 主键
created_at datetime - 创建时间
updated_at datetime - 上次更新时间
version INT 11 Designate API 版本
tenant_id VARCHAR 36 记录集所有者的 ID
domain_id CHAR 32 非唯一键
name VARCHAR 255 记录集名称
type ENUM - A, AAAA, CNAME, MX, SRV, TXT, SPF, NS, PTR, SSHFP
ttl INT 11 生存时间
description VARCHAR 160 记录集描述

Records 表

姓名 数据类型 长度 可为空 详情
id CHAR 32 主键,生成的UUID
created_at DATETIME - 创建的 UTC 时间
updated_at DATETIME - 上次更新的 UTC 时间
version INTEGER 11 Designate API 版本
data MEDIUMTEXT - 特定记录的唯一数据
priority INTEGER 11 某些类型记录的优先级值
domain_id CHAR 32 非唯一键,域名 ID
managed TINYINT 1 布尔值指示受管理资源
managed_resource_type VARCHAR 50 受管理资源类型
managed_resource_id CHAR 32 受管理资源 ID
managed_plugin_name VARCHAR 50 受管理插件名称
managed_plugin_type VARCHAR 50 受管理插件类型
hash VARCHAR 32 唯一键,记录的哈希值
description VARCHAR 160 记录描述
status ENUM("Active", "Pending", "Deleted") - 记录状态
tenant_id VARCHAR 36 记录所有者的 ID
recordset_id CHAR 32 非唯一键,记录集 ID
managed_tenant_id CHAR 32 受管理所有者的 ID
managed_resource_region VARCHAR 100 受管理的区域
managed_extra VARCHAR 100 额外字段

新表格

RecordSets

姓名 数据类型 长度 可为空 详情
id CHAR 32 主键,生成的UUID
created_at DATETIME - 创建的 UTC 时间
updated_at DATETIME - 上次更新的 UTC 时间
version INTEGER 11 Designate API 版本
tenant_id CHAR 36 记录所属的 tenant_id
domain_id CHAR 32 非唯一键;记录所属的 domain_id
name VARCHAR 255 A 记录所属的区域
ttl INTEGER 11 分配给记录的生存时间
description VARCHAR 160 记录的描述
status ENUM 'Active', 'Pending', 'Deleted' RecordSet 的当前状态
hash VARCHAR 32 唯一键
managed TINYINT 1 指示是否受管理
managed_resource_type VARCHAR 50
managed_resource_id CHAR 32
managed_plugin_name VARCHAR 50
managed_plugin_type VARCHAR 50
managed_tenant_id VARCHAR 36
managed_resource_region VARCHAR 100
managed_extra VARCHAR 100

A_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
address VARCHAR 15 iPv4

AAAA_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
address BINARY 16 IPv6 地址

CNAME_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
cname VARCHAR 255 CNAME

MX_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
exchange VARCHAR 255 主机名
preference INT 11 数字越小优先级越高

NS_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
nsdname VARCHAR 255 主机名

PTR_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
ptrdname VARCHAR 255 主机名

SOA_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
mname VARCHAR 255 主名称服务器
rname VARCHAR 255 指示电子邮件地址的域名
serial INT 11 序列号
refresh INT 11 数据刷新之间的秒数
retry INT 11 重试之间的秒数
expire INT 11 信息不再被认为是权威之前的秒数
minimum INT 11 区域中的记录有效的秒数

SPF_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
text VARCHAR 255 授权计算机发送邮件

SRV_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
target VARCHAR 255 服务名称
priority INT 11 服务的优先级
weight INT 11 服务的权重
port INT 11 服务的端口

SSHFP_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
algorithm TINYINT 1 0 保留;1 RSA;2 DSS
type TINYINT 1 0 保留;1 SHA-1
fingerprint VARCHAR 255 服务器公钥的指纹

TXT_Records

姓名 数据类型 长度 可为空 详情
id CHAR 32 UUID, 唯一键
recordset_id CHAR 32 非唯一键
text VARCHAR 255 Text

评论与讨论

  1. 是否有人可以验证各种记录表中的数据类型、长度和可为空字段是否正确?