Sei sulla pagina 1di 11

NoSQL Databases (Grupo 06)

O que é.
O diferencia dos bancos tradicionais.
E quais ferramentas existentes.
Linguages de consultas a dados em big data(AQL, JAQL, CQL, JSON, HQL).
o que são, exemplos de sintaxes e quais ferramentas existentes.

O que é NoSql
Para falarmos de NoSql Database, vamos cohecer primeiramente sua origem, como
começou e quem o trouxe ao mundo do armazenamento de dados, para então
conhecer mais o que é o NoSQL, e qual a utilização, é importante saber algumas
coisas antes.

O termo NoSQL foi primeiramente utilizado em 1998 como o nome de um banco de


dados não relacional de código aberto.

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".

Entre 2006 e 2009 em algumas publicações e eventos organizados que discutiam


bancos de dados Open Source faziam sempre referencia a nomenclatura NoSql,
com a intensão de retirar a referencia aos Banco de Dados, faziam referencia aos
Bancos relacionais mais conhecidos e que utilizam nesessáriamente SQL, como MS
SQL, My Sql, ProstegreSQL, Oracle Pl/Sql e etc... então esse nome popularizou se
para os BD´s não relacionais e ficou como o conhecemos hoje, NOSQL.

O grande aumento de informações geradas pela WEB, Redes Sociais, Aparelhos


móveis, maior numero de pessoas conectadas a rede gerou maior necessidade de
armazenamento e processamento rápido e etc, gerando o efeito chamado de
Escalabilidade.

O que o diferencia dos bancos tradicionais.

Os BD´s relacionais, atendem a Escalabilidade, porém quanto maior o for, maior


custo de armazenamento, refletindo em melhores processadores, maquinas e
servidores, que geralmente são especificos e consequentemente exige mais mão de
obra especializada e manutenção, isso tudo vai custar mais, principalmente com
profissionais especialisados em BD e Fornecedores de equipamentos.

Bancos de dados NoSQL são bancos de dados não relacionais, otimizados para
performance escalável e modelos de dados sem esquema. São amplamente
reconhecidos por sua facilidade de desenvolvimento, baixa latência e resiliência,
porém oferecem vantagens e desvantagens diferentes.
Nos RDBMSs, as consultas de dados são flexíveis, mas têm um custo relativamente
alto e não escalam com facilidade em situações de grande volume de tráfego. Em
um banco de dados NoSQL, há formas limitadas de consultar dados com eficiência.
As demais formas de consulta podem apresentar alto custo e baixa performance.

BD´s NoSql, usam diversos modelos de dados, incluindo dados colunares,


documentos, gráficos e armazenamento de pares chave-valor na memória.

Já os não relacionais, permitem uma escalabilidade mais barata e menos


trabalhosa, pois não exigem máquinas extremamente poderosas e sua facilidade de
manutenção permite que um número menor de profissionais seja necessário.

Frente a isso, os bancos de dados NoSQL, vão ficando mais populares entre as
grandes empresas pois reúnem ainda as características de poder trabalhar com
dados semi-estruturados ou crus vindos de diversas origens (arquivos de log,
web-sites, arquivos multimídia, redes sociais, etc...).

Caracteristicas:

 Utiliza de processameto paralelo.

 Distribuição em escala Global.

 Trabalham no esquema Key/Value (chave/valor) para armazenamento de


dados indexados por chave.

Quadro comparativo

Bancos de dados relacionais Bancos de dados NoSQL


