公司需要建立个非传统的DNS服务器,目前的数据已经1000W+,如果业务发展OK,后续可能会爆炸式增长。
采用的是BIND DLZ+MYSQL,因为是第一次安装此类型服务器,所有配置都是按照网上教程配置,
为host建立了索引,同时还建立了分区存储,按理说1000W+的数据查询应该很快,在数据库中直接查询也是非常快。但是测试DNS返回一般要3S以致更多。
跑到官网http://bind-dlz.sourceforge.net/mysql_driver.html上一条一条看了下:
Fourth line: {select zone from dns_records where zone = '%zone%'}
This query is used by findzone() in the MySQL driver.
一想不对啊,目前1000W+数据都是一个zone的,那不是要取出1000W+数据,当然慢了,于是故意敲错zone,2MS就返回了!!于是新建一个表:
CREATE TABLE `supported_zone` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`zone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
在表supported_zone中加入zone数据
将named.conf中的上述语句修改为:
{select zone from supported_zone where zone = '$zone$'}
于是瞬间秒回了:
;; Query time: 2 msec
当然给dns_records表建立索引,{select zone from dns_records where zone = '%zone%' limit 1}等方法应该也有用。