Как улучшить SQL производительность при поиске доменов верхнего уровня - PullRequest
0 голосов
/ 19 апреля 2020

Пытаясь найти подходящее доменное имя .com, поэтому я загрузил полный список доменов .com из Verisign с целью выполнить несколько SQL запросов к нему. Одна из ключевых целей - запустить запрос, проверяющий список слов английского языка размером с английский язык sh, чтобы выяснить, есть ли у него домен a.com. Частично я не пользуюсь онлайн-сервисом, потому что я не нашел сервис, который бы давал мне такой точный контроль запросов, но также потому, что мне любопытно, как это сделать.

Мой первый шаг был импортировать файл Verisign com.zone (текстовый файл) в версию SQL Server для локального разработчика, используя встроенный мастер импорта плоских файлов. Он создал столбец с именем RawData (тип данных nvarchar(450), без нулей) в таблице с именем Com. У него ~ 352 миллиона записей. Записи нуждаются в некоторой очистке (например, не нужны подробности о серверах имен, и некоторые записи не анализируются так же, как другие), но сами доменные имена, кажется, были успешно импортированы.

Я также создал другую таблицу (~ 372K записей, nvarchar(450), без нулей) с именем Words, в которой столбец с именем Word содержит список большинства слов Engli sh (например, inte rnet, был, сделан, для, кошки, видео, и т. Д. c .. без определений, только одно слово на запись).

Непосредственным препятствием, с которым я столкнулся, является производительность. Даже простой запрос c для проверки доступности одного доменного имени медленный. Когда я запускаю

SELECT * 
FROM Com 
WHERE RawData = '%insert-some-domain-name-here%'

, время выполнения составляет примерно 4 минуты (при использовании ноутбука с i9-9880h, 32 ГБ ОЗУ, 2 ТБ NVMe SSD).

С учетом того, что я предпочел бы не делать ie старости до того, как закончился какой-либо теоретический запрос размера словаря, любые предложения о том, как написать запрос и / или изменения в базе данных, чтобы привести меня к конечной цели: достаточно быстрый поиск, который генерирует список английских sh слов, которые не имеют доменных имен.

1 Ответ

0 голосов
/ 20 апреля 2020

Пытался найти подходящее доменное имя .com, поэтому я скачал полный список доменов .com из Verisign с целью выполнить несколько SQL запросов к нему. Одна из ключевых целей - запустить запрос, проверяющий список слов английского языка размером 1027 *, чтобы выяснить, нет ли у него домена a.com.

Забудьте об этой идее. Пул доступных доменных имен долгое время добывался до смерти go. Вы не первый, кто попробует эту идею. Имена, которые все еще не зарегистрированы, являются неясными словарными словами, которые на самом деле не пригодны для использования и не имеют коммерческого использования.

Есть интересные вещи, которые вы можете сделать, но поиск хороших имен, «пропущенных» другими, не входит в их число. Но вы сами увидите.

Относительно анализа файла зоны : вот как выглядит сегодняшний файл зоны .com:

; The use of the Data contained in Verisign Inc.'s aggregated
; .com, and .net top-level domain zone files (including the checksum
; files) is subject to the restrictions described in the access Agreement
; with Verisign Inc.

$ORIGIN COM.
$TTL 900
@ IN    SOA     a.gtld-servers.net. nstld.verisign-grs.com. (
                  1587225735 ;serial
                  1800 ;refresh every 30 min
                  900 ;retry every 15 min
                  604800 ;expire after a week
                  86400 ;minimum of a day
                  )
$TTL 172800
 NS A.GTLD-SERVERS.NET.
 NS G.GTLD-SERVERS.NET.
 NS H.GTLD-SERVERS.NET.
 NS C.GTLD-SERVERS.NET.
 NS I.GTLD-SERVERS.NET.
 NS B.GTLD-SERVERS.NET.
 NS D.GTLD-SERVERS.NET.
 NS L.GTLD-SERVERS.NET.
 NS F.GTLD-SERVERS.NET.
 NS J.GTLD-SERVERS.NET.
 NS K.GTLD-SERVERS.NET.
 NS E.GTLD-SERVERS.NET.
 NS M.GTLD-SERVERS.NET.
