GridFS no MongoDB

novembro 14th, 2011 | by raymonsanches | mongodb, uncategorized

nov
14

A propriedade GridFS no MongoDB é indicada pra se trabalhar com um grande volume de arquivos e muitos acessos simultâneos. Ela também é ideal para trabalhar com arquivos maiores que 4MB.

Isso não quer dizer que ela não seja indicada para arquivos menores, muito pelo contrário. A diferença é que, em arquivos maiores que 4MB o GridFS automaticamente divide o arquivo em partes (ou chunks) praticamente automatizando o autosharding .Uma mão na roda.

Mas agora, vamos ao que interessa.

Por quê usar a propriedade GridFS?

  • Você não irá precisar se preocupar com as limitações dos sitemas operacionais, como nomes de arquivos com acentos e nomes estranhos;
  • O Mongo gera automaticamente um hash MD5 e o salva junto com o documento, o que é útil para saber se o arquivo foi enviado corretamente ou se ele já existe no servidor;
  • Caso seus arquivos sejam muito grandes, o MongoDB automaticamente quebra ela em diversas partes para que seja processado pelo sistema operacional sem problemas;
  • Se seu servidor estiver configurado para autosharding e/ou replicate a propriedade GridFS já fará esse trabalho automaticamente.

Fazendo UPLOAD usando GridFS via MongoDB Driver


PHP::
      // conectar ao mongo e a collection
      $mongo = new Mongo();
      $db = $mongo->teste;

      // usando a clase GridFS
      $grid = $db->getGridFS();

      // caminho do arquivo a ser enviado
      $caminho = "/tmp/";

      // nome do arquivo
      $arquivo = "imagem-teste.png";

      // armazenando as informações de metadata do arquivo
      $metadata = array(
            "filename" => $arquivo,
            "downloads" => 0,
            "comment" => "Meu primeiro arquivo no Mongo"
      );

      $grid->storeFile($caminho . $arquivo, $metadata);
::PHP

Para que esse pequeno script funcione é preciso ter instalado o driver do MongoDB para o PHP e tê-lo inicializado. Este exemplo acima funciona perfeitamente utilizando forms multipart/form-data e $_FILES.

Metadata
Para o PHP o uso da Metadata não é de suma importância, porém em outras linguages esses dados são necessários. O MongoDB fornece essa opção fazendo que seus dados possam ser acessados por outras linguagens em outros dispositivos caso seja necessário. Você também pode inserir qualquer campo metadata que necessitar.

Resgatar um arquivo com GridFS


PHP::
      // conectar ao mongo e a collection
      $mongo = new Mongo();
      $db = $mongo->teste;

      // usando a clase GridFS
      $grid = $db->getGridFS();

      // procurando a imagem pelo nome
      $imagem = $grid->findOne("imagem-teste.png");

      // retorna imagem ao browser
      header('Content-type: image/jpeg');
      echo $image->getBytes();

::PHP

Nos próximos artigos vou comentar sobre os outros recursos da classe GridFS, que facilita muito a vida do desenvolvedor. Espero que tenham gostado do meu primeito post aqui no NoSQL BR e espero poder contribuir cada vez mais para que essa comunidade só venha a crescer. Um obrigado especial ao Suissa pelo espaço e enjoy ;)

Authored by raymonsanches

3 Responses to “GridFS no MongoDB”

Show / Hide Comments
  1. Ótimo artigo, em php qual ORM vocês usa para trabalhar com MongoDB?