Pergunta

Eu desenvolvo um novo site e quero usar o Gridfs como armazenamento para todos os uploads do usuário, porque ele oferece muitas vantagens em comparação com um armazenamento normal do sistema de arquivos.

Os benchmarks com Gridfs atendidos pelo NGINX indicam que não é tão rápido quanto um sistema de arquivos normal servido pelo NGINX.

Referência com nginx

Alguém está lá fora, que usa Gridfs já em um ambiente de produção ou o usaria para um novo projeto?

Foi útil?

Solução

Eu uso o Gridfs no trabalho em um de nossos servidores, que faz parte de um site de comparação de preços com estatísticas de tráfego honrosas (visitantes de 25 mil por dia). O servidor não possui muita RAM, 2Gigs, e até a CPU não é muito rápida (Core 2 Duo 1,8 GHz), mas o servidor possui bastante espaço de armazenamento: 10TB (SATA) na configuração RAID 0. O trabalho que o servidor está fazendo é muito simples:

Cada produto em nosso aparelho de preço possui uma imagem (existem cerca de 10 milhões de produtos de acordo com o nosso Product DB), e o trabalho dos servidores é baixar a imagem, redimensioná-lo, armazená-lo em gridfs e entregá-lo ao navegador dos visitantes. .. se não estiver presente na grade ... ou ... entregue -o ao navegador de visitantes se já estiver armazenado na grade. Então, isso pode ser chamado de 'esquema tradicional de CDN'.

Armazenamos e processamos 4 milhões de imagens neste servidor, pois está em funcionamento. As coisas de redimensionamento e armazenamento são feitas por um script PHP simples ... mas com certeza, um script python ou algo como Java pode ser mais rápido.

Tamanho atual dos dados: 11.23g

Tamanho atual de armazenamento: 12.5g

Índices: 5

Tamanho do índice: 849,65m

Sobre a confiabilidade: isso é muito confiável. O servidor não é carregado, o tamanho do índice é bom, as consultas são rápidas

Sobre a velocidade: com certeza, não é rápido como armazenamento de arquivos local, talvez 10% mais lento, mas rápido o suficiente para ser usado em tempo real, mesmo quando a imagem precisa ser processada, o que é no nosso caso, muito dependente do PHP. Os tempos de manutenção e desenvolvimento também foram reduzidos: tornou -se tão simples de excluir uma ou múltipla imagens: basta consultar o banco de dados com um comando de exclusão simples. Outra coisa interessante: quando reiniciamos nosso servidor antigo, com armazenamento de arquivos local (milhões de arquivos em milhares de pastas), às vezes fica pendurado por horas porque o sistema estava executando uma verificação de integridade de arquivos (isso realmente levou horas ...). Não temos mais esse problema com o Gridfs, nossas imagens agora são armazenadas em grandes pedaços de MongoDB (arquivos de 2 GB)

Então ... em minha mente ... sim, o Gridfs é rápido e confiável o suficiente para ser usado para produção.

Outras dicas

Como mencionado, pode não ser tão rápido quanto um sistema de arquivos comum, mas depois lhe dá vantagens de homem sobre sistemas de arquivos comuns O que eu acho que vale a pena desistir de um pouco de velocidade.

Por fim, com o sharding, você pode chegar a um ponto, no entanto, onde o armazenamento do GRIDFS se torna a opção mais rápida, em oposição a um sistema de arquivos comum e um único nó.

O módulo Nginx-Gridfs do Mdirolf é ótimo e bastante fácil de configurar. Estamos usando isso em produção em tinta.ly Servir todas as pinturas e não houve problemas até agora.

No entanto, o heads -up em reparos para DBs maiores - um novo sistema que estamos desenvolvendo, o Mongo não saiu de maneira limpa e o reparo dos Gridfs de 7 TB parece que levará 130 horas.

Por isso, acho que vou mudar para o OpenStack Swift ou Ceph. Ainda assim, até então era bom. E o módulo Nginx-Gridfs é doce.

Eu não recomendo usar Gridfs, a menos que você saiba o que está fazendo. O Gridfs é apenas uma camada de abstração, que divide arquivos para pedaços e armazena os arquivos em duas coleções. Mais arquivos - mais despesas gerais. Se você espera que os arquivos sejam praticamente do mesmo tamanho, não excedendo 32m ou mais - você está da maneira certa. Não tente armazenar arquivos grandes em gridfs. Por quê?

  1. Os drivers em diferentes idiomas podem ler o arquivo inteiro. (Por exemplo, pedaços) ao ler a pequena parte do arquivo.
  2. A modificação do arquivo pode afetar todos os pedaços e aumentar a carga do banco de dados Se o seu sistema de arquivos estiver crescendo, você precisará decidir empurrar os gridfs. Tome cuidado! A consistência não é garantida quando o sharding está inicializando!

Se você pensar no projeto LEAD carregado - considere carregar os arquivos diretamente em documentos (se 16m ou menos tamanho) ou escolha outro clusterfs e vincule o nome do arquivo/inode à sua lógica.

Espero que isto ajude.

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