Juntar a operação ao NOSQL

Vi alguns artigos sobre o Bigtable e o NOSQL. É muito interessante que eles evitam operações de adesão.

como exemplo básico, vamos pegar a tabela de funcionários e departamentos e assumir que os dados estão espalhados por várias tabelas / servidores.

Só quero saber, se os dados estão espalhados por vários servidores, como fazemos operações de adesão ou união?

Author: Jan Hančič, 2010-01-03

3 answers

Quando você tem dados extremamente grandes, você provavelmente quer evitar se juntar. Isto é porque a sobrecarga de uma pesquisa de chave individual é relativamente grande(o serviço precisa descobrir qual nó (s) para consultar, e consultá-los em paralelo e esperar por respostas). Por cima, quero dizer latência, não limitação de rendimento.

Isso faz com que joins sugam muito mal como você precisa fazer um monte de pesquisas de chaves estrangeiras, que acabaria indo para muitos,muitos nós diferentes (em muitos casos). Entao é melhor evitar isto como um padrão.

Se isso não acontecer muitas vezes, você provavelmente poderia levar o golpe, mas se você vai querer fazer um monte deles, pode valer a pena "desnormalizar" os dados. O tipo de coisas que são armazenadas nas lojas NoSQL é tipicamente "anormal" em primeiro lugar. Não é incomum duplicar os mesmos dados em todos os tipos de lugares diferentes para tornar mais fácil a pesquisa.

Além disso, a maioria dos nosql não suporta o secundário. índices tanto, o que significa que você tem que duplicar coisas se você quiser consultar por qualquer outro critério.

Se está a armazenar dados como funcionários e departamentos, está melhor com uma base de dados convencional.
 36
Author: MarkR, 2010-01-03 22:26:07

Você teria que fazer várias seleções, e juntar os dados manualmente em sua aplicação. Veja isto assim post para mais informações. A partir desse post:

Conjuntos de dados Bigtable podem ser questionados a partir de serviços como o AppEngine usando uma linguagem chamada GQL ("gee-kwal") que é baseada em um subconjunto de SQL. A falta visível do GQL é qualquer tipo de comando de junção. Devido à natureza distribuída de um banco de dados Bigtable, realizar uma junção entre duas mesas seria terrivelmente ineficiente. Em vez disso, o programador tem que implementar tal lógica em sua aplicação, ou projetar sua aplicação de modo a não precisar dela.

 4
Author: Kaleb Brasee, 2017-05-23 11:53:55
O Kaleb tem razão. Você escreve código personalizado com uma solução NoSQL se seus dados não se encaixam bem em uma loja de valor de chave. Map-reduce/async processing and custom view caches are common. Brian Aker fez uma apresentação muito engraçada (e satírica e tendenciosa) no Opensqlcamp de Novembro de 2009 http://www.youtube.com/watch?v=LhnGarRsKnA Salta daqui a 40 segundos para ouvir sobre as entradas.
 3
Author: Ken Fox, 2010-01-03 15:57:44