Normalmente, os bancos de dados NoSQL não
O modelo relacional normaliza dados em
aplicam um esquema. Geralmente, uma chave de
tabelas, compostas por linhas e colunas.
Modelo de partição é usada para recuperar valores,
Um esquema define estritamente tabelas,
dados conjuntos de colunas ou documentos
colunas, índices, relações entre tabelas e
semiestruturados JSON, XML ou outros que
outros elementos do banco de dados.
contenham atributos de itens relacionados.
Os RDBMSs tradicionais oferecem
suporte às propriedades ACID de um
banco de dados relacional: atomicidade, Normalmente, os bancos de dados NoSQL
consistência, isolamento e resiliência. substituem algumas propriedades ACID de
Atomicidade significa “tudo ou nada”, ou RDBMSs tradicionais por um modelo de dados
seja, uma transação é executada mais flexível com escalabilidade horizontal. Essas
integralmente ou não. Consistência características fazem dos bancos de dados
Propriedades significa que quando uma transação é NoSQL uma excelente opção em situações
ACID confirmada, os dados devem estar em quando RDBMSs tradicionais enfrentam desafios
conformidade com o esquema do banco de arquitetura e precisam superar uma
de dados. Isolamento exige que as combinação de fatores como gargalos de
transações simultâneas sejam executadas performance, escalabilidade, complexidade
separadas uma da outra. Resiliência é a operacional e custos crescentes de administração
capacidade de se recuperar de uma falha e suporte.
do sistema ou falta de energia inesperada
para o último estado conhecido.
O desempenho normalmente depende do
Desempenho geralmente é uma função do
subsistema do disco. A otimização de
tamanho do cluster do hardware subjacente, da
Performance consultas, índices e estrutura de tabela é
latência de rede e da aplicação que faz a
necessária para alcançar máximo
chamada.
desempenho.
Escalabilidade vertical mais fácil com
Projetado para escalabilidade horizontal usando
hardware mais rápido. Outros
clusters distribuídos de hardware de baixo custo
Escala investimentos são necessários para que
para aumentar o throughput sem aumentar a
tabelas relacionais abranjam um sistema
latência.
distribuído.
As APIs baseadas em objetos permitem que
As solicitações para armazenar e
desenvolvedores de aplicativos armazenem e
recuperar dados são comunicadas usando
restaurem facilmente estruturas de dados na
consultas compatíveis com uma
memória. As chaves de partição permitem que os
APIs Structured Query Language (SQL –
aplicativos procurem pares de chave-valor,
Linguagem de consultas estruturadas).
conjuntos de colunas ou documentos
Essas consultas são analisadas e
semiestruturados contendo objetos e atributos de
executadas pelos RDBMSs.
aplicativos serializados.

Os bancos de dados SQL normalmente Os bancos de dados NoSQL normalmente


oferecem um rico conjunto de ferramentas oferecem ferramentas para gerenciar clusters e
Ferramentas
para simplificar o desenvolvimento de escalabilidade. As aplicações são a interface
aplicações orientadas ao banco de dados. principal com os dados subjacentes.

Como Funciona BD NoSql

Os sistemas de banco de dados NoSQL usam diversos modelos de gerenciamento


dados, como armazenamento de pares chave-valor na memória, modelos de dados
gráficos e armazenamento de documentos. Esses tipos de banco de dados são
otimizados para aplicativos que exigem modelos de dados de grande volume de
dados, baixa latência e flexibilidade. Esses requisitos são atendidos mediante o
relaxamento de algumas restrições de consistência de dados dos bancos de dados
relacionais tradicionais.

Alguns exemplos de quando usar NoSQL


Logging/Arquivamento. Ferramentas de Log-mining vêm a calhar porque elas
conseguem acessar logs através de servidores, relacioná-los e analisá-los..
Insight em computação social. Muitas empresas hoje forneceram a seus usuários
a habilidade de atuar na computação social através de fóruns de mensagens blogs
etc.
Integração de feed de dados externos. Muitas empresas precisam integrar os
dados oriundos de seus parceiros. Mesmo se as duas partes conduzirem várias
discussões e negociações, as empresas têm pouco controle sobre o formato dos
dados que chegam a elas. Além disso, existem muitas situações em que esses
formatos mudam muito frequentemente – baseado na mudança das necessidades
de negócios dos parceiros.
Sistemas de processamento de pedidos Front-end. Hoje, o volume de pedidos,
aplicações e serviços flutuando através de diferentes canais para comerciantes,
banqueiros e seguradoras, fornecedores de entretenimento, logística etc é enorme.
Esses pedidos precisam ser capturados sem nenhum interrupção sempre que um
usuário final faz uma transação de qualquer parte do mundo. Depois disso, um
sistema de reconciliação tipicamente os atualiza para sistemas de back-end, ao
mesmo tempo que atualiza o usuário final com o seu status.
Serviço de gerenciamento de conteúdo empresarial. O gerenciamento de
conteúdo agora é utilizado através de diferentes grupos funcionais da empresa,
como RH ou vendas. O desafio é congregar grupos diferentes utilizando estruturas
diferentes de metadados em um serviço comum de gerenciamento de conteúdo.
Estatísticas/análises em tempo real. Às vezes, é necessário usar o banco de
dados como uma maneira de rastrear métricas de performance em tempo real para
websites (visualizações de páginas, visitas únicas etc).
Ferramentas como o Google Analytics são ótimas, mas não são em tempo real – às
vezes, é util construir um sistema secundário que fornece estatísticas em tempo
real. Outras alterativas, como monitoramento de tráfego 24/7, são uma boa opção
também.

