概述
| 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 |
- 是否有人可以验证各种记录表中的数据类型、长度和可为空字段是否正确?