27 de janeiro de 2015

NoSQL Matters

    O post dessa semana será diferente, em vez de dar exemplos de uso, casos de sucesso ou até mesmo de discutir sobre implementações, vamos chamar a atenção para uma conferência anual chamada NoSQl Matters que, como pode ser inferido do próprio nome, trata de assuntos referentes ao NoSQL, principalmente quanto ao seu uso, importância e apostas e previsões para o futuro.

Fonte: http://2015.nosql-matters.org/par/wp-content/uploads/2014/10/nosqlmatters-gro%C3%9F.png
       A edição de 2015 será em Paris, na França, nos dias 26 e 27 de Fevereiro, existem 3 opções de ingressos para o evento, precificados conforme disposição de conteúdo para cada, os preços e disponibilidades de ingresso podem ser consultados aqui.

    O evento é direcionado para profissionais da área e estudantes que queiram obter mais conhecimento acerca do NoSQL, diversas palestras serão ministradas, a agenda pode ser conferida aqui. Esta será a quarta edição do encontro, abaixo segue link para edições anteriores, onde estão disponíveis palestras e arquivos de mídia apresentados e discutidos nos eventos:
 
Fonte: https://s3.amazonaws.com/lanyrd-image-uploads/cropped-profile-photos/e3a312ba79baec59faa9e4b354d7a7823dfd640c.jpeg

    O evento próximo contará com a presença de diversos palestrantes de empresas bastante conhecidas como : Google, Amazon, Red Hat, Microsoft entre outras.A ideia central desse post é mostrar que o NoSQL está ativo e possui muitos interessados em seu crescimento e constante melhoria, parece ser algo que realmente veio para ficar, dadas suas diversas contribuições a diversos serviços e empresas, como fora ilustrado previamente neste blog.


Referências:
Site oficial do evento NoSql Matters 2015. Disponível em <http://2015.nosql-matters.org>. Acesso em 27/01/2015.

20 de janeiro de 2015

Java + Redis

       Neste tópico será apresentado um pequeno código Java para um cliente Redis. Para que o mesmo funcione é necessário baixar a biblioteca JRedis, disponível aqui. O JRedis é uma biblioteca leve que mapeia comandos nativos do Redis com métodos Java simples.

Fonte: http://app42paas.shephertz.com/wp-content/themes/twentytwelve/images/devcenter/integrate_icons/redis/redis_java.png

       O código abaixo estabelece uma conexão usando Java e a biblioteca JRedis com um servidor Redis em execução na própria máquina, Localhost. Não faz nada em especial, apenas um teste para mostrar a integração do banco em questão com a linguagem Java.
      
Fonte: Base de dados do MVJ-UFS
       Ao baixar o pacote de arquivos que contém a biblioteca JRedis, o usuário notará a presença da pasta "Examples", nela encontram-se mais algumas classes Java que servem como base inicial para aqueles que desejam estudar sobre e até pôr em prática conexões de bases de dados Redis com uma linguagem conhecida como Java. Classes exemplo presentes:

Fonte: Base de dados do MVJ-UFS
        Assim como usando Java, é possível estabelecer conexões com um banco Redis com diversas outras linguagens, há clientes para Ruby, Phyton, PHP e diversos outros. A existência de tamanha variedade de clientes ratifica ainda mais a importância atual do Redis no mundo NoSQL.

Referências:

Java Redis Client For Begineers. Disponível em <http://neopatel.blogspot.ca/2010/07/java-redis-client-for-begineers.html>. Acesso em 20/01/2015.

Redis - Java. Disponível em <http://www.tutorialspoint.com/redis/redis_java.htm>. Acesso em 20/01/2015.

Demo Redis NOSQL Server with Java application for very fast insert write and read. Disponível em <https://www.youtube.com/watch?v=RqbMoMjblVo#t=129>. Acesso em 20/01/2015. 

19 de janeiro de 2015

Estudo de caso: Redis e Pinterest

       O Pinterest é uma famosa rede social de compartilhamento de fotos, afiliado ao Twitter e Facebook, cresceu muito nos últimos anos,  possui aplicativos para ios e também para Android. Apenas no ano de 2012 a empresa cresceu mais do que 1047% no número de usuários e postagens que acessaram o serviço via browser em seus computadores pessoais, já no meio mobile o crescimento foi ainda maior, cerca de 1698%.