Ferramentas existentes.

Linguages de consultas a dados em big data


AQL, JAQL, CQL, JSON, HQL(o que são, exemplos de sintaxes e quais
ferramentas existentes).

Bancos de dados NoSQL não fornecem uma linguagem query declarativa de alto
nível como o SQL para evitar tempo extra em processamento. Em vez disso,
executar o querying nesse banco de dados é um modelo de dados específico.
Muitas das plataformas NoSQL permitem interfaces RESTful nos dados, enquanto
outras oferecem query APIs.

AQL:

AQL é principalmente uma linguagem declarativa, significando que a consulta


expressa qual resultado deve ser alcançado, mas não como ele deve ser alcançado.
A AQL pretende ser legível por humanos, e portanto, usa palavras-chave do idioma
inglês. Outro objetivo de projeto da AQL foi a independência do cliente, o que
significa que a linguagem e a sintaxe são as mesmas para todos os clientes,
independentemente da linguagem de programação que os clientes possam usar.
Outros objetivos de design da AQL foram o suporte a padrões de consulta
complexas e os diferentes modelos de dados que o DB oferece.
Em seu propósito, a AQL é similar a SQL (linguagem de consulta estruturada). AQL
suporta leitura e modificação de coleções de dados, mas não suporta operações de
definições de dados como a criação e exclusção de bancos de dados, coleções e
indíces. É uma linguagem de manipulação de dados (DML) pura, não uma
linguagem de definição de dados (DDL) ou linguagem de controle de dados (DCL).

A sintaxe das consultas AQL são diferentes das SQL, mesmo que algumas
palavras-chave sejam as mesmas. No entando, a AQL deve ser fácil de entender
para qualquer pessoa com um pouco de experiência com SQL.

Banco de Dados que utiliza linguagem AQL é o ArangoDB.

Exemplo das principais funções utilizadas na linguagen AQL.

 FOR: array iteration


 RETURN: results projection
 FILTER: results filtering
 SORT: result sorting
 LIMIT: result slicing
 LET: variable assignment
 COLLECT: result grouping
 INSERT: insertion of new documents
 UPDATE: (partial) update of existing documents
 REPLACE: replacement of existing documents
 REMOVE: removal of existing documents
 UPSERT: insertion or update of existing documents

Syntax:

Consulta:
1 - RETURN DOCUMENT("users/phil");

2 - FOR doc IN users FILTER doc._key == "phil" RETURN doc;

Insert:
1-
INSERT {
firstName: "Anna",
name: "Pavlova",
profession: "artist"
} IN users

Update:
1 –
UPDATE "PhilCarpenter" WITH {
status: "active",
location: "Beijing"
} IN users

Junção das funções


1 -
FOR i IN 1..100
INSERT { value: i } IN test
RETURN NEW
2 -
FOR u IN users
FILTER u.status == "deleted"
REMOVE u IN users
RETURN OLD

3 –
FOR u IN users
FILTER u.status == "not active"
UPDATE u WITH { status: "inactive" } IN users
RETURN NEW

JAQL

Jaql é uma linguagem de consultas desenvolvida para JavaScript Object Notation


(JSON), um formato de dados popular por causa de sua simplicidade e flexibilidade
de modelagem. A JSON é uma maneira simples, mas flexível de representar os
dados que variam de dados simples a dados XML semiestruturados. A Jaql é usada
principalmente para analisar dados semiestruturados de grande escala. E é uma
linguagem de consulta declarativa e funcional que regrava as consultas de alto
nível, quando adequado, em uma consulta de baixo nível que consiste de tarefas do
MapReduce que são avaliadas usando o projeto Apache Hadoop. Os principais
recursos incluem a extensibilidade e o paralelismo de usuários. A Jaql consiste de
uma linguagem de script e um compilador, bem como um componente de tempo de
execução. Ela consegue realizar um processo que não tem qualquer esquema ou
que tem apenas um esquema parcial. No entanto, a Jaql também pode explorar as
informações de esquemas rígidos, quando disponíveis, para verificação de tipos e
um melhor desempenho. O fragmento a seguir da imagem mostra uma amostra de
documento de JSON.

[
{ id: 10,
name: "Joe Smith",
email: "JSmith@email.com",
zip: 85150
},
{ id: 20,
name: "Alice Jones",
email: "AJones@email.com",
zip: 82116
}
]
Amostra de documento de JSON

