Contactar o apoio

Respondemos por e-mail, normalmente em dois dias.

Para prevenir abusos, o Google reCAPTCHA verifica este envio; alguns dados são transmitidos ao Google. O script só é carregado quando abre este formulário.

← Todos os artigos

As colunas que ninguém escreve

A tabela principal dos contadores tem aqui 166 436 linhas e várias colunas que parecem importar. Três delas são lastdomain, firstdomain e userdomain. Contêm dados:

lastdomainnão vazia em 15 525 linhas
firstdomainnão vazia em 15 457 linhas
userdomainnão vazia em 2 982 linhas

Nada as escreve. Nenhuma instrução em todo o código define qualquer uma das três. Os valores vêm da geração anterior deste serviço, congelados no que fossem quando ela deixou de correr, e toda a linha criada desde então está vazia.

Porque isto é pior do que uma coluna vazia

Uma coluna inteiramente vazia está obviamente morta. Ninguém constrói sobre ela, ninguém a usa em relatórios, ninguém passa uma tarde a perguntar-se o que significa.

Uma coluna preenchida em 9 % das linhas é uma armadilha. Parece um campo que às vezes é preenchido e às vezes não — coisa perfeitamente vulgar numa coluna. Quem a encontra conclui razoavelmente que existe uma regra a decidir quando é definida, e põe-se à procura da regra. Não há.

E os valores ultrapassados não estão arrumados em linhas adormecidas, onde não fizessem mal. Das linhas que carregam um lastdomain, 1 613 pertencem a contadores ainda atualizados este ano. Um contador vivo com um domínio anotado há uma década é igualzinho a um contador vivo com um atual.

Pior, os dados são plausíveis. São domínios, parecem domínios de contadores, e uma consulta que se ligue por eles devolve linhas. Responderia a uma pergunta sobre uma web que seguiu em frente.

Como saber depressa

Procura escritas, não o nome. O nome de uma coluna aparece em listas SELECT, em despejos de esquema, em migrações antigas, em comentários — e nada disso prova coisa nenhuma. O que decide é se algum INSERT ou UPDATE a menciona. Essa procura demora um minuto e é conclusiva de uma maneira que ler à volta do código não é.

A segunda verificação são os próprios dados: se a linha mais recente com valor tem anos, a coluna é um fóssil, diga o código o que parecer dizer.

Porque ainda lá estão

Remover uma coluna é barato e não é grátis. Cada uma destas linhas pertence ao contador de alguém, alguns a correr sem interrupção desde 2006, e a operação segura antes de uma mudança de esquema numa tabela assim é uma cópia que realmente restauraste uma vez, não uma que apenas produziste. Enquanto isso não valer a pena por si, três colunas sem uso não custam mais do que confusão.

São por isso documentadas. Não há sítio óbvio para essa nota — o esquema desta base existe apenas na base em funcionamento, em nenhum ficheiro do repositório — por isso foi para onde alguém tropeça mesmo nela: na classe que lê uma linha de contador, precisamente onde essas colunas passam. Uma nota num ficheiro que ninguém abre não é documentação. Só transforma uma armadilha em nota de rodapé se estiver no caminho.

Publicidade