公司需要建立個非傳統的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}等方法應該也有用。