segunda-feira, 4 de janeiro de 2016

Bancos de Dados noSQL #profMBA


Amigos, este é o meu (#profMBA) segundo post de 2016, continuação do resultado da orientação da monografia de final de curso do GEORGE ASSUNÇÃO GADELHA.


Technorati Tags: ,,, nosql

1. BANCOS DE DADOS NOSQL

1.1 DEFINIÇÃO

Devido às limitações apresentadas pelos SGBDs baseados no modelo relacional, muitas mudanças ocorreram na tentativa de propor modelos alternativos que viriam com o objetivo de solucionar tais limitações. A estruturação dos dados do modelo relacional, que até então era vista como um diferencial passou a ser considerado um problema a ser contornado, pois o volume de dados que era gerado pelas aplicações web foi crescendo de forma exorbitante ao longo do tempo, e esta forma estruturada de armazenamento de dados não se mostra tão eficiente quando trabalhada com uma quantidade de dados muito grande.

Para atender a essa necessidade os projetistas de bancos de dados passaram a desenvolver uma nova estratégia de armazenamento. A ideia era a eliminação ou minimização da estrutura apresentada no modelo relacional. Dessa forma surgiram soluções que não mais apresentavam certas estruturas e regras, passando assim a perder em consistência, porém com ganho em performance. Essas soluções deram origem a uma nova categoria de bancos de dados, o NoSQL.

O termo NoSQL não é tão claro quanto a definição dos bancos de dados não relacionais. Essa falta de precisão tem gerado uma grande confusão em torno dessa categoria de bancos de dados, uma vez que a linguagem SQL não representa as limitações encontradas nos SGBDs relacionais.  Por esse motivo, o termo NoSQL tem sido usado para significar “Not only SQL” ou “Não apenas SQL” como forma de reconhecer também a utilidade do modelo relacional (DIANA, GEROSA 2010).

Os bancos de dados não relacionais tem como objetivo principal promover escalabilidade no armazenamento de grandes volumes de dados. Como não possuem toda a estruturação do modelo relacional podem garantir maior disponibilidade e uma melhora na performance.

É importante destacar que o propósito desses bancos de dados não é substituir o modelo relacional como um todo, mas sim, operar em ambientes em que as limitações do modelo relacional já não o torna tão eficaz, como em casos em que seja necessário uma maior flexibilidade da estruturação de dados (BRITO, 2010).

1.2 ARQUITETURA

A arquitetura de um banco de dados descreve como os dados são organizados e armazenados em um determinado sistema. Ela fornece técnicas para obter um bom tempo de resposta das informações. 

A arquitetura dos bancos NoSQL foi projetada com o intuito de prover alta performance e disponibilidade em suas aplicações. Para conseguir esses dois pontos a arquitetura dos bancos de dados NoSQL é baseada em duas importantes abordagens: A primeira recebe o nome de Sharding, que é o particionamento de uma tabela em mais de um nó. Essa técnica é usada para espalhar os dados de uma tabela por um ou mais nós segundo um critério aleatório qualquer, um nó que contenha nomes de usuários que iniciem com a letra A de uma tabela de usuários, por exemplo.

Sharding consiste em dividir os dados horizontalmente, ou seja, quebrar as tabelas, diminuindo o seu número de linhas e separando-as em ambientes diferentes. Neste ponto todos os dados de uma partição não devem conter referências aos dados de outras partições, sendo que os dados em comum deverão ser replicados entre as bases (SOUSA, Thalles; ROCHA, André, 2010 p.8).

A principal vantagem do sharding está no fato das informações serem divididas em nós separados, caso haja uma falha em algum desses nós o sistema continua funcionando normalmente para todas as operações que não dependam dos dados contidos naquele nó, ou seja, as informações dos demais nós podem continuar a serem acessadas de maneira normal. 

A desvantagem dessa estratégia segundo Diana e Gerosa(2010), é que o banco de dados perde parte da sua capacidade de lidar com restrições dos dados, além de não serem mais capazes de realizar JOINs transparentemente.

A figura 1, a seguir, mostra um exemplo de esquema de sharding com n nós, onde cada um deles armazena nomes de usuário. O primeiro nó armazena nomes que iniciem com as letras A e B, o segundo com C e D e assim por diante.

Figura 1. Esquema de Sharding

wps_clip_image-16534

Fonte: Cléverton, Jardel, Jonatam, Marcos, 2011.

A segunda técnica usada na arquitetura dos bancos de dados não relacionais é a replicação de dados. Essa abordagem, como o nome remete, consiste em replicar os dados, ou seja, armazenar cópias dos dados em outro(s) banco(s). A replicação é dividida em duas arquiteturas:
Master-Slave(mestre-escravo): Cada escrita em banco resulta em X escritas, onde X é o número de slaves. Neste caso temos um banco “Master” que propaga cada write para os bancos “slaves”. Isto aumenta a nossa velocidade de leitura, mas não melhora a capacidade de escrita (SOUSA; ROCHA, 2010).

A figura 2, logo abaixo, mostra um exemplo de banco de dados que utiliza a arquitetura Master-Slave. O banco master replica os dados para o banco slave, com isso as queries(consultas) podem ser executadas não mais em apenas um, mas em dois nós. Quando há sobrecarga desses nós, é criado um novo nó slave que também recebe uma cópia dos dados, aliviando assim o trabalho dos nós anteriores (ALMEIDA; SILVEIRA, 2010). 

Figura 2. Replicação Master-Slave

wps_clip_image-30680

Fonte: Blog Caelum

A replicação Master-Slave é pouco sujeita a inconsistência, pois, como todos os nós possuem uma cópia total dos dados, eles funcionam de maneira independente, ou seja, se um nó de leitura (slave) parar de funcionar, os demais nós continuarão trabalhando de maneira natural, porém se ocorrer uma falha no nó master, as atualizações são interrompidas. Outra vantagem dessa arquitetura de replicação é a diminuição no tempo de leitura dos dados, isso acontece por que as queries podem ser executadas de maneira simultânea.

A desvantagem encontrada nessa abordagem está no tempo de escrita, pois, para garantir a consistência é necessário usar a replicação síncrona, onde todos os nós são mantidos atualizados, e o tempo gasto para a realização deste trabalho é alto. Se usada a replicação assíncrona, onde a atualização dos nós é feita num segundo passo, a consistência passa a ser eventual.

Multi-master: Nessa abordagem não há slaves, porém, pode haver vários nós masters onde esses nós podem receber atualizações e propagar essas atualizações para os demais. Nesse tipo de replicação todos os nós trocam informações entre si.

Figura 3. Replicação Multi-Master

wps_clip_image-32596

Fonte: Blog Caelum

A vantagem dessa abordagem é que o tempo de escrita passa a ser menor, pois como todos os nós se comunicam entre si, a replicação é feita de maneira multi-direcional, ou seja, cada servidor master aceita requisições de alterações de dados (write) de forma que a alteração seja transmitida do servidor original para os outros servidores masters que também devem confirmar a alteração (LEITE, 2010).

É bem verdade que a arquitetura multi-master leva vantagem no tempo de escrita dos dados, quando comparada a master-salve, entretanto, esta possui como desvantagem a complexidade no controle de transações, pois, exige um mecanismo mais elaborado para definir a política de propagação dos dados, visto que este trabalho pode ser feito por qualquer um dos nós.

1.3 CARACTERISTICAS DO NOSQL

1.3.1 Escalabilidade horizontal

Pode ser definida como o aumento de máquinas para a realização do particionamento dos dados em diferentes servidores, ou seja, à medida que os dados aumentam, aumenta-se também o número de servidores onde esses dados serão distribuídos. Com isso, pode-se garantir a eficiência nas operações de leitura e escrita mesmo quando se trabalha com grandes volumes de dados. 

Outra vantagem do escalonamento horizontal, é que com a divisão dos dados em vários servidores, o volume dos dados por servidor é minimizado, pois, conjuntos de dados menores são mais fáceis de serem processados, armazenados ou gerenciados. (SOUSA; ROCHA, 2010).

1.3.2 Consistência eventual

Essa é mais uma característica particular dos bancos de dados NoSQL e recebe esse nome por que nem sempre a consistência é mantida.É de essencial importância para o alcance de altos níveis de escalabilidade nos bancos de dados não relacionais e foi observada a partir do teorema CAP (Consistency, Availability e Partition Tolerence). Esse teorema tem como propriedades a consistência, disponibilidade e tolerância a partição.

Consistência nesse contexto não tem exatamente o mesmo significado da consistência de transações de bancos de dados, mas sim diz respeito à ordem de execução de requisições, e significa que uma leitura de um item após uma escrita desse item deve retornar o novo valor. Disponibilidade é a propriedade de um sistema responder a todas as requisições que chegam a um nó funcionando. Tolerância à partição é a propriedade de um sistema continuar funcionando mesmo quando um problema ocorre na rede dividindo o sistema em duas ou mais partições, o que faz com que nós de uma partição não consigam se comunicar com as outras(DIANA, Mauricio De; Marco A. Gerosa, 2010 p.4).

O teorema CAP afirma que em sistemas distribuídos só é possível garantir, de forma simultânea, duas de suas três propriedades em um determinado momento. Portanto é necessário aos modelos de bancos de dados optarem entre tais propriedades. No caso do modelo não relacional são priorizados a disponibilidade e a tolerância à partição, como consequência disso a consistência nem sempre é garantida.

Esse conceito é estendido para o paradigma chamado BASE (Basically Available, Softstate, Eventual Consistency) que se caracteriza por ser basicamente disponível, ou seja, o sistema parece estar funcionando o tempo todo; em estado leve, o sistema não precisa ser consistente o tempo todo; eventualmente consistente, o sistema torna-se consistente no momento devido (BRITO, 2010).

1.3.3Esquema flexível (Schema-Free)

Consiste na ausência total ou parcial de esquema que define a estrutura dos dados. Por não possuírem essa estrutura, os bancos de dados NoSQL levam vantagem no que diz respeito a disponibilidade e escalabilidade, porém não garantem a integridade dos dados, o que é assegurado no modelo relacional.

1.3.4 Suporte nativo a replicação

Como descrito anteriormente, os bancos de dados NoSQL trabalham com replicação de dados. Essa replicação é feita de forma nativa e pode usar a arquitetura Master-Slave ou a Multi-Master. Com o uso desta técnica, em caso de falha do banco e perca de informação, os dados perdidos podem ser encontrados e recuperados usando a réplica. A vantagem que essa técnica trás consigo é um ganho considerável no tempo de recuperação das informações.

1.3.5 API Simples de acesso aos dados

O foco dos bancos de dados NoSQL, ao contrário do modelo relacional, não está em como os dados estão armazenados ou estruturados, mas sim na recuperação destes dados. Por esse motivo as API’s do modelo NoSQL são desenvolvidas com o propósito de facilitar o acesso aos dados, pois dessa forma poderia garantir maior rapidez e eficiência em suas operações.

1.3.6 Map/Reduce

Geralmente usada para trabalhar com volumes de dados muito grandes, essa técnica permite a manipulação dos dados em vários nós contidos em uma rede. Funciona da seguinte maneira: Na fase Map o problema é dividido em subproblemas que são enviados aos vários nós encontrados ao longo da rede. Na fase Reduce os subproblemas são resolvidos pelos nós filhos e a solução é repassada para seus nós pais. O processo é repetido até que a solução chegue ao nó de origem do problema (nó raiz). 

1.4 CLASSIFICAÇÃO DOS BANCOS DE DADOS NOSQL

É nesta seção que serão apresentados os principais modelos de bancos de dados não relacionais, a estrutura e características de cada, de forma a ser possível identificar em que situação é mais indicado o uso de um, ao invés de outro. 

Os bancos de dados NoSQL possuem várias características em comum entre si, entretanto se diferem quanto ao modelo de dados utilizados. Esses modelos podem ser divididos em quatro tipos principais, são eles:

1.4.1 Modelo chave-valor (key-value)

Esse tipo de banco de dados é o mais simples dos bancos NoSQL e o mais fácil de implementar. Permite a visualização do banco de dados como uma grande tabela de hash composta por um conjunto de chaves, onde cada uma delas está associada a um valor, que pode ser do tipo string ou binário. A figura 4 representa um exemplo de banco orientado ao modelo chave-valor, onde cada chave é um campo com uma determinada informação e cada valor é uma instância para seu campo chave correspondente. Por exemplo: a chave que está no índice 100 (Key100) da tabela, possui sua instância na página 6 (page#:6).

Figura 4: Exemplo modelo chave-valor

wps_clip_image-30922

Fonte: Cléverton, Jardel, Jonatam, Marcos, 2011.

Além de fácil implementação, a manipulação dos dados também não é complexa. Operações simples como get(), usada para retornar um valor, e set(), que permite capturar uma valor, estão disponíveis em modelos chave-valor. Outra vantagem desses bancos é que permitem que a busca dos dados seja feita de maneira rápida pela chave, facilitando o acesso e com isso contribuindo para o aumento da disponibilidade. A desvantagem destes modelos, segundo Lóscio (2011), é que não permite a recuperação de objetos por meio de consultas mais complexas.

1.4.2 Modelo Orientado a colunas

Mais complexo que o chave-valor, o modelo de dados orientado a colunas é baseado em atributos (colunas), diferentemente dos SGBDs relacionais que tem sua orientação em registros (tuplas). O índice de um dado qualquer armazenado neste modelo é composto por três elementos: linha, coluna e timestamp. Onde linha e coluna são identificadas por chaves e o timestamp é usado para diferenciar múltiplas versões de um mesmo dado.

Outra característica particular dos bancos orientados a colunas está na escrita e leitura dos dados. A diferença é que estas operações são feitas de maneira atômica, ou seja, ao executar uma dessas ações todos os valores associados a uma linha são considerados, independente da coluna que está sendo lida ou escrita. Além disso, esses bancos também permitem agrupar as colunas que armazenam o mesmo tipo de informação em um repositório, esta técnica é conhecida como família de colunas (column family) (LÓSCIO, 2011).

Na figura 5, há uma representação de um modelo orientado a coluna. Nesse exemplo temos cinco colunas onde três delas pertencem à família "música" e as outras duas pertencem à família "cantor". Essa junção é um exemplo de uso da técnica "família de colunas", descrita anteriormente. O exemplo mostra ainda o uso do time stamp, pois na linha 001 o cantor "George Gadelha" possui mais de um e-mail. 

Como dito há pouco as operações em bancos que adotam esse modelo de dados são feitas de maneira atômica, portanto se quiséssemos buscar somente o campo "faixa" da linha 002 o retorno seria as informações de todas as colunas pertencentes a tal linha.

Figura 5: Exemplo de modelo orientado a colunas

wps_clip_image-21914

Fonte: Autor próprio

A técnica da família de colunas permite uma vantagem no tempo de leitura dos dados, visto que, estes dados são agrupados em subconjuntos, permitindo dessa forma que haja a necessidade de leitura somente em parte dos dados. A desvantagem em bancos desse tipo é que a escrita é lenta.

1.4.3 Modelo orientado a grafos

Neste caso, o banco de dados pode ser visto como um grande grafo, baseado nos grafos matemáticos, composto por nós, arestas e propriedades. Os nós são pontos no grafo também chamados de vértices, as arestas são usadas para ligar um nó a outro(s), representam o relacionamento entre os vértices, e as propriedades são os atributos contidos em cada vértice.

A figura 6 representa um exemplo de banco de dados orientado a grafo, onde os vértices em amarelo são nomes de pessoas e os vértices azuis são cidades. As arestas representam o relacionamento que cada nó pessoa, tem com os nós cidades. Aresta vermelha significa que a pessoa em questão (de onde sai a aresta) morou na cidade para a qual a aresta aponta; aresta azul significa que a pessoa em questão viajou para a cidade apontada.

Figura 6: Exemplo de modelo orientado a grafo

wps_clip_image-14529

Fonte: Kokay, 2012

Uma consulta interessante para esse exemplo seria: “Qual cidade é a preferida para morar?”. Questões como essa não é tão simples de responder quando se usa o modelo relacional, pois nesse caso seria necessário usar muitas junções aumentando assim a complexidade e consequentemente diminuindo o desempenho da aplicação. 

Portanto, segundo MAMEDE (2012), a principal vantagem de se trabalhar com dados modelados dessa forma é que essa estrutura é ideal para consultas complexas, pois, por meio dos relacionamentos inerentes aos grafos, essas consultas têm um alto ganho em performance. 

1.4.4 Modelo orientado a documentos

Este tipo de banco, como o nome remete, armazena uma coleção de documentos. Um documento pode ser definido, segundo LÓSCIO(2011), como um objeto com um identificador único e um conjunto de campos, que podem ser strings, listas ou documentos aninhados. Esses documentos geralmente estão no formato JSON(Java Script Object Notation). Um documento JSON é uma coleção não ordenada de pares chave/valor.

Este modelo de dados se assemelha com o modelo chave-valor, a diferença é que no modelo chave-valor existe apenas uma única tabela hash com os campos ‘chave’ e ‘valor’ para todo o banco, enquanto no modelo orientado a documentos há uma coleção de documentos JSON onde cada um deles tem um conjunto de campos ‘chave’ e ‘valor’.  Outra diferença é que a busca nesse tipo de banco pode ser feita não somente pela chave, mas também por qualquer registro ou valor que exista no banco.

Um exemplo de documento no formato JSON é representado na figura 7. Trata-se de um post informando sobre eventos, nesse documento há três campos: nome, e-mail e eventos. Os três campos são valorados, onde os dois primeiros são do tipo chave-valor e o ultimo é uma lista ordenada de valores.

Figura 7: Exemplo de documento JSON para bancos orientados a documentos

wps_clip_image-25339

Fonte: Trabalho - NoSQL orientado a documentos

Uma vantagem importante ao se trabalhar com modelos de dados orientados a documentos é que não exige esquema fixo como acontece nos modelos relacionais. Essa flexibilidade permite que adições de campos e atualizações sejam feitas ao banco sem causar problemas a outros documentos. A desvantagem dos BDODs (Bancos de Dados Orientados a Documentos) é que perdem em consistência, pois permitem replicação de dados.

Vale salientar que não se deve considerar um modelo melhor que o outro visto que isso depende muito do ambiente de aplicação. Para entender melhor essa diferença, a tabela 1 faz um comparativo entre eles mostrando quando é mais indicado o uso de cada um deles, além de mostrar os pontos fracos e fortes e os principais bancos de dados.

Tabela 1: Comparação entre modelos de dados não relacionais

 

MODELO DE DADOS

APLICAÇÕES TÍPICAS

PONTOS FORTES

PONTOS FRACOS

PRINCIPAIS BANCOS

Chave-Valor

Cache de conteúdo (Foco em escalar para imensas quantidades de dados).

Pesquisas rápidas

Sem esquema de armazenamento de dados

Redis, Riak

Orientado a Colunas

Sistemas de arquivos distribuídos

Boa distribuição de armazenamento de dados e pesquisas rápidas.

API de baixo nível

Cassandra, HiperTable

Orientado a Grafos

Redes Sociais

Algoritmos gráficos, caminho mais curto, conectividade.

Complexidade

Neo4j, InfoGrid

Orientado a Documentos

Aplicações Web. Similar ao chave-valor, mas o BD sabe o valor.

Tolerantes a dados incompletos. Flexibilidade.

Não possui sintaxe de query padrão.

CouchDB, MongoDB

Fonte: Adaptação própria


Referências

ALMEIDA, Adriano; SILVEIRA, Guilherme.  Quando muitos dados passam a atrapalhar: replicação e sharding, 2010. Disponível em:<http://blog.caelum.com.br/quando-muitos-dados-passam-a-atrapalhar-replicacao-e-sharding/>. Acessado em: 16setembro. 2013

BRITO, Ricardo W. Bancos de Dados NoSQL x SGBDs Relacionais: Análise Comparativa. Disponível em: http://www.infobrasil.inf.br/userfiles/27-05-S4-1-68840-Bancos%20de%20Dados%20NoSQL.pdf. Acessado em: 06, maio. 2013

DIANA, MauricioDe; Marco A. Gerosa. NOSQL na Web 2.0: Um Estudo Comparativo de Bancos Não/Relacionais para Armazenamento de Dados na Web 2.0. Disponível em:. http://www.ime.usp.br/~mdediana/nosql_wtdbd10.pdf. Acessado: 06, maio. 2013

LEITE, Gleidson. Análise Comparativa do Teorema CAP Entre Bancos de Dados NoSQL e Bancos de Dados Relacionais,2010.Disponivel em: <http://www.ffb.edu.br/sites/default/files/tcc-20102-gleidson-sobreira-leite.pdf > Acessado em 17 setembro. 2013

LÓSCIO, Bernadette Farias; OLIVEIRA, Hélio Rodrigues; PONTES, Jonas César de Sousa. NoSQL no desenvolvimento de aplicações Web colaborativas, 2011. Disponível em: http://www.addlabs.uff.br/sbsc_site/SBSC2011_NoSQL.pdf Acessado em: 20setembro. 2013

SOUSA, Thalles; ROCHA, André. NoSQL, 2010. Disponível em: http://www.slideshare.net/andrerochajp/artigo-nosql. Acessado em: 08 maio. 2013

sábado, 2 de janeiro de 2016

Banco de Dados e Modelo Relacional #profMBA


Amigos, este é o meu (#profMBA) primeiro post de 2016. Ele é resultado da orientação da monografia de final de curso do GEORGE ASSUNÇÃO GADELHA.


Technorati Tags: ,,

 

1. SISTEMAS DE BANCO DE DADOS E MODELO RELACIONAL

Este trabalho apresenta o que é um banco de dados, suas características e componentes, com foco no modelo relacional, que tem sido bastante utilizado ao longo das ultimas décadas, e para tal será demonstrado como opera, principais vantagens e limitações.

1.1 SISTEMAS DE BANCOS DE DADOS

Cada vez mais as informações tem se tornado um papel de extrema importância em qualquer organização. A necessidade de guardar essas informações determinou a criação de técnicas e conceitos que permitissem administrar esses dados de maneira eficiente e eficaz. 

Uma solução paliativa encontrada para o armazenamento destes dados foi o sistema de processamento de arquivos, porém estes sistemas apresentavam uma série de deficiências, como: inconsistência e redundância dos dados, dificuldade de acesso, isolamento dos dados, problemas de segurança, entre outros. Essas limitações serviram como motivação para a criação de uma nova solução para o armazenamento das informações, foi então que surgiram os Sistemas de Bancos de Dados (SBDs).

Um SBD ou Sistema de Banco de Dados pode ser definido como um sistema de manutenção de registro, e é composto por quatro componentes principais: dados, hardware, software e usuários. Assim sendo, o SBD é a composição entre a base de dados, a máquina que opera esses dados, os SGBDs e os usuários do banco de dados.

Um sistema de banco de dados é projetado para armazenar grandes volumes de informações de maneira eficiente e segura. Porém, esse armazenamento deve ser feito de forma a proporcionar aos usuários do SBD uma visão abstrata dos dados.  Ou seja, o sistema esconde de seus usuários detalhes do armazenamento dos dados e de como eles são mantidos.

1.2 SISTEMAS GERENCIADORES DE BANCOS DE DADOS (SGBDS)

Todo SBD, como dito anteriormente, é projetado para trabalhar com grandes volumes de informações. Como a quantidade dessas informações cada vez mais cresce nas organizações, surgiu a necessidade de criação de técnicas e ferramentas para manipulá-las. Foi com esse intuito que foram criados os Sistemas Gerenciadores de Bancos de Dados (SGBDs).

Segundo KOKAY (2012), um SGBD é um conjunto de programas que permite armazenar, modificar e extrair dados de uma base de dados. Além disso, um SGBD permite a seus usuários processos de validação, recuperação de falhas, segurança, otimização de consultas, garantia de integridade dos dados, dentre outros.

Os SGBDs gerenciam toda e qualquer ação feita em um banco de dados, tudo que é feito no banco passa antes pelo SGBD. Como esse trabalho de organização e manipulação dos dados é um tanto quanto complexo, foram criados mecanismos que ajudam a definir melhor a estrutura de um banco de dados, esses mecanismos são conhecidos como modelos de dados (MAMEDE, 2012).

Modelar dados significa criar um modelo padrão que explique o funcionamento do banco de dados, facilitando dessa forma o seu entendimento. Os modelos de dados mais conhecidos são, modelo hierárquico, modelo em rede, modelo relacional, que é à base deste trabalho e assunto da próxima seção, e modelo orientados a objetos.

1.2.1 CARACTERISTICAS DO SGBD               

Um SGBD possui diversas características que o tornam seu uso indispensável em qualquer sistema de informação, dentre essas características podemos destacar como principais:

 

Controle de Redundância:

Essa característica serve para avaliar e controlar o armazenamento de dados repetidos. Uma vez que mais de um usuário acessa o banco, estes podem armazenar a mesma informação várias vezes, acarretando assim problemas à base de dados. Esses problemas podem ser caracterizados como: O desperdício de espaço de armazenamento, pois se há redundância, a quantidade de dados é maior e consequentemente o espaço para armazená-los também. Outro problema é a inconsistência dos dados, pois há a possibilidade de alguns arquivos serem atualizados e outros não.

Compartilhamento de dados:

Um SGBD deve permitir que as informações armazenadas na base de dados estejam disponíveis de forma rápida independente do número de usuários que as acessam. Além disso, o compartilhamento de dados deve ser feito de maneira correta e segura. Para isso, é geralmente usado um software para o controle de concorrência.

Esquematização:

Os SGBDs devem seguir um modelo de esquema para armazenar seus relacionamentos, isso facilita o entendimento e aplicação. Com isso a integridade dos dados pode ser garantida com mais facilidade.

Controle de Acesso:

É também função do SGBD provê restrições de acesso para controlar que tipo de usuário pode desempenhar determinada função dentro de um banco de dados, e quais informações podem ser visualizadas. Ocorre na maioria das vezes em sistemas de grande porte devido à grande quantidade de informações.

Backup ou Cópias de Segurança:

A maioria dos SGBDs possui uma cópia de segurança para que o sistema de banco de dados possa ser restaurado em caso de falha. Em caso de falha do sistema durante a execução de uma transação, a cópia de segurança é capaz de recolocar o banco de dados no ponto em que estava antes de iniciada tal transação. Além disso, com as cópias de segurança é possível também restaurar registros indevidamente excluídos.

 

1.3 MODELO RELACIONAL
1.3.1 DEFINIÇÃO

Conceito criado em 1970, por Edgar Frank Codde depois mantido e aprimorado por Chris Date e Hugh Darwen, o modelo relacional introduz os Sistemas Gerenciadores de Bancos de Dados(SGBDs), que são baseados no principio de que todos os dados estão armazenados em tabelas.

Este nome foi escolhido, segundo Silberschatz (1999), devido à semelhança entre os conceitos de tabela de bancos de dados e relação matemática. Uma tabela é constituída por linhas, que também podem ser chamadas de tuplas, onde cada uma dessas linhas representa um relacionamento. Como uma tabela é formada por várias linhas, esta pode ser conceituada como uma coleção de relacionamentos. Já uma relação pode ser definida, ainda segundo Silberschatz (1999), como um subconjunto de um produto cartesiano de uma lista de domínios.

Um banco de dados relacional pode ser definido como uma coleção de tabelas (ou relações), onde cada uma delas possui um nome específico. Segundo Bonfioli (2006), uma relação é constituída por um ou mais atributos (campos), que traduzem o tipo de dados a armazenar. Cada instância do esquema (linha) designa-se por uma tupla (registro).

O modelo relacional possui forma bastante estruturada, além de relacionamentos bastante distintos, qualificando o armazenamento e manipulação dos dados por sua forma organizada e de fácil acesso, oferecendo assim a seus usuários processos de validação, integridade dos dados, recuperação de falhas, segurança, otimização de consultas, dentre outros.  Devido a esses fatores entende-se o motivo do amplo uso do modelo relacional nas ultimas décadas.

2.3.4 ESTRUTURA DOS BANCOS RELACIONAIS

Não por acaso o modelo relacional instalou-se como o primeiro modelo de dados para aplicações comerciais, devido suas características e propriedades, já apresentadas, este modelo tornou-se bem mais vantajoso em relação aos modelos criados até então.

Mesmo descritas e definidas as características dos bancos relacionais, não está tão clara seu funcionamento. Para entender melhor a estrutura desses bancos, considere uma tabela “Aluno” que possui quatro colunas “matricula”, “nome”, “curso” e “cod_curso”. Assim como mostra a figura 2.

wps_clip_image-4193

Figura 2. Exemplo de banco relacional – Relação Aluno

Como já dito, uma tabela representa uma relação, onde cada coluna é chamada de campo. O nome dos campos é chamado de atributos, e para cada atributo há um conjunto de valores permitidos, que é dado o nome de domínio do atributo. Nesse caso, temos a relação “Aluno”, com os atributos “matricula”, “nome”, “curso” e “cod_curso”, o domínio é especifico de cada atributo, para o atributo curso, por exemplo, o domínio é o conjunto de todos os cursos de uma determinada faculdade/universidade.

Qualquer linha da relação “Aluno” é uma 4-tupla visto que esta é uma tabela que contém quatro atributos. Assim sendo, se a tabela possuísse cinco atributos, cada linha seria do tipo 5-tupla e assim por diante.

Agora considere uma segunda relação “Faculdade”, com os atributos “ID” e “curso. Assim como está representado na figura 3.

wps_clip_image-4696

Figura 3: Exemplo de banco relacional – Relação Faculdade

Outro conceito usado nos SGBDs relacionais é a chave. Chave pode ser definida como um conjunto de atributos de uma relação que são utilizados para realizar operações que envolvam atributos e seus valores. As mais conhecidas são a “chave primária” ou “primary key” e a “chave estrangeira” ou “foreing key”

Como um dos conceitos mais básicos do modelo relacional, as chaves representam uma forma simples e eficaz de associação entre as tabelas do banco de dados. A chave primária foi criada com o objetivo de identificar de forma única as tuplas da tabela e ainda de determinar a ordem física dessas tuplas. A chave estrangeira permite uma relação de dependência entre atributos de tabelas distintas, de forma que os valores permitidos em um atributo dependam dos valores existentes em outro atributo. (BRITO, RICARDO, 2012 p.01).

Dessa forma é possível perceber que a primary key da relação “Aluno” é o atributo matrícula, pois nenhum aluno tem o numero de matricula igual, enquanto na relação “Faculdade” a primary key é o atributo ID. Já uma foreing key tem somente na tabela “Aluno”, e é o atributo “cod_curso” que exerce relação de dependência do atributo “ID” da tabela “Faculdade”.

A estrutura do modelo relacional não possui caminho pré-definido para fazer o acesso aos dados e sua estrutura não permite repetição de informação, incapacidade de representar parte da informação e perda de informação (MAMEDE, 2012).

2.3.2 TRANSAÇÕES EM SGBDS RELACIONAIS

Uma transação de acordo com Leite (2012, apud RAMAKRISHNNAN, 2008) são execuções de programas de usuários que são vistas pelos SGBDs como uma série de operações de leitura e escrita. As transações do modelo reacional obedecem a certas propriedades, propriedades estas que também são chamadas pelo acrônimo ACID (Atomicity, Consistency, Isolation, Durability).

Essas propriedades foram criadas com o intuito de provê aos SGBDs relacionais vantagens no que diz respeito à integridade dos dados, controle de concorrência, segurança e recuperação de falhas em relação aos demais modelos. Essas propriedades podem, portanto, serem assim definidas:

 

Atomicidade

Propriedade usada para garantir que após iniciada uma transação esta deverá ser executada até o final. Em caso de falha durante a execução, toda transação é desfeita voltando assim para o seu estado de inicio.

Consistência

Essa propriedade parte do principio que somente pode ser iniciada uma transação relacional se o banco de dados encontrar-se em um estado consistente, ou seja, o banco deverá está funcionando normalmente sem que nenhuma regra de integridade tenha sido violada (MENEZES, 2012).

São exemplos de violação de regras que tornam um banco de dados inconsistente: Chaves duplicadas, campos not null não preenchidos, atributo não chave não possui dependência com chave primária, chave estrangeira não relacionada com chave primária.

Após o término da transação (commit) o banco deverá também está consistente. Em caso de inconsistência ao final da alteração feita no banco de dados, a transação é desfeita (rollback). Essa propriedade garante que a consistência do banco de dados seja mantida o tempo todo.

Isolamento

Essa é a propriedade que garante que uma transação funcione de forma isolada e independente das outras transações. Dessa forma não haverá conflitos entre elas, mesmo que sejam executadas várias transações ao mesmo tempo, e a consistência dos dados é mantida ao final da operação (MENEZES, 2012).

Durabilidade

Essa propriedade garante que após uma determinada transação tenho sido executada com sucesso (após o commit), os efeitos que essa transação trouxe ao banco persistam mesmo em casos onde haja falha no sistema antes que as alterações tenham sido salvas em disco Leite(2012, apud RAMAKRISHNAN, 2008).

 

1.3.3 LINGUAGEM SQL

        Devido a grande quantidade de informações advindas das aplicações web foram criadas muitas linguagens para manipulá-las, porém, essa diversidade de linguagens torna a comunicação entre as aplicações e também entre as bases de dados, um tanto quanto complexa. Para solucionar esse problema seria preciso criar uma linguagem padrão de comunicação entre as bases de dados. Com esse intuito surge o SQL(Structured Query Language), que trás consigo padrões que permitem a realização de operações básicas de forma universal.

        Desenvolvido pela IBM no inicio da década de 70, sua primeira versão carregava o nome de SEQUEL que significa Structured English Query Language ou Linguagem de Consulta Estruturada. Apesar do SQL ter sido criado originalmente pela IBM, muitas outras organizações desenvolveram outros “dialectos” para a linguagem, e por esse motivo surge a necessidade de se adotar um padrão para a linguagem. Esse trabalho de padronização foi realizado pela ANSI e pela ISO, porém mesmo assim o SQL ainda é dividido em muitas extensões, como: Transact-SQL, PL/SQL.

Após várias revisões e agregações de funções, como: expressões regulares de emparelhamento, queries recursivas, gatilhos(triggers), dentre outros, em dezembro de 2011 foi lançada a última versão até então do SQL, que recebeu o nome de SQL 2011.

A linguagem SQL é a base para a utilização de bancos de dados relacionais. Possui comandos básicos que permitem resolver a maioria dos problemas de manutenção do banco de dados, além de provê o controle e segurança das informações. Esses comandos podem ser divididos em quatro grupos principais, são eles:

DDL        (Data Definition Language): Linguagem usada para criar e definir a estrutura de um banco de dados. A tabela 1 apresenta um exemplo de três de seus comandos principais, o CREATE, ALTER e o DROP.

wps_clip_image-5754

Tabela 1: Comandos DDL

 

DML(Data Manipulation Language):  Linguagem de manipulação dos dados. Responsável por realizar comandos como inclusão, alteração e exclusão dos dados. A tabela 2, abaixo, apresenta esses comandos e descreve a função de cada um deles.

wps_clip_image-6021

Tabela 2: Comandos DML

DCL (Data Control Language) – Esse grupo de comandos é responsável por controlar os aspectos de autorização de dados e licenças de usuários autorizados ou não a ver e manipular as informações contidas em um banco de dados.

O grupo DCL possui dois comandos principais: GRANT que é usado para dá autorização e privilégios de manipulação de dados a um usuário, e o REVOKE que retira do usuário os privilégios a ele fornecidos.

DQL (Data Query Language): Linguagem de consulta a dados e obtenção de registros. Possui apenas um único comando, o SELECT. Esse comando busca registro de especificados de uma ou mais tabelas. A figura 1, abaixo, mostra um exemplo de uso do comando SELECT.

wps_clip_image-6537

Figura 1. Comando SELECT

A cláusula SELECT seleciona as colunas “nome” e “departamento” da tabela indicada na cláusula FROM, no caso a tabela “Funcionário”. A cláusula WHERE define uma condição para atender a consulta (query) desejada. Neste caso o retorno para a query é o nome e o departamento de todos os funcionários da tabela “Funcionário” que tenham seu salário maior que 1500R$.

1.3.5 LIMITAÇÕES DO MODELO RELACIONAL

Como a demanda de dados é cada vez maior nas organizações, alcançando o nível de petabytes, como é o caso da Google, Facebook e Twitter. Por esse motivo o modelo relacional passou a apresentar algumas limitações quanto ao volume deste numero muito grande de dados.

Essas limitações apresentadas pelos SGBDs relacionais, de modo geral estão relacionadas à escalabilidade dos dados, visto que, quanto maior a demanda desses dados mais difícil é, para o SGBD, o gerenciamento.

Uma solução paliativa adotada para solucionar esse problema foi a substituição do servidor por outro mais potente (upgrade), entretanto essa solução não foi suficiente para conter o problema, pois como o volume de dados é crescente e em ritmo acelerado, mais cedo ou mais tarde seria preciso uma nova solução.        

Diante desse quadro, a solução, segundo Brito(2010), seria escalar o banco de dados, distribuindo-o em várias máquinas. Entretanto, essa técnica não é algo simples de ser feito nos SGBDs relacionais, isso porque possuem forte estruturação dificultando assim a distribuição e organização dos dados nos vários servidores.

Observando a esses pontos, os desenvolvedores de bancos de dados identificaram que há a necessidade de buscas por novas soluções, partindo desse ponto é que foi criado o modelo não relacional, que concentra seu foco justamente no gerenciamento de volumes de dados muito grandes.


Referencias

Erro Assinador Serpro - ERR_SSL_VERSION_OR_CIPHER_MISMATCH - Windows

Se você já tentou de tudo e sempre aparece o erro de ERR_SSL_VERSION_OR_CIPHER_MISMATCH, siga os passos abaixo e resolva seu problema: Obs...