Pergunta

O co-fundador do Reddit, fez uma apresentação sobre os problemas que eles tinham enquanto escala de milhões de usuários.Um resumo está disponível aqui.

O que me surpreendeu foi o ponto 3:

Em vez disso, eles mantêm uma Coisa Tabela e uma Tabela de Dados.Tudo no Reddit é uma Coisa:os usuários, links, comentários, subreddits, prêmios, etc.As coisas continuam atributo comum como para cima/para baixo votos, um tipo e data de criação.Os Dados da tabela possui três colunas:coisa id, chave, valor.Há uma linha para cada atributo.Há uma linha para o título, url, autor de spam de votos, etc.Quando são adicionados novos recursos que eles não têm que se preocupar sobre o banco de dados mais.Eles não têm para adicionar novas tabelas de coisas novas ou se preocupar com atualizações.

Isso parece uma idéia terrível para mim, mas parece ter trabalhado para o Reddit.É uma boa idéia em geral, embora?Ou é uma peculiaridade do Reddit, que passou a trabalhar para eles?

Foi útil?

Solução

Este é um modelo de dados conhecido como Eav por entidade-atributo-valor. Tem seus usos. Um excelente exemplo são os dados do teste do paciente, naturalmente escassos, pois existem centenas de milhares de testes que podem ser executados, mas normalmente apenas alguns estão presentes para um paciente. Uma mesa com centenas de milhares de colunas é boba, mas uma mesa com EAV faz sentido.

Outras dicas

A maioria dos realmente grandes web sites estão usando algum tipo de incrivelmente simples no banco de dados do lado das coisas.Este tem a vantagem de que é rápido e escalável.Ele tem a desvantagem de que todos os relacionamentos que você deseja obter o banco de dados para impor automaticamente (através de gatilhos e tal) você necessidade para impor-se em seu código de cliente em vez disso.Mantendo a consistência é uma dor no pescoço, e há quase sempre pelo menos alguma chance de que seus dados irão ser inconsistente, pelo menos por períodos curtos de tempo.

Para um site de rede social, é algo que vale a pena o compromisso.Dados principalmente direito a maior parte do tempo é adequado (e.g., que realmente importa-se se o número de votos que recebe um item é realmente de 20 milissegundos fora da data, quando é enviado), e manter os custos razoáveis enquanto a escalabilidade para suportar um zilhão de usuários importa muito.

Eu notei que eles não mencionaram nada sobre a facilidade ou dificuldade na criação de relatórios com os dados.Quando usado em um estreito conjunto de circunstâncias, EAVs pode ser benéfico.Como uma parte central da maioria dos sistemas que ele vai se tornar um pesadelo quando você acertar o relatório.O problema com EAVs é que a maioria dos benefícios é que, no início do projeto e a maioria das dores é, mais tarde, na análise de relatórios e, sobretudo, devido à grave falta de integridade de dados."Não ter que se preocupar com chaves estrangeiras" para mim soa como um pesadelo de órfãos linhas.Adicionar a utilização de chaves substitutas para tudo e que você tem um emaranhado de lamaçal que, geralmente, termina em uma reescrita completa

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top