COM. 86400 DNSKEY 257 3 8 AQPDzldNmMvZFX4NcNJ0uEnKDg7tmv/F3MyQR0lpBmVcNcsIszxNFxsBfKNW9JYCYqpik8366LE7VbIcNRzfp2h9OO8HRl+H+E08zauK8k7evWEmu/6od+2boggPoiEfGNyvNPaSI7FOIroDsnw/taggzHRX1Z7SOiOiPWPNIwSUyWOZ79VmcQ1GLkC6NlYvG3HwYmynQv6oFwGv/KELSw7ZSdrbTQ0HXvZbqMUI7BaMskmvgm1G7oKZ1YiF7O9ioVNc0+7ASbqmZN7Z98EGU/Qh2K/BgUe8Hs0XVcdPKrtyYnoQHd2ynKPcMMlTEih2/2HDHjRPJ2aywIpKNnv4oPo/
COM. 86400 DNSKEY 256 3 8 AwEAAbbFc1fjkBCSycht7ah9eeRaltnLDK2sVyoxkjC6zBzm/5SGgfDG/H6XEupT7ctgCvnqexainTIfa8nnBYCOtAec7Gd1vb6E/3SXkgiDaMUJXmdt8E7obtVZqjFlN2QNnTljfMiECn16rZXlvXIi255T1wFkWtp5+LUCiufsLTeKc9xbQw7y0ucsR+GKz4yEStbYi98fnB5nOzzWhRUclf0=
COM. 86400 DNSKEY 256 3 8 AwEAAcpiOic4s641IPlBcMlBWA0FFomUWuKDWN5CzId/la4aA69RFpakRxPSZM8fegOQ+nYDrUY6UZkQRsowPr18b+MqyvHBUaT6CJUBkdRwlVcD/ikpcjvfGEiH5ttpDdZdS/YKZLBedh/uMCDLNS0baJ+nfkmMZGkYGgnK9K8peU9unWbwAOrJlrK60flM84EUolIIYD6s9g/FfyVB0tE86fE=
COM. 86400 NSEC3PARAM 1 0 0 -
COM. 900 RRSIG SOA 8 1 900 20200425160215 20200418145215 39844 COM. ItE0mu9Hb2meliHlot2/6f0cMvCJThPps/BxbyRkDDYesfLBVXqtIRHiDN+wlf7HS+lxFtLHIUzT0GAPf2y5cA0s3pUdBxyRft0fC76GEJq7g0Tcpifdxft4T/6XTv77rP8pFE7aSp+SMDtUMRFIGnGTGBo7WRhjIx1G0peGXMr13xRg4Pa9kigGtjSRi3SWyNT9x1IjVVVJtsFzP9sELQ==
COM. RRSIG NS 8 1 172800 20200423045013 20200416034013 39844 COM. D9BeOQ8drx8LiXXBOk6KlxKacpno/tPujwOAPd482Kj+yAQkFxVVL1bqU03WA7c12W/mkLxk665OQDfOOoirqMePDuamvQCguaSFVKVm5no42JsxoitzwOo+g0kwm9u2F/xGO9ybPfcEQ/nrH9de/RluVSVc0MPsCMja2sCuohEMSYApMjFs4XcXsED0lFTzllIESW7JvK8xb8RFId0TOw==
COM. 86400 RRSIG NSEC3PARAM 8 1 86400 20200423045013 20200416034013 39844 COM. l37dFS1JFXDg9gr1oGACX2rI/iegsIX3RlAEpshuIsT4isZ0FAw0pkAVJQvyqd5a3IOO1TjczWN1U/eYB2ynvX1MKLg3NEp01zUo67eJgowjV+g3zF3XtifhoW///Tqqz0GuAk443jol/Ue00SX3k6XgzxbycX9GKR9FmsLaIIowvz991eJyL1mgOpzQvLnIL1/EAZi9felFilkrj5JaIA==
COM. 86400 RRSIG DNSKEY 8 1 86400 20200430182421 20200415181921 30909 COM. Zkw5YJzP75sdfLN8kN/y8/ywFX+DvotF6fVdxKQGdmgJyyUnDliP6q0VXqVpHHDwtW2WfOlwskiW6007+MIGqV5VtTL6tGeZLv4hJDYZkAwIrl/xBN+aQmIvan4UdBROkOAnfi5Atf1adX5iCqn1jfIGMXb8kKVMrDuDJc/V6XbXEL8NysnqRQtdC6bVuunDQOg/Edw1Uy+B9ly9njU/EmlISkNZo2jo+cXJBFS+Is/6Xcn04+jkHiSRuAFwaGPxKPLeG92v+5ea7pWXBpSIwiqD7Gp/yJCvCUrRZP8eJcoYGav0TT7Bsp2ml15dV20FmNnBPdTqKZHtT8HAIp60Qw==
KITCHENEROKTOBERFEST NS NS1.UNIREGISTRYMARKET.LINK.
KITCHENEROKTOBERFEST NS NS2.UNIREGISTRYMARKET.LINK.
KITCHENFLOORTILE NS NS1.UNIREGISTRYMARKET.LINK.
KITCHENFLOORTILE NS NS2.UNIREGISTRYMARKET.LINK.
KITCHENTABLESET NS NS1.UNIREGISTRYMARKET.LINK.
KITCHENTABLESET NS NS2.UNIREGISTRYMARKET.LINK.
KITEPICTURES NS NS1.UNIREGISTRYMARKET.LINK.
KITEPICTURES NS NS2.UNIREGISTRYMARKET.LINK.
BOYSBOXERS NS NS1.UNIREGISTRYMARKET.LINK.
BOYSBOXERS NS NS2.UNIREGISTRYMARKET.LINK.

Вас интересуют строки, содержащие NS во второй позиции. В этом примере KITCHENEROKTOBERFEST.COM имеет два объявленных сервера имен. Поскольку это файл зоны .com, следует предполагать .com, если имя не заканчивается точкой. Таким образом, вы должны отфильтровать эти строки и удалить дубликаты. Вы должны получить около 140 миллионов доменных имен .com. Определенно не 352 миллиона - либо у вас есть дубликаты, либо вы импортировали неверные данные. Это дает вам представление о том, насколько переполнена зона .com. Не удивляйтесь, что любое имя, которое имеет смысл удаленно, уже зарегистрировано.

Когда вы загрузили данные в таблицу, осталась проблема индексирование данных для достижения хорошей производительности при делать запросы. Я понимаю, что эта проблема уже решена, поэтому я не буду вносить дальнейшие предложения по этому вопросу.

Одна вещь, которую вы можете сделать, чтобы выделить чистые словарные домены, - это СОЕДИНИТЬ две таблицы: вашу таблицу доменов и таблица ключевых слов. Для этого должны быть индексы с обеих сторон, чтобы работать оптимально, и у меня нет подробностей о структуре вашей таблицы. Или попробуйте каждое ключевое слово одно за другим с таблицей доменов в al oop (можно использовать курсор).

Мне тоже кажется, что это совершенно новый вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...