Crescimento do Pinterest entre 2006 a 2012. Fonte: http://dstevenwhite.com/wp-content/uploads/2013/02/Pinterest-2006-to-2012.jpg
       O crescimento do sistema trouxe também o aumento da complexidade de sua manutenção, já que praticamente todas as telas da interface realizam ao menos uma consulta para checar se um quadro (onde um usuário reúne publicações no Pinterest) ou um usuário já é seguido. É aí que entra o Redis.

Fonte: http://blog.pivotal.io/wp-content/uploads/2013/07/header-graphic-redis-at-pinterest-150x150.jpg

       Sempre  que um usuário "A" entra no Pinterest, o Redis mantém em background vários tipos de listas que guardam informações necessárias para a melhor experiência do usuário:
  • Uma lista de usuários que "A" segue;
  • Uma lista de quadros (em conjunto com os usuários relacionados) que "A" segue;
  • Uma lista dos seguidores de "A";
  • Uma lista de pessoas que seguem os quadros de "A";
  • Uma lista de quadros que "A" segue;
  • Uma lista de quadros que "A" deixou de seguir, depois de seguir um novo usuário;
  • Os seguidores e não seguidores de cada quadro.
        Cada id de usuário é dividida em 8192 "shards" virtuais, sendo que cada shard roda um banco Redis. Como o Redis é do modo "single trheaded", múltiplos bancos Redis rodam em uma só instância e múltiplas instâncias rodam numa máquina, de modo a aproveitar melhor o uso da CPU. Todas as listas rodam na memória, o Redis usa o serviço Amazon EBS (Elastic Block Store) para salvar o log de todas operações em disco.

       O motivo principal que levou os mantenedores do Pinterest a utilizarem o Redis para esse caso específico foi que o modelo tradicional previamente usado, o MySQL, estava já no limite de suas capacidades, tendo em vista o grande crescimento do número de consultas oriundo do crescimento de usuários e seus respectivos relacionamentos. O uso do Redis garantiu ao Pinterest manter qualidade e disponibilidade de seus serviços.

Referências:

Sobre o Pinterest. Disponível em <https://about.pinterest.com/pt-br>. Acesso em 19/01/2015.
Using Redis at Pinterest for Billions of Relationships. Disponível em <http://blog.pivotal.io/pivotal/case-studies-2/using-redis-at-pinterest-for-billions-of-relationships>. Acesso em 19/01/2015.
Building a Follower Model From Scratch. Disponível em <http://engineering.pinterest.com/post/55272557617/building-a-follower-model-from-scratch>. Acesso em 19/01/2015.

9 de janeiro de 2015

Inserindo e consultando registros em um cluster Cassandra

   Já foi visto como se criar um conexão a um cluster Cassandra em Java, também vimos como criar um keyspace e columns families, agora daremos continuidade ao projeto, aprendendo como inserir um registro e como buscá-lo na base de dados.

   Começaremos incluindo o método inserirUsuario na classe BlogDB, ele terá a função de iniciar uma conexão com o cluster, depois, já com a conexão ativa iremos utilizar a sessão (session) para executarmos o comando CQL de inserção (insert) e, por, fim encerramos a conexão (close), como ilustrado na imagem abaixo. 

Método inserirUsuario da classe BlogDB

   Para consultar esse registro será necessário criar um novo método, chamaremos de buscarUsuario, seu código é parecido com o do método anterior inserirUsuario. O resultado do execute será armazenado em uma variável do tipo ResultSet, após isso serão necessárias iterações para acessar os dados.
Método buscarUsuario da classe BlogDB

    Alteraremos então o código da classe Principal, de modo a chamar inserirUsuario e buscarUsuario, como ilustrado na imagem abaixo.
Método main da classe Principal

   Referência:

   Planeta Cassandra, disponível em <https://cassandra.apache.org/doc/cql/CQL.html>, Acesso em 09 de janeiro de 2015.




Porque o Twitter migrou para o Cassandra?

   Em 2010 o Twitter resolveu migrar sua base de dados do MySQL para uma outra, para tentar solucionar os mais variados tipos de problemas. O maior desses problemas era o crescente volume de dados diário, o número de acessos pulou de 2 para 50 milhões, no período de janeiro de 2009 até janeiro de 2010. Mas porque o Cassandra?

