Назад | Перейти на главную страницу

Насколько большой будет база данных MySQL, если я сохраню в ней заголовок и URL всех веб-страниц?

В учебных целях я хочу создать простой веб-индексатор, который сканирует Интернет и сохраняет все найденные страницы в базе данных 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)
  • URL: varchar(500)

Требования к хранилищу для каждого из этих столбцов:

  • id: 8 байт
  • title: 100 + 1 = 101 байт
  • url: 500 + 2 = 502 байта
  • Размер строки *: 502 + 101 + 8 = 611 байт (Без учета накладных расходов, заголовков таблиц, индексов и т. Д.)

Ссылка: 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 не являются почти бесконечными, но делать математику проще, когда вы не беспокоитесь о логистике)