noSQL

Primeiramente utilizado em 1998 o termo noSQL surgiu como o nome de um banco de dados relacional de código aberto que não possuía uma interface SQL. Seu autor, Carlo Strozzi, alega que o movimento noSQL “é completamente distinto do modelo relacional e portanto deveria ser mais apropriadamente chamado “NoREL” ou algo que produzisse o mesmo efeito”(segundo wiki).

O termo noSQL foi re-introduzido no início de 2009 por um funcionário do Rackspace, Eric Evans, quando Johan Oskarsson da Last.fm queria organizar um evento para discutir bancos de dados open source distribuídos. O nome — uma tentativa de descrever o surgimento de um número crescente de banco de dados não relacionais.

nosql-edersonmelo

Arquitetura noSQL

Modernas base de dados relacionais parecem ter uma limitação a transações com grandes volumes de dados e cargas de trabalhos, incluindo o dimensionamento do conjuntos destes dados.

NoSQL provén interfaces muito simples, como arrays associativos ou pares chave-valor (Key-Value pairs).
Os bancos de dados que estão sob estes rótulos não podem exigir esquemas de tabela fixa e, geralmente, não suportam instruções e operações de junção SQL e suas operações são restritas a itens individuais.

MongoDB

Tomando como exemplo uma operação no MongoDB, o equivalente aos registros são os documentos, que utilizam a sintaxe JSON. No item abaixo vamos criar um “documento” chamado Ederson com 3 atributos(nome, sobreNome e cidade), criado de forma muito simples.

Ederson = {

nome: “Ederson”,

sobreNome: “Melo”,

cidade: “Canoas/RS”

}

 

Para armazena-lo em banco, bastaria executar: db.nomeDoMeuBanco.save(Ederson)
Neste mesmo banco poderíamos armazenar documento abaixo. Que é completamente diferente do documento anteriormente criado. E que será da mesma forma aceito.

Pedro = {
nome: “Pedro”,
sobreNome: “Haack”,
cidade: “Canoas/RS”,
caes:[{nome:”Lilica”, raça:”vira-lata”}, {nome:”Scott”, raça:”Labrador”}]}
}

Para salvar: db.nomeDoMeuBanco.save(Pedro)

Temos diversas formas de utilização para o noSQL:

  • Gerenciamento de grandes streams de dados não-transicionais: logs Apache, logs de aplicativos, logs MySQL, clickstreams etc.
  • Sincronização de dados online e offline. Este é um nicho que CouchDB segmentou.
  • Rápido tempo de reposta em todos os carregamentos.
  • Evite joins pesados quando o carregamento da query se tornar
  • muito grande para RDBMS.
  • Sistemas simples de tempo real no quais a baixa latência é crítica.

couchDB_black

Mesmo parecendo muito simples e interessante é importante entender que o noSQL não elimina o bancos de dados relacionais, mas coexiste como uma alternativa.

Veja também a entrevista brilhante com o criador do SQL, Michael “Monty” Widenius.
Conduzido por Dmitry Sotnikov, COO da Jelastic.:http://blog.websolute.com.br/entenda-melhor-o-nosql-e-o-big-data/

Fonte(s):

http://pt.wikipedia.org/wiki/NoSQL

http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html

Node.js, sim ou não?

Node, para que ele serve e para que ele é bom ou não.

Para o que ele é bom
O Node é extremamente bem projetado para situações em que um grande volume de tráfego é esperado e a lógica e o processamento necessários do lado do servidor não são necessariamente volumosos antes de responder ao cliente.

Seguindo os textos(copiados das fontes citadas abaixo), que muito bem exemplificam.

Para que ele serve:

Uma API RESTful

Um serviço da Web que forneça uma API RESTful recebe alguns parâmetros, interpreta-os, monta uma resposta e envia-a (normalmente uma quantidade relativamente pequena de texto) de volta ao usuário. Esta é uma situação ideal para o Node, pois você poderá criá-lo para tratar dezenas de milhares de conexões. Ela também não requer um grande volume de lógica; ela simplesmente procura valores em um banco de dados e monta uma resposta. Como a resposta é uma pequena quantidade de texto e a solicitação de entrada é uma pequena quantidade de texto, o volume de tráfego não é grande, e um computador poderá provavelmente tratar as demandas de API mesmo da API da empresa mais movimentada.

nodejs-logo