Fonte: http://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Cassandra_logo.svg/2000px-Cassandra_logo.svg.png


   Outras bases de dados foram estudadas para substituir o banco relacional utilizado pelo Twitter, entre elas, as 'concorrentes' do Cassandra como: HBase, Voldemort, MongoDB, MemCacheDB, Redis e HyperTable. Entretanto, para os engenheiros envolvidos no processo, o Cassandra era o mais adequado por apresentar maior escalabilidade, confiabilidade e ser fácil de gerenciar do que as alternativas.

Fonte: http://www.site-seeker.com/wp-content/uploads/twitter-logo.png


   O processo de migração começou pela tabela de status, considerada a parte mais dolorosa, por se tratar da tabela que contém todos os tweets e retweets. Mas a princípio, para minimizar o tempo de inatividade, o Twitter busca implementar novos recursos para utilizar o Cassandra com o MySQL, de maneira a evitar imprevistos. Somente depois de testes o MySQL será definitivamente aposentado do Twitter.

   "Nosso processo para efetuar mudanças importantes na infraestrutura pode ser resumido como 'integre primeiro, depois promova a iteração'" (Ryan King, engenheiro do Twitter).

Fonte: Computer World, Disponível <http://computerworld.com.br/tecnologia/2010/02/23/crescimento-faz-twitter-trocar-o-mysql-pelo-cassandra/>, Acessado em 9 de janeiro de 2015.

Redis - Quem está usando? (Parte 2)

De forma a dar continuidade ao post anterior (Redis - Quem está usando? (Parte 1)), segue mais uma pquena lista de empresas que também fazem uso do Redis.

1 - Flickr
Fonte: http://cdn.firespring.com/images/3cd32354-cddd-48f1-9d6c-3c72f274a74b.jpg
       O Flickr é um conhecido serviço de armazenamento e compartilhamento de imagens. Nessa página um engenheiro que trabalha no Flickr fala sobre determinadas características do serviço, até que toca no nome do Redis, dizendo que o Flickr faz uso de Lists do Redis, por questões de desempenho no manejo de filas.

2 - Stack Overflow

Fonte: http://www.logoeps.net/wp-content/uploads/2013/06/stackoverflow_logo.jpg
 
       Não há como acreditar que haja algum estudante de Sistemas de Informação que não tenha ao menos ouvido falar desse site. Basta uma simples dúvida acerca de programação em determinada linguagem que algum(s) dos resultado(s) encontrado(s) pelo site de buscas certamente será(ão) do stack overflow.

       Quando um usuário levantou o questionamento nesse site acerca do uso de caching por parte do stack overflow,  um membro da equipe do stack ficou bastante empolgado em dizer que usam sim caching, e que o fazem com o Redis como uma camada de caching para toda a rede. Disse ainda que o site trabalha com uma média de 1.300.000 (hum milhão e trezentas mil) chaves em cache no Redis, muitas das quais expiram dentro de alguns minutos de acordo com os acessos do serviço, disse também que o número de chaves em cache cresce à medida em que eles ganham mais confiança no Redis.


3 - Digg

Fonte: http://registroen.com/wp-content/uploads/2014/08/Digg.png
       Agregador de notícias criado em 2004 com o intuito de prover conteúdos diversos, mas que sejam mais específicos para o público de internet, tais como: assuntos relacionados a ciência e tecnologia e também questões políticas. O Redis está presente no Digg nos contadores de eventos de página cumulativos, como pode ser visto aqui e, assim como no stack overflow, é usado no Digg para caching.

       A respeito dos contadores no Digg, são single-threaded, o que torna possível a atualização sequencial dos valores, de acordo com o seguinte site, sem que haja nenhum problema de perda de informações causada por  problemas de comunicação oriundos de processos concorrentes.

Referências:
 Who's using Redis? Disponível em <http://redis.io/topics/whos-using-redis>. Acesso em 09/01/2014.



