В учебных целях я хочу создать простой веб-индексатор, который сканирует Интернет и сохраняет все найденные страницы в базе данных MySQL с их заголовками и URL-адресами с помощью этой таблицы (содержимое страницы не сохраняется):
Насколько большой будет эта база данных приблизительно? Это о сотнях МБ, ГБ или около ТБ? Спасибо.
Чтобы получить быстрый и грязный ответ, прокрутите нижнюю часть. В противном случае прочтите мой рассказ, чтобы понять, как я пришел к этим числам.
В 2008 году Google опубликовал несколько цифр, которые могут вас заинтересовать. В то время пауки Google знали о более 1 триллион (это 1000000000000) уникальных URL. Следует отметить, что не все эти URL проиндексированы. В вашем случае мы сделаем вид, что мы являются собираюсь проиндексировать все. Вы можете прочитать это объявление здесь: http://googleblog.blogspot.com/2008/07/we-knew-web-was-big.html
Текущий размер вашего id
столбец позволяет только 2000000000 URL-адреса в индексе. Если вы сделаете это unsigned int
ты можешь сжать 4 миллиарда , но, предполагая почти бесконечный масштаб, вы захотите использовать unsigned bigint
На самом деле вы захотите использовать uuid или что-то подобное, чтобы вы могли генерировать идентификаторы одновременно (и с нескольких хостов), но для этого упражнения мы предположим, что мы используем unsigned bigint
.
Итак, теоретически у нас есть эта бесконечно масштабируемая таблица MySQL, которая определяется следующим образом:
unsigned bigint AUTO_INCREMENT
varchar(100)
varchar(500)
Требования к хранилищу для каждого из этих столбцов:
Ссылка: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
Теперь, чтобы получить теоретический размер таблицы, мы просто умножаем его на наш 1 триллион уникальные URL:
611 байт * 1 000 000 000 000 URL-адресов = 611 000 000 000 000 байтов = ~ 555,7 терабайт
Вот и все. 1 триллион URL-адресов, умноженный на размер хранилища определенной нами таблицы, займет почти 556 терабайт данных. Нам также нужно будет добавить данные для индексов, накладных расходов на таблицы и некоторых других вещей. Точно так же мы могли бы вычесть данных, потому что для нашего упражнения я предполагал, что каждый varchar
столбец был заполнен до максимума. Надеюсь, это поможет.
(Кроме того, просто краткое пояснение: я знаю, что столбцы bigint не являются почти бесконечными, но делать математику проще, когда вы не беспокоитесь о логистике)