MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

A função javascript do lado do servidor tem problemas de desempenho no mongoDB?


Quando você pergunta sobre a viabilidade do javascript do lado do servidor, primeiro você precisa deixar claro de que tipo de javascript do lado do servidor você está falando. De acordo com a documentação , existem quatro tipos diferentes de execução de código no lado do servidor. Infelizmente, todos eles são soluções alternativas para situações em que a API nativa é insuficiente:

A eval comando


eval tem a desvantagem de ser executado apenas em um nó. Isso reduz muito sua utilidade em um ambiente em cluster. Com coleções fragmentadas, não funciona!

Por padrão, ele também cria um bloqueio global que torna o banco de dados completamente inutilizável até que o script seja executado. Isso pode ser evitado com o nolock argumento (a menos que o próprio script faça algo que crie um bloqueio global).

A resposta de Sammaye também explica algumas sérias preocupações de segurança.

É realmente mais uma ferramenta de teste e administração do que algo que você deve usar para qualquer operação regular.

Executando arquivos .js por meio de uma instância do shell mongo no servidor


Nesse caso, o código não é executado no banco de dados, mas em outro processo independente em um dos servidores. Isso significa que todos os dados necessários de outros shards devem ser transferidos para o servidor que executa o código javascript, independentemente do que realmente é retornado pelo script.

Ele aparece como outro aplicativo para o servidor mongodb, portanto, não pode fazer nada que você também não pudesse fazer de dentro do seu aplicativo normal. É outra ferramenta de teste e administração que você não deve usar em operação regular.

Encontre com o $where -operador


O operador $where em um comando find permite passar uma função javascript que é usada para filtrar valores. Para a maioria dos casos triviais, isso é muito menos performático do que as outras ferramentas da consulta find têm a oferecer, especialmente porque não pode usar nenhum índice.

Quando o uso de $where não puder ser evitado, pelo menos tente usar algumas das ferramentas normais do find-query para reduzir o conjunto de documentos que precisam ser passados ​​para a função $where.

MapReduce


MapReduce usa duas funções javascript para criar dados agregados. Costumava ser a principal ferramenta de mineração de dados para o MongoDB, mas a maioria de seus casos de uso usuais agora são atendidos pelo muito mais amigável estrutura de agregação .

Ele também tem a mesma desvantagem de $where:a menos que você filtre, você terá que executar não uma, mas pelo menos duas funções javascript para cada documento.

Mas o MapReduce pode pelo menos rodar distribuído e pode ser paralelizado.

tl;dr:


Usar Javascript é uma medida de último recurso para consultas muito incomuns que não podem ser feitas com a linguagem de consulta normal e que exigem acesso a muitos dados para serem implementados no aplicativo. Quando possível, faça o que quiser com as ferramentas especializadas disponíveis ou implemente sua lógica na camada de aplicação.