Criando um keyspace dinamicamente em um cluster Cassandra

   Nesse post iremos falar como se cria um keyspace dinamicamente em uma base de dados Cassandra através de uma aplicação Java, o exemplo utilizado será o mesmo do post anterior.

   Utilizaremos como recurso para essas atividades em um cluster cassandra, o Cassandra Query Language (CQL), que faz analogia ao SQL das bases de dados relacionais.

   O CQL fornece uma API simples para o Cassandra, que tem como função disponibilizar uma camada de abstração para ocultar os detalhes de implementação da estrutura de armazenamento interno, fornecendo sintaxes nativas e outras coleções para codificações comuns, a exemplo de criar keyspaces, criar columns, inserir, consultar, atualizar e imprimir registros. (Clique aqui para saber mais)

   Dando continuidade ao projeto de conexão iremos incluir um atributo session na classe conexão. Esse atributo será responsável por executar as rotinas CQL.

   Ao final do método connect insira a atribuição do closter connection a session, como na figura abaixo.

Classe conexão

  Após isso, é a vez de criar a classe que gerenciará o keypace Nessa classe será criado um atributo final chamado node, ele representará o nó onde está localizado o cluster, um atributo do tipo conexão e dois métodos um costrutor, que irá instanciar o atributo conexão, e um método chamado criar keyspace que como o nome já diz, irá criar o keyspace e a column family, como segue abaixo.

Classe BlogDB

Para testarmos o código utilizaremos a classe principal e alteraremos o código da classe main. Seu código e sua saída esta exibida abaixo.

Código da classe principal pós alteração


Resultado da execução



   O projeto apresentado pode ser encontrado aqui.

   Referência:

   Planeta Cassandra, disponível em <https://cassandra.apache.org/doc/cql/CQL.html>, Acesso em 09 de janeiro de 2015.


Redis - Quem está usando? (Parte 1)

Em diversos posts anteriores foram apresentados o banco de dados NoSQL Redis e também algumas de suas características e curiosidades.

Este post traz agora como curiosidade uma pequena lista de empresas bastante conhecidas por estudantes, profissionais, entusiastas e também por usuários finais de computadores que usam, direta o indiretamente, uma base de dados provida pelo Redis.

1 - Twitter
Fonte: Captura de tela de http://www.infoq.com/presentations/Real-Time-Delivery-Twitter
O site ilustrado na figura acima tem uma apresentação sobre a arquitetura de entrega de mensagens em tempo real do Twitter, numa parte específica do vídeo, como pode ser visualizado na figura acima, o palestrante explica como o Twitter trabalha com o redis.

2 - GitHub

Fonte: http://www.fastly.com/img/customers/casestudy/github_logo.png

Na seguinte página intitulada "Como nós fizemos o GitHub rápido", o autor mostra, dentre outras diversas especificidades, que usa o redis como um banco persistente chave/valor para tratar de diversos tipos de dados, especifica claramente que o usa para informações de roteamento também.

3 - Snapchat (Aplicativo de chat baseado em fotos e vídeos, os "snaps")

Mais informações acerca do Snapchat podem ser conferidas no site oficial. A figura abaixo mostra um usuário do Snapchat exaltando o uso do Redis para armazenamento.

Fonte: https://twitter.com/robustcloud/status/448503100056535040
Referências:
Who's using Redis? Disponível em <http://redis.io/topics/whos-using-redis>. Acesso em 09/01/2014.

Configurando um mini-clone do Twitter com o Redis


Tradicionalmente a comunidade de programação considera que bases de dados do tipo chave/valor seriam para propósitos específicos e que não poderiam substituir uma base de dados relacional para o desenvolvimento de aplicações WEB.
Esse post ilustra como é possível criar e manter um mini-clone do Twitter, uma aplicação WEB, usando Redis e PHP, o Retwis.
Fonte: Base de testes MVJ-UFS



O código-fonte do Retwis está disponível para livre download e distribuição em: https://code.google.com/p/redis/downloads/list.
Os pré-requisitos para se instalar o aplicativo numa máquina são:
- Servidor WEB, como o Apache;
- Servidor Redis;
- Código-fonte do Retwis, que contém também uma biblioteca PHP chamada Predis.
Fonte: Base de testes do MVJ-UFS - Servidor Redis em execução

O seguinte tutorial foi usado para se instalar a aplicação e rodá-la localmente, basta apenas instalar e configurar propriamente o Apache, o servidor redis e então chamar o http://localhost/index.php (sendo este arquivo o inicial do clone do Twitter).
Para aqueles que não desejam se aventurar em configurações locais, há uma versão online e operante do Retwis aqui.

Referências:
Design a Implementation of a Simple Twitter Clone. Disponível em <http://redis.io/topics/twitter-clone>. Acesso em 09/01/2014.