Reparar o MongoDB no Ubuntu

janeiro 25th, 2012 | by tiago | mongodb

jan
25

Nesse post vou explicar como reparar o MongoDB no Ubuntu de forma fácil e rapida. Eu particularmente tive um problema com o mongo esses dias, onde sempre que eu tentava efetuar uma conexão com o mongo recebia o seguinte erro:

Error: couldn't connect to server 127.0.0.1} (anon):1137

Pesquisando um pouco na net, descobri que esse erro acontece devido algum desligamento incorreto efetuado anteriormente. Vamos ver agora como corrigir.

Por que o mongodb não inicia?

Infelizmente até o momento o mongodb não consegue se recuperar muito bem quando ele crasha o que nos força a ter que recuperá-lo na unha.

  1. Para iniciar vamos tentar conectar no mongo (digite mongo no terminal). Você provavelmente recebeu o erro citado acima.
  2. Agora vamos verificar se ele está rodando.  Para isso digite sudo status mongodb, isso deverá retornar  mongodb stop/waiting.
  3. Tente iniciar o serviço com o comando sudo start mongodb. No terminal vai aparecer que o serviço foi iniciado (mongodb start/running, process XXXX), porém se você der um sudo status mondodb novamente, verá que ele continua parado stop/waiting.
  4. Abra o arquivo de logs do mongo para ver se o seu problema é igual o meu. Ele fica em /var/log/mongodb/mongodb.log.
**************
old lock file: /var/lib/mongodb/mongod.lock.  probably means unclean
shutdown
recommend removing file and running --repair
see: http://dochub.mongodb.org/core/repair for more information
*************

Vamos agora a correção do problema:

  1. Vamos remover manualmente o arquivo .lock com o comando: sudo rm /var/lib/mongodb/mongod.lock
  2. Agora vamos executar o script para reparar o mongo: sudo -u mongodb mongod -f /etc/mongodb.conf --repair.
  3. Após executar o script inicie o serviço do mongo: sudo start mongodb. Verifique se o serviço está mesmo rodando(sudo status mondodb) e depois tente conectar a base de test(mongo test).

Espero que isso ajude todos que tiverem o mesmo problema que eu.

Valeu galera e até a próxima!

No Comments »

Grupo do NoSQL Brasil no facebook

dezembro 28th, 2011 | by suissa | notícias

dez
28

Pessoal como o facebook anda movimentando bastante os grupos de desenvolvedores resolvi criar o grupo para discutirmos sobre NOSQL la e quem sabe agregar mais colaboradores para o portal, lembrando que quem quiser escrever algum artigo é só me avisar que eu adiciono como autor.

Como o grupo foi criado hoje ainda não possui uma url amigável mas quando tivermos um número suficiente terá. Conto com vocês!!!

link grupo: http://www.facebook.com/groups/207239866029581/

1 Comment »

Como instalar MongoDB no Linux

novembro 23rd, 2011 | by suissa | mongodb

nov
23

Vou demonstrar como instalar o MongoDB no Linux (Ubuntu):

Abra o terminal e vamos instalar o MongoDB via apt-get:

sudo apt-get install mongodb

 

Agora precisamos criar 2 pastas:

sudo mkdir /data
cd /data
sudo mkdir db
sudo chown seu_usuario_linux db

PRONTO! Agora podemos rodar nosso MongoDB com o comando mongod para iniciar o serviço e com mongo nós abrimos o cliente no terminal.

Qualquer problema na instalação posta aqui nos comentários para que possamos ajudar.
ps: quase sempre é problema de permissão nas pastas.

2 Comments »

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 »

Modelos ricos: outro motivo para usar NoSQL

novembro 3rd, 2011 | by Thiago Avelino | couchdb, mongodb, nosql

nov
03

“A motivação mais comum que leva as empresas a usar NoSQL é a escalabilidade. Mas se você lida com objetos complexos em sua aplicação, como entidades espalhadas em dezenas de tabelas normalizadas, pode ser que uma alternativa NoSQL seja útil para o seu projeto, mesmo que ele não tenha zilhões de usuários simultâneos”. Essa pertinente colocação levouLuciano Ramalho, supervisor de desenvolvimento na BIREME/OPAS/OMS e referência no mundo Python, a apresentar noNoSQLBr 2011 o case OpenTrials para o Registro Brasileiro de Ensaios Clínicos. Trata-se de uma plataforma virtual de acesso livre financiada pelo Ministério da Saúde, entre outras entidades, e que tem por finalidade registrar estudos experimentais e não-experimentais realizados em seres humanos, por pesquisadores brasileiros e estrangeiros.

