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 ;)

3 Comments »

Diaspora um facebook mais seguro e descentralizado

maio 13th, 2010 | by suissa | uncategorized

mai
13

O Facebook vem recebendo muitas críticas por causa da privacidade dos dados, este projeto tem a intenção de descentralizar o servidor, ou seja, distribuí-lo em vários servidores e que não exista um central. Logo os dados vão “conversar” entre si.

E vocês acham que isso seria possível com que banco de dados? Na verdade a pergunta derradeira seria com qual banco NOSQL ele será possível.

Com certeza veremos novidades nessa área, provavelmente els vão modificar algum já existente. É esperar para ver!

http://www.joindiaspora.com/

1 Comment »

Páginação PHP com MongoDB

maio 11th, 2010 | by alex | mongodb, mysql, nosql, uncategorized

mai
11

Um post rápido sobre a fácilidade de páginação com o MongoDB e PHP e todas as outras linguagens.

Com esse simples código, você pode começar a fazer a sua páginação em PHP e MongoDB:

[php]
$cursor->limit(400)->skip(0);
[/php]

Esse é o “substituto” do LIMIT 0,400
Essa fácilidade ainda vem com um forte aliado, o count:

[php]
$cursor->count(true);
$cursor->count();
[/php]

O primeiro count vai retornar a quantidade TOTAL de todos os registros que foram retornados na consulta sem o limit. No nosso exemplo aqui, estamos limitando a 400 registros, mas a quantidade de registros total era de 5 milhões. No segundo count retornamos só o que esta sendo exibido, no caso 400 registros.

A partir dai você já sabe, só da um for na quantidade total dos registros, e montar as páginas.
Mas tome cuidado com esse exemplo que te dei, pois ele pode retornar muitas, muitas páginas mesmo, dependendo da quantidade de registros que você tenha, por isso, faça uma páginação mais detalhada #ficadica.

Como vocês podem ver, a páginação é algo muito simples em relação ao MySQL por exemplo, pois não precisamos consultar novamente o banco de dados para saber a quantidade total de registros.

1 Comment »