Qual seria o tamanho de um banco de dados MySQL se eu salvasse o título e o URL de todas as páginas? [fechadas]

1

Para fins de aprendizado, quero criar um indexador da Web simples que rastreie a Web e salve todas as páginas encontradas em um banco de dados MySQL com seus títulos e URLs, com essa tabela (o conteúdo da página não é salvo):

  • id: integer AUTO_INCREMENT PRI
  • título: varchar (100)
  • url: varchar (500)

Qual seria o tamanho desse banco de dados? É sobre centenas de MB, GB ou em torno de TBs? Obrigado.

    
por rightfold 31.10.2010 / 01:01

1 resposta

8

Para a resposta rápida e suja, role a parte inferior. Caso contrário, leia a minha narrativa para entender como consegui esses números.

Em 2008, o Google lançou alguns números que podem ser de seu interesse. Naquela época, os spiders do Google tinham conhecimento de mais de 1 trilhão (isto é, 1.000.000.000.000) de URLs únicos . Uma coisa a se notar é que nem todos esses URLs são indexados . Para o seu caso aqui, vamos fingir que nós estamos indo para indexar tudo. Você pode ler este anúncio aqui: link

O tamanho atual da sua coluna id permite apenas URLs de 2 bilhões no índice. Se você fizer isso um unsigned int você pode espremer 4 bilhões , mas assumindo uma escala quase infinita, você iria querer usar um unsigned bigint Em toda a realidade, você iria querer usar um uuid ou algo similar para que você possa gerar IDs simultaneamente (e de múltiplos hosts), mas para este exercício, vamos supor que estamos usando um unsigned bigint .

Então, em teoria, nós temos essa tabela MySQL infinitamente escalável que é definida como:

  • id: unsigned bigint AUTO_INCREMENT
  • título: varchar(100)
  • url: varchar(500)

Os requisitos de armazenamento para cada uma dessas colunas são:

  • id: 8 bytes
  • título: 100 + 1 = 101 bytes
  • url: 500 + 2 = 502 bytes
  • Tamanho da linha *: 502 + 101 + 8 = 611 bytes (Negligenciando sobrecarga, cabeçalhos de tabela, índices, etc)

Referência: link

Agora, para obter o tamanho da tabela teórica, simplesmente multiplicamos pelas nossas URLs únicas 1 trilhão :

611 bytes * 1.000.000.000.000 URLs = 611.000.000.000.000 bytes = ~ 555.7 terabytes

Então você tem isso. 1 trilhão de URLs vezes o tamanho de armazenamento da tabela que definimos ocuparia quase 556 terabytes de dados. Também teríamos que adicionar dados para índices, sobrecarga de tabela e algumas outras coisas. Da mesma forma, poderíamos também subtrair os dados porque para o nosso exercício eu assumi que cada coluna varchar estava sendo maximizada. Espero que isso ajude.

(Além disso, apenas um esclarecimento rápido: eu sei que as colunas bigint não são quase infinitas, mas fazer as contas é mais fácil quando você não está preocupado com a logística)

    
por 31.10.2010 / 07:57