Melhor resposta
As tabelas de pesquisa não são tanto uma “coisa SQL”, mas sim usadas no design de banco de dados. Eles geralmente são usados para ajudar na normalização do banco de dados para dados que são relativamente estáticos, como tabelas contendo nomes de países, estados, cidades, etc.
Não tenho certeza se existe uma definição acadêmica formal de “tabelas de pesquisa” no contexto de design de banco de dados, mas quando penso nelas, geralmente penso em tabelas com as seguintes propriedades:
- Eles têm configuração ou dados descritivos neles, versus dados relacionados a eventos de aplicativos individuais.
- Eles são pequenos em relação a tabelas relacionadas a eventos.
- Eles são insert-and- leia tabelas e, se houver atualizações, elas serão raras.
- Na maioria das vezes, as junções começam ou terminam nelas.
- Freqüentemente penso nelas como análogos ao “Dicionário” em Algoritmos de compressão de dicionário .
Alguns exemplos de tabelas de pesquisa:
- Tabelas de configuração do aplicativo.
- Tabelas geográficas (conforme mencionado acima) ou outras tabelas descritivas s uch como uma lista de vendedores e fornecedores, uma tabela de catálogo de produtos para uma loja na web, etc.
- Listas de nomes de máquinas e propriedades de hardware de máquina para um aplicativo que gerencia um data center.
- A lista de usuários e os dados do perfil do usuário (imagem, descrição do usuário etc.) para um site. Coisas como a página visitada mais recentemente \_não\_ estariam nas tabelas de pesquisa.
Resposta
A velocidade não é realmente o fator que impulsiona a mudança para um banco de dados NoSQL. Se você pegar o banco de dados SQL e NoSQL lado a lado e comparar atualizações simples e leituras de uma tabela, ambos devem responder muito rapidamente a essas consultas.
A principal diferença é que os bancos de dados NoSQL são projetados especificamente para lidar com simples consultas de baixo nível, eles permitem que você obtenha, defina e talvez algumas outras coisas simples, como intervalos ou classificação. Uma grande desvantagem é que você tem que decidir como vai usar os dados que colocou lá e projetar um esquema adequado desde o início, que permitirá que você acesse os dados, no formato que você deseja.
Por outro lado, o SQL, desde que os dados inseridos sejam desnormalizados corretamente, pode lidar com consultas extremamente complexas. Você não precisa projetar um esquema em torno de seu caso de uso específico e ele tem a enorme flexibilidade da linguagem de consulta que pode retornar qualquer dado em qualquer formato sem ter que modificar o esquema subjacente.
O motivo de SQL tem a reputação de ser lento, o que significa que o processamento de uma consulta complexa em um grande conjunto de dados, inevitavelmente leva tempo, enquanto o NoSQL simplesmente não fornece a capacidade de executar consultas complexas lentas em primeiro lugar. razão pela qual você não poderia usar um banco de dados SQL exatamente da mesma maneira que um banco de dados NoSQL. Coloque todos os seus dados em grandes tabelas e use apenas as consultas mais básicas. Ele teria então um desempenho muito bom ao lado de um banco de dados NoSQL equivalente, mas obviamente desperdiçaria a maior parte de seus recursos mais úteis. Esse é de fato o caso em muitos grandes bancos de dados SQL. A desnormalização é quebrada e a flexibilidade sacrificada para “otimizar” para consultas específicas.
No entanto, existem certas desvantagens no SQL e, em algumas circunstâncias, essas desvantagens se tornam um problema que estamos dispostos a sacrificar a flexibilidade que ele fornece para superá-los.
Primeiro, ele não é dimensionado bem horizontalmente. Tentar dividir seus dados em muitas máquinas menores, embora não seja impossível, pode ter um grande impacto no desempenho. Grandes bancos de dados SQL tendem a ser executados em hardware muito caro e de alta potência para tentar manter um desempenho adequado, enquanto os bancos de dados NoSQL tendem a ser escalonados de forma fácil e barata para qualquer tamanho simplesmente adicionando hardware de commodity extra a um cluster.
e, o mais importante, o SQL não é tolerante a falhas. Sim, é possível replicar seus dados em uma segunda máquina de backup, mas então você dobra seus custos com hardware especializado de alta potência e esse hardware precisa ser ainda mais poderoso para lidar com a carga extra de se manter sincronizado. Compare isso, por exemplo, com um cluster Cassandra, e você pode estar executando uma dúzia de máquinas menores com replicação de dados, até mesmo espalhadas por vários data centers, se desejar. A carga é distribuída automaticamente, as atualizações são enviadas para o cluster e a perda de qualquer máquina não será percebida pelo usuário final.
Esses dois são os motivos reais pelos quais você deve escolher entre as duas tecnologias. Se seu banco de dados for pequeno o suficiente para caber em uma única máquina e o tempo de inatividade ocasional enquanto você restaura de um backup não for um problema, use SQL, ele simplificará enormemente seu desenvolvimento e terá a flexibilidade de se adaptar se suas necessidades mudarem. Se o seu conjunto de dados for enorme ou você tem SLAs apertados para atingir, vá para o NoSQL. Em qualquer lugar, você precisa fazer um julgamento, mas tenha em mente que as habilidades de NoSQL estão em alta demanda no momento.Pode valer a pena seguir esse caminho apenas para ganhar experiência.