Luciano conta que a missão dele e de sua equipe era a de renovar métodos, práticas e ferramentas de desenvolvimento. Como primeiro passo, o desafio foi migrar do “PHP sem framework” para Python com Django. E explicou em detalhes como foi realizado esse projeto, desde a criação, a partir de ferramentas open source e práticas ágeis, até as lições aprendidas no processo fazendo uso da persistência poliglota com um “mix” de BD relacional com banco de dados NoSQL, e a “solução” para o OpenTrials com o CouchDB (considerando que o MongoDB também seria apropriado para o projeto em questão).

Assista ao vídeo com a íntegra da palestra de Luciano Ramalho no NoSQLBr 2011:

http://www.gonow.com.br/blog/2011/11/02/modelos-ricos-outro-motivo-para-usar-nosql/

 

No Comments »

Klaus Wuestefeld e o Prevayler: afinal, por que você ainda usa banco de dados?

novembro 3rd, 2011 | by Thiago Avelino | benchmark, nosql

nov
03

Em um teste de escalabilidade e resultados, enquanto o Prevayler, open source, retorna 228.369 queries por segundo, um sistema Oracle responde de forma 9983 vezes mais lenta que o Prevayler. Você acreditaria nesse cálculo impressionante? Esse é, contudo, um dos projetos de software livre brasileiros mais conhecidos no mundo. E quem o apresenta “sem maquiagem alguma”, como gosta de ressaltar, é Klaus Wuestefeld, pioneiro de Extreme Programming no Brasil e criador do Prevayler.

“O Prevayler é a implementação do conceito de prevalência. E a prevalência é o terceiro mecanismo de persistência mais simples possível”, resume ele. Em sua palestra com o provocativo nome “Você ainda usa banco de dados?”, na segunda edição do encontro NoSQLBr, em São Paulo, Klaus fez uma apresentação bastante inusitada dos conceitos que permeiam o produto. Preocupou-se mais em fornecer uma breve introdução sobre o que vem a ser esse pattern de prevalência de sistemas“1 mil a 10 mil vezes mais rápido que um banco de dados relacional” para, em seguida, listar as perguntas do público presente sobre a eficiência do Prevayler.

Ele anotou uma a uma e defendeu o uso do Prevayler com base nas seguintes contestações:

- Schema Evolution
- Dependência de um sistema externo
- Dados sem schema
- Meu sistema irá crescer “300 mil vezes”
- OLAP / Análise
- Clustering
- Sistema pesado em escrita
- Ambiente híbrido / Vários sistemas acessando os mesmos dados
- Paralelismo, concorrência
- Corrupção de dados
- Alta disponibilidade
- Segurança

E as duas perguntas mais intrigantes de todas:

1. Por que não tem mais gente usando?
2. Quem vai me ajudar se der tudo errado?

As respostas para essas e outras questões sobre o Prevayler, incluindo as características que definem sua persistência e espelhamento transparentes e transações ACID “ridiculamente simples”, você vê em detalhes no vídeo com a íntegra da palestra de Klaus Wuestefeld no NoSQLBr 2011:

http://www.gonow.com.br/blog/2011/10/31/klaus-wuestefeld-e-o-prevayler-afinal-por-que-voce-ainda-usa-banco-de-dados/

 

No Comments »

OpenShift: NoSQL “a la carte” em um PaaS 100% open source

outubro 30th, 2011 | by Thiago Avelino | escalabilidade, java, mongodb, nosql, python

out
30

Edgar Silva é Solutions Architect Manager na Red Hat Brasil, responsável pelo time que define as tecnologias e soluções de plataformas Linux, middleware, virtualização e cloud computing. Na segunda edição do NoSQLBr, Edgar fez uma apresentação sobre o OpenShift, o PaaS da Red Hat, com demonstrações práticas de como utilizá-lo em conjunto com tecnologias como MongoDB e Infinispan para recurso de armazenamento de aplicações (que podem estar escritas em diversas linguagens, entre elas Python, PHP, Java e Ruby).

Edgar tem como missão na empresa pesquisar como combinar vários conceitos computacionais e de negócios para encontrar a solução mais adequada aos desafios de projetos propostos por seus clientes. “Até que ponto são relevantes questões como sistema operacional ou linguagem? As empresas querem ser bem atendidas, não importa muito tecnologia, linguagem ou sistema operacional. A questão está cada vez mais focada em negócios mesmo”, diz ele.

Com a “nova onda” de Cloud, várias soluções de PaaS surgem como alternativa para empreendedores e pequenos investidores atrairem negócios e transformar meras ideias em casos de sucesso. Projetos relacionados a dados públicos, jogos online em HTML5 para dispositivos móveis e geolocalização, entre outros, são casos de uso candidatos para começarem a ser desenvolvidos nesse tipo de infraestrutura – gratuita – como o OpenShift.

Assista ao vídeo com a íntegra da palestra de Edgar Silva no NoSQLBr 2011: clique aqui

Referência: Gonow Tecnologia - http://www.gonow.com.br/blog/2011/10/26/openshift-nosql-a-la-carte-em-um-paas-100-open-source/

 

No Comments »

Por que escolher um banco de dados baseado em grafos?

outubro 29th, 2011 | by Thiago Avelino | grafo, neo4j, nosql

out
29

Antes de responder a pergunta acima, pense primeiro numa questão mais abrangente: o que é modelagem de dados? E ainda numa segunda, esta um pouco mais específica: como devemos consultar e atualizar um banco de dados? As respostas certamente não são tão simples, mas pelo menos agora já existem alternativas mais flexíveis das que haviam em um passado não muito distante. A modelagem em grafos, para o engenheiro de software inglês Alistair Jones, é uma delas.

Alistair trabalha na Neo Technology, empresa desenvolvedora do neo4j, um banco de dados baseado em grafos open source “poderoso e expressivo para armazenar, consultar e manipular dados”. Ele é considerado um “expert” em metodologias ágeis – especificamente para testes de desempenho – e, no segundo encontro NoSQLBr, ocorrido em São Paulo na semana passada, Jones apresentou um overview sobre a modelagem baseada em grafos, pontuando princípios e diferenças em relação aos modelos tradicionais de modelagem de dados.

“O melhor modelo é o que melhor resolve o seu problema”

Esse “mantra” você já deve ter ouvido – e entoado – algumas vezes, e não só em se tratando de modelagem de dados. Mas não custa reforçar que apegar-se a um modelo único como sendo a tal “bala de prata” que solucionará todos os seus problemas é algo bastante arriscado. E a respeito disso, voltando à pergunta inicial, por qual motivo você escolheria um banco de dados baseado em grafos? Esse modelo facilita o acesso a dados em redes ou hierarquias, via múltiplos nós.

E o mais importante: você precisa de flexibilidade para acessar os dados no futuro (um modelo baseado em grafos, ressalva Alistair Jones, é mais fácil de mudar que os outros). Como exemplo, ele mostra como poderia ser a modelagem de dados para um site disponível em vários idiomas.

O que há de diferente?

- Você deixa a manutenção dos relacionamentos para o banco de dados
- Chaves substitutas desaparecem ou são desnecessárias (com exceção do ID)
- Relacionamentos ganham um nome explícito

Princípios da modelagem em grafos

Os “nós” representam conceitos múltiplos: com isso, é possível quebrá-los e distingui-los uns dos outros.

Adotar o paradigma > Nós por identidade (ID) >> Relacionamentos por acesso

Relacionamentos para consultas ao banco

- Relacionamentos devem ser o principal meio para acessar dados em nós
- Fazer traverse é barato: essa é a principal vantagem de usar um banco de dados baseado em grafos
- A modelagem em grafos é similar à modelagem relacional, só que mais fácil

Assista ao vídeo com a íntegra da apresentação de Alistair Jones no NoSQLBr para entender em detalhes como funciona a modelagem de dados baseada em grafos:

 

Referência: Gonow Tecnologia - http://www.gonow.com.br/blog/2011/10/25/por-que-escolher-um-banco-de-dados-baseado-em-grafos/

 

 

No Comments »