A Jaql usa um modelo de dados muito simples, um valor de JDM (Modelo de Dados
de Jaql) que é um átomo, uma matriz ou um registro. Os tipos atômicos mais
comuns são suportados, incluindo sequências, números, valores nulos e datas. As
matrizes e registros são tipos compostos que podem ser aninhados de modo
arbitrário. De modo mais detalhado, uma matriz é uma coleção ordenada de valores
que pode ser usada para modelar as estruturadas de dados como vetores, listas,
conjuntos ou pacotes. Um registro é uma coleção não ordenada de pares de valores
de nomes que pode modelar estruturas, dicionários e mapas. Apesar de sua
simplicidade, o JDM é bastante flexível. Ele permite que a Jaql opere com uma
variedade de diferentes representações de dados para entrada e saída, incluindo
arquivos de texto delimitado, arquivos de JSON, arquivos binários, Arquivos de
Sequência da Hardtop, bancos de dados relacionais, armazenamentos de valores
de chave ou documentos XML. As funções são valores de primeira classe na Jaql.
Elas podem ser designadas a uma variável e têm alta ordem, podendo ser passadas
como parâmetros ou usadas como um valor de retorno. As funções são o principal
ingrediente para a possibilidade de reutilização, já que qualquer expressão de Jaql
pode ser contida em uma função e que uma função pode ser parametrizada em
maneiras poderosas. A próxima lista é um exemplo de um script de Jaql que
consiste de uma sequência de operadores.

Sintaxe JAQL

import myrecord;
countFields = fn(records) (
records
-> transform myrecord::names($)
-> expand
-> group by fName = $ as occurrences
into { name: fName, num: count(occurrences) }
);
read(hdfs("docs.dat"))
-> countFields()
-> write(hdfs("fields.dat"));
JAQL - Script de Jaql que consiste de uma sequência de operadores.

Interpretador do JAQL: MapReduce


Banco de Dados Apache Hadoop.

CQL

CQL é a linguagem interpretada pelo BD Cassandra, é uma linguagem muito similar


ao SQL, por isso tem se uma grande facilidade em seu entendimento, veja abaixo
que a sintaxe é bem similar, é utilizada para as consultas e processos desse banco
não relacional, que também se difere dos BD´s relacionais como temos vistos.
Cassandra está entre os principais bancos colunares, se não o principal deles, este
BD não tem nenhum conceito de integridade referencial, e, portanto, não tem noção
de join. Em um banco de dados relacional, você pode especificar as chaves
estrangeiras em uma tabela de referência a chave primária de um registro em outra
tabela. Mas Cassandra não se aplicar isso. Ele ainda é um requisito do projeto
comum para armazenar IDs relativas a outras entidades em suas tabelas, mas as
operações tais como exclusões em cascata não estão disponíveis.
O banco de dados Apache Cassandra aparece como décimo banco de dados mais
utilizado pelo site DB-Engines na categoria geral e em primeiro lugar na categoria
de bancos de dados colunares.
É largamente utilizado em aplicações de missão crítica onde a segurança e
disponibilidade dos dados são fatores críticos junto com baixíssima latência para
inserção e acesso de dados.

Sintax CQL
SELECT * FROM MyTable;

UPDATE MyTable

SET SomeColumn = 'SomeValue'

WHERE columnName = B70DE1D0-9908-4AE3-BE34-5573E5B09F14;

CREATE TABLE test (

Foo int PRIMARY KEY,

"Bar" int

);

Banco de Dados Cassandra conforme dito anteriormente.

JSON

JSON é basicamente um formato leve de troca de informações/dados entre


sistemas. Mas JSON significa JavaScript Object Notation, ou seja, só posso usar
com JavaScript correto? Na verdade não e alguns ainda caem nesta armadilha.
O JSON além de ser um formato leve para troca de dados é também muito simples
de ler. Mas quando dizemos que algo é simples, é interessante compará-lo com
algo mais complexo para entendermos tal simplicidade não é? Neste caso podemos
comparar o JSON com o formato XML.

Diferença entre XML e JSON.


XML:

<id>1</id>

<nome>Alexandre Gama</nome>

<endereco> R. Qualquer</endereco>

JSON:

{"id":1,"nome":"Alexandre Gama", "endereco":"R. Qualquer"}

Visivelmente podemos ver a diferença na facilidade entre um e outro, embora nçao


seja apenas essa a diferença.

Vejamos as vantagens do Json.

 Leitura mais simples


 Analisador(parsing) mais fácil
 JSON suporta objetos! Sim, ele é tipado!
 Velocidade maior na execução e transporte de dados
 Arquivo com tamanho reduzido
 Quem utiliza? Google, Facebook, Yahoo!, Twitter...

HQL

O Hibernate Query Language (HQL) é uma linguagem de consulta orientada a


objetos, muito parecida com o SQL, mas ao invés de efetuar operações nas tabelas
e colunas da base de dados, o HQL trabalha com objetos persistentes e suas
propriedades, ou seja, classes e propriedades das classes. O HQL inspirou a
criação da JPQL (Java Persistence Query Language) que faz parte da especificação
oficial da JPA. Quem tem curiosidade para ver a gramática do HQL pode baixar o
Hibernate e pesquisar no diretório "grammar" toda a gramática do HQL que é
definida como uma gramática ANTLR.

A HQL tem sua própria sintaxe e gramática sendo escritas como strings ao contrário
da API Criteria do Hibernate que tem uma forma de uma API convencional do Java.
As consultas HQL são traduzidas pelo Hibernate em consultas SQL e, além disso, o
Hibernate também provê uma API que permite consultas SQL diretamente.

Uma grande vantagem da HQL é que ela é bastante fácil de ser utilizada e muito
intuitiva. O uso da HQL é sempre bastante recomendada para evitarmos problemas
de portabilidade e principalmente termos como vantagem a geração do SQL por
parte do Hibernate que é feito da melhor forma e mais otimizada além também de
utilizar as estratégias de cache que o Hibernate cria.

Uma dica muito importante é no caso de encontrarmos problemas de performance,


nesse caso o recomendado é tentarmos sempre otimizar primeiramente o HQL e
somente depois tentar utilizar um SQL nativo. É importante lembrar que o Hibernate
provê informações estatísticas através do JMX MBean que pode ser utilizado para
análises de performance do Hibernate. Estas estatísticas também analisam como
está a performance do cache.

Sintaxe:
O HQL basicamente utiliza as operações Select, Insert Update e Delete, exemplos
abaixo.

UPDATE [VERSIONED] [FROM] path [[AS] alias] [, ...]

SET property = value [, ...]

[WHERE logicalExpression];

DELETE [FROM] path [[AS] alias] [WHERE logicalExpression];

INSERT INTO path ( property [, ...]) select…;

[SELECT [DISTINCT] property [, ...]] FROM path [[AS] alias] [, ...] [FETCH
ALL PROPERTIES]
WHERE logicalExpression

GROUP BY property [, ...]

HAVING logicalExpression

ORDER BY property [ASC | DESC] [, ...]

É utilizado pelo framework Hibernate.

O Hibernate é um framework para o mapeamento objeto-relacional escrito na


linguagem Java, mas também é disponível em .Net com o nome NHibernate. Este
framework facilita o mapeamento dos atributos entre uma base tradicional de dados
relacionais e o modelo objeto de uma aplicação, mediante o uso de arquivos (XML)
ou anotações Java (veja Annotation (java)).

Links para pesquisa:

Refencias ao NoSql e conceitos.

https://www.devmedia.com.br/introducao-aos-bancos-de-dados-nosql/26044

https://aws.amazon.com/pt/nosql/

https://imasters.com.br/artigo/21781/banco-de-dados/escolhendo--a-ferramenta-
certa-para-o-banco-de-dados-nosql/

https://imasters.com.br/artigo/21781/banco-de-dados/escolhendo--a-ferramenta-
certa-para-o-banco-de-dados-nosql/

Linguagem AQL e Arango DB.

https://docs.arangodb.com/3.0/AQL/

Linguagem JAQL

https://imasters.com.br/artigo/24486/software-livre/utilize-linguagens-parecidas-com-
a-sql-para-a-estrutura-do-mapreduce/?trace=1519021197&source=single

Linguagem CQL

https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/introTOC.html

https://imasters.com.br/noticia/atualizacao-do-cassandra-ganha-batches-atomicos-
nos-virtuais-e-melhorias-na-cql/?trace=824205206&source=news-search

Linguagem JSON

https://www.devmedia.com.br/json-tutorial/25275
Linguagem HQL

https://www.devmedia.com.br/introducao-ao-hibernate-query-language-hql/29581

Potrebbero piacerti anche