Pense em uma empresa como a Twitter, que precisa receber tweets e gravá-los em um banco de dados. Existem literalmente milhares de tweets chegando a cada segundo e o banco de dados não consegue acompanhar o número de gravações necessárias durante os momentos de pico de uso. O Node torna-se uma engrenagem importante na solução deste problema. Como vimos, o Node consegue tratar dezenas de milhares de tweets que chegam. Ele pode gravá-los rápida e facilmente em um mecanismo de enfileiramento em memória (memcached, por exemplo), a partir do qual outro processo separado pode gravá-los no banco de dados. A função do Node é rapidamente coletar o tweet e passar essa informação para outro processo, responsável por gravá-lo. Imagine outro projeto — um servidor PHP normal que tenta tratar gravações no banco de dados em si — cada tweet causaria um pequeno atraso ao ser gravado pelo banco de dados, pois a chamada ao banco de dados estaria sendo bloqueada. Uma máquina com este design só poderia ser capaz de tratar 2000 tweets por segundo, devido à latência do banco de dados. Um milhão de tweets por segundo requer 500 servidores. O Node, em vez disso, trata cada conexão e não bloqueia, possibilitando que ele capture o máximo de tweets possível. Uma máquina com Node, capaz de tratar 50.000 tweets por segundo, requer somente 20 servidores.

Technically-Speaking-Node-Js
Servidor de arquivos de imagem

Uma empresa que tem um grande Web site distribuído (pense no Facebook ou Flickr) poderia decidir dedicar servidores inteiros a simplesmente servir imagens. O Node seria uma boa solução para esse problema, pois a empresa pode usá-lo para codificar um recuperador de arquivos fácil e, a seguir, tratar dezenas de milhares de conexões. O Node procuraria pelo arquivo de imagem, retornaria o próprio arquivo ou um erro 404 e não faria mais nada. Essa configuração permitiria que esses tipos de Web sites distribuídos reduzissem o número de servidores necessários para servir arquivos estáticos, como imagens, arquivos .js e arquivos .css.

Para o que ele não serve

É claro, o Node não é a escolha ideal em algumas situações. Eis alguns cenários em que o Node não seria bom:

Páginas criadas dinamicamente

Atualmente, o Node não fornece uma forma padrão para criar páginas dinâmicas. Por exemplo, ao usar a tecnologia JavaServer Pages (JSP), é possível criar uma página index.jsp que contenha loops em snippers JSP, como <% for (int i=0; i<20; i++) { } %>. O Node não permite esses tipos de páginas dinâmicas direcionadas a HTML. Novamente, o Node não é idealmente adequado para ser um servidor de páginas da web, como o Apache e o Tomcat o são. Portanto, se quisesse fornecer uma solução no lado do servidor para isto no Node, teria que codificar a solução inteira você mesmo. Um programador PHP não gostaria de programar um conversor PHP para o Apache toda vez que implementasse um aplicativo da web, mas, neste momento, é o que o Node exigiria que você fizesse.
Aplicativos pesados em bancos de dados relacionais

O Node foi projetado para ser rápido, assíncrono e sem bloqueio. Os bancos de dados não necessariamente compartilham desses objetivos. Eles são síncronos e com bloqueio, pois chamadas ao banco de dados para leitura e gravação bloqueiam até que um resultado seja gerado. Portanto, um aplicativo da Web que solicite muitas chamadas ao banco de dados, muitas leituras e muitas gravações com cada solicitação seria uma aplicação ruim para o Node, pois o banco de dados relacional em si estaria negando muitos dos pontos fortes do Node. (Os novos bancos de dados NoSQL são uma escolha melhor para o Node, mas este é um tópico totalmente diferente).

 

Fonte(s):

http://nodejs.org

http://nodebr.com

http://www.ibm.com/developerworks/br/library/os-nodejs/

Node.js

Continuando a montagem e testes com ambientes e novas arquiteturas, uma me chama muito a atenção, Node.js.

Node.js é uma plataforma construída sobre o motor JavaScript do Google Chrome (JavaScript V8) para facilmente construir aplicações de rede rápidas e escaláveis. Node.js usa um modelo de I/O direcionada a evento não bloqueante que o torna leve e eficiente, ideal para aplicações em tempo real com troca intensa de dados através de dispositivos distribuídos.

nodejs-logo

Na JSConf 2009 Europeia, um programador jovem chamado Ryan Dahl, apresentou um projeto em que estava trabalhando. Este projeto era uma plataforma que combinava a máquina virtual JavaScript V8 da Google e um laço de eventos. O projeto tinha apontava para uma direção diferente das outras plataformas em JavaScript que rodam no servidor: todos I/O primitivos são orientado a evento. Aproveitando o poder e a simplicidade do Javascript, isso tornou tarefas difíceis de escrever aplicações assíncronas em tarefas fáceis.

Como o Node funciona

O Node roda em uma JavaScript V8 VM. JavaScript no lado do servidor pode ser um conceito novo para todos que trabalharam exclusivamente com o JavaScript no lado do cliente, mas a ideia em si não é tão absurda, eu diria, nem um pouco.

O que é V8?

O motor JavaScript V8 é o motor que a Google usa com seu navegador Chrome. Poucas pessoas pensam sobre o que realmente acontece com o JavaScript no lado do cliente. Bem, a engine JavaScript realmente interpreta o código e o executa. Com o V8 a Google criou um ultra-rápido interpretador escrito em C++, com um outro aspecto único: você pode baixar a engine e incorporá-la em qualquer aplicação desejada. Isso não está restrito em rodar em um navegador. Para que criar uma nova linguagem quando há uma boa solução já disponível?

 

Fonte(s):

http://nodejs.org

http://nodebr.com

http://www.ibm.com/developerworks/br/library/os-nodejs/

Jenkins (Servidor de Integração)

Jenkins é um servidor de integração continua, um dos mais utilizados e populares. Através da integração contínua é possível agilizar tarefas(Compilação de projeto, execução de testes automatizados, etc), como deploy de um war em um servidor de produção, gerar relatórios de cobertura de testes, calcular métricas sobre o código do projeto, etc. Que de certa forma podem ser demoradas.

jenkins_logo

Podemos então executar tais tarefas a cada mudança no repositório de código(commit), também podendo apontar erros de compilação ou falhas em testes automatizados, avisando todos os envolvidos.
Muita coisa pode ser feita ou alterada através dos diversos Plugins existentes em seu site.

 

Fonte(s):
http://jenkins-ci.org/
http://en.wikipedia.org/wiki/Jenkins_%28software%29

Arquivo(s):
http://www.eclipse.org/hudson/the-hudson-book/book-hudson.pdf
http://bitnami.org/stack/jenkins
http://www.site.lalitbhatt.com/jenkins

 

 

 

 

 

Uma nova velha polemica: hack para ie

Como teste do novo app do meu tablet para wordpress,  estarei criando mini posts e dicas rápidas. Como primeiro mini post, uma nova velha polemica : hack para ie.

Muitos desenvolvedores, analistas e especialistas começaram acreditando que evoluímos a ponto de não precisar criar os antigos métodos hacks para navegadores, em principal foco o Internet Explorer.
Infelizmente tais profissionais que se dizem tao experientes e atualizados estão errados.
Qualquer livro sobre linguagem e inovacao acaba entrando nesse polemico assunto. A implementacao jsf prime faces por exemplo sugere a utilizacao de tags para identificacao para o ie: if lt ie 9
Alem disso, temos o detalhe de que elementos html e css apresentara diferenca na exibicao quando exibido em diferentes navegadores.

#ficaadica

Básico do vi

Não utilizo o vi no meu dia-a-dia, mas sempre que preciso tenho algumas referências a mão para facilitar.
Consolidado em grande parte das distribuições, o editor vi é uma excelente ferramenta na edição de arquivos e outros. O vi é um editor de textos que possui dois modos de interação com o usuário: o modo comando e o modo edição. Quando iniciado, o vi fica no modo edição, que pode ser acessado pressionando a tecla I ou Insert; já para o modo comando, basta apertar ESC.
Por padrão os que mais utilizo são:

  • O,$ – Início e fim de linha;
  • 1G,G – Início e fim de documento;
  • :q! – Sai do vi sem salvar;
  • :w – Salva o arquivo corrente;
  • :e nomedoarquivo – Abre o arquivo nomedoarquivo;
  • :u – desfaz a última ação;
  • /,? – Busca para frente e para trás;
  • a,A – Entra no modo de inserção na posição atual do cursor.
  • o,O – Adiciona linha e entra no modo de inserção;
  • s,S – Apaga item ou linha e entra no modo de inserção.

Entre várias referências, encontrei um pdf que ajuda bastante quem precisa além do básico.