Demorou, mas finalmente
conseguir um tempo para falar um pouco da minha apresentação no
JavaOne 2012 que foi BigData. Com a evolução das aplicações e a
necessidade do ser humano pela informações, mais e mais aplicações
vem surgindo, deixando o homem cada vez mais refém da informação.
Para isso basta lembra-nos da evolução do homem em que num passado
existia muitas pessoas para uma máquina ( como o mainframe), em
seguida uma pessoa por máquina ( o caso do computador pessoal) e nos
tempos atuais em que para cada pessoa possue várias máquinas (
notebook, ultrabook, PC, tablet, smartphone, no futuro óculos,
geladores, etc.). Com tantos aplicativos surgindo as informações
são geradas exponencialmente, com isso a capacidade de gerenciar
tantas informações se torna primordial para as aplicações atuais.
Esse mesmo crescimento de dados acontece nos aplicativos empresariais
com crescimento anual de 60%, se estima que uma empresa com mil
funcionários gera anualmente 1000 terabytes sem falar que essa
quantidade tende a aumentar cinquenta vezes até 2020.
Com o recém surgimento
do bigdata, a primeira dificuldade é encontrar o seu conceito, é
possível vê-los de maneiras totalmente divergentes em cada blog que
se lê, ou seja, se você ler 10 materiais sobre bigdata,
provavelmente cada um trará conceitos diferentes. Dentre as matérias
ao se tirar um mínimo comum se verá que o bigdata na sua raiz se
fala em tratar um grande volume de dados com grande velocidade. No
entanto se repara que essa definição é bastante abstrata pelo
simples fato de que para uma pessoa A, por exemplo, um grande volume
seja um gigabyte e para uma pessoa B um grande volume seja um
terabyte e o mesmo pode acontecer ao se referenciar a velocidade e o
tempo de resposta de uma requisição.
Assim o grande desafio do
bigData é estar administrando um grande volume de dados e minerando
informações em um menor tempo de requisição. Com o grande volume
de dados fazer com que a aplicação cresça a medida que é
necessário é uma ótima estratégia assim uma escalabilidade
vertical ( em que se aumenta o poder do hardware como aumento de
memória e de processamento de uma única máquina) ou horizontal (
em que se aumenta a quantidade de máquina) deve ser analisada.
Apesar de ser mais complexa a escalabilidade horizontal acaba sendo
muito barata sem falar de ser mais fácil de crescer ou diminuir os
recursos por demanda.
Para armazenar as
informações com a escalabilidade horizontal os bancos NOSQL são
uma ótima estratégia, vale lembrar que o banco NOSQL significa não
apenas, not only, e não sql, no sql. Uma diferença entre os bancos
NOSQL e o SQL é que o primeiro possui uma grande variedade de bancos
e cada um com características diferentes. Em termo de arquitetura os
bancos NOSQL podem ser distribuídos ou não, embora sejam mais
populares do tipo distribuído. Sua forma de armazenamento pode ser
apenas memória ou apenas disco rígido ou configurável( vale apena
lembrar que banco apenas na memória são muito rápidos, no entanto
são volúveis, já os somente no HD tem informações permanentes,
porém o I/O é muito alto). Outra características divergentes entre
os bancos NOSQL está na forma do armazenamento que são:
chave-valor, documento, família de coluna e grafos. Os bancos NOSQL
costumam ser muito rápido na leitura e na escrita, no entanto,
possui uma grande deficiência por parte das buscas, normalmente são
dadas apenas pela chave, para isso usar um serviço para terceirizar
o serviço pode ser uma boa ideia, como o framework Lucene.
Mesmo realizando
estratégias de buscas terceirizadas ou buscando pelo id, se a
informação não estiver na memória principal pode haver uma demora
para recuperar essa informação, assim, ter um dispositivos de
acesso rápido pode ser uma melhor opção, com isso o uso do cache.
Ao se optar pelo cache deve-se levar em conta os dois maiores
desafios:
- Ter informação: O ato de esquentar a informação é extremamente importante para esse mecanismos, já que não adianta existir um cache se o mesmo não tenha nenhuma informação. Para isso ele pode ser esquentado de várias formas (ao iniciar uma aplicação, por demanda, por sessão do usuário) que desse ser definido com o aplicativo em questão não existindo uma bala de prata.
- Matar o cache: Para o cache é necessário que exista apenas informações atuais, assim é importante que os dados atuais sejam mortos e trocado por informações mais atuais.
Um outro aspecto no
bigdata, que não é muito tratado, está relacionado na velocidade
da modelagem além da velocidade no desenvolvimento de software. Um
exemplo muito interessante é o twitter que viu muito usuários
usando a hashtag ( o '#' adicionado com uma palavra) e em pouco tempo
teve que realizar pesquisas através dos mesmos.
Assim podemos verificar
que o bigdata não apenas está relacionado apenas na velocidade de
requisição, mas também em desenvolvimento, assim conhecer bem o
negócio além de várias ferramentas poderá ser extremamente
importante. Na linguagem Java conhecer o Java EE 6, muito em breve o
java 7, além do JDK 7 trará velocidade de desenvolvimento,
produtividade e um melhor gerenciamento de memória.
Assim pode-se concluir
que o conceito do BigData é relativamente muito fácil, mesmo sendo
divergente em várias fontes, que é gerenciar um grande volume de
memória em alta velocidade. O mais difícil certamente é chegar
nesse objetivo já que para isso é necessário conhecer uma gama de
ferramentas, frameworks, metologias, tipos de bancos como NOSQL, SQL
e NewSQL, cache, serviço de indexação de buscas, tipos de
escalabilidades, etc. Apesar de ainda ser muito discutida nas
universidades a normalização foi desenvolvida em 1970 ( vale
lembrar que os servidores da época possuíam 16kb de memória
principal e 800kb de armazenamento e os celulares são muitas vezes
mais rápido que estes servidores) ou seja não é certo afirmar que
os aplicativos, os hardwares, as necessidades de hoje são os mesmos
daquela época, assim é entender que esse padrão nem sempre é
válido.

Nenhum comentário:
Postar um comentário