De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Kassiano José Matteussi
Data de Publicação: 21 de outubro de 2010
Resumo. Pode-se observar que o desenvolvimento web vem crescendo exponencialmente em conjunto com a presença de bancos de dados neste ambiente. O modelo relacional, muito famoso no desenvolvimento desktop, foi adaptado para atuar no ambiente web. No entanto, o rápido crescimento e fluxo de dados na internet trouxeram alguns problemas que não ocorriam no antigo ambiente, como por exemplo, flexibilidade, desempenho, escalabilidade e compatibilidade, fatores estes que são essenciais para aplicações na web.
Recentemente, foi criado um novo modelo para armazenamento de dados com foco em sistemas para internet, que ficou conhecido como modelo orientado a documentos. Este por sua vez, apresenta-se como solução para algumas das principais deficiências apresentadas nos modelos relacionais.
Diante deste pretexto, o artigo trás um estudo de uma abordagem prática para a implementação de um protótipo de interface web com PHP para gerenciamento da base de dados CouchDB.
Pode-se observar que o desenvolvimento Web vem crescendo exponencialmente, devido a sua versatilidade e facilidade de uso. Na mesma linha crescem os bancos de dados neste ambiente. O modelo relacional, muito famoso no desenvolvimento desktop, foi adaptado para atuar no ambiente Web, porém o rápido crescimento e fluxo de dados na internet trouxeram alguns problemas que não ocorriam no antigo ambiente, como por exemplo, flexibilidade, desempenho, escalabilidade e compatibilidade, fatores estes que são essenciais para aplicações na Web modernas.
Bancos relacionais possuem boa escalabilidade, mas quando se chega a 100% de uso de um servidor, é necessário o balanceamento de carga para vários servidores, assim batendo de frente com a complexidade do modelo com seu potencial de escala. E quando essa necessidade de balanceamento de carga se torna muito grande, acaba-se prejudicando a viabilidade nas grandes plataformas de desenvolvimento.
O modelo de banco de dados orientado a documento surgiu para contribuir especialmente com o desenvolvimento de sistemas para web, pois combina um modelo de armazenamento de documentos de uma forma intuitiva com um poderoso mecanismo de consulta e facilidades para escalar. Este modelo oferece um novo método para armazenar dados, o que é referido como um modelo de banco de dados orientado a documentos livre de esquema. Ao invés de haver um armazenamento de dados altamente estruturado de um modelo relacional, o CouchDB armazena dados de maneira semi-estruturada.
Sendo assim, percebe-se que o mercado carece de uma ferramenta para auxiliar o gerenciamento destes bancos de dados. Desta forma, no presente artigo será apresentado o estudo para o desenvolvido de uma ferramenta Web com PHP para o gerenciamento de banco de dados CouchDB com o foco em auxiliar na aprendizagem de comunidades acadêmicas e afins, além de fornecer uma ferramenta para contribuir com o trabalho de DBAs no que se refere a gerenciamento de diversas bases de dados orientadas a documentos.
Os bancos de dados neste modelo compreendem uma série de documentos, cada um contendo uma série de campos e valores. Cada documento é independente um do outro e não usam nenhuma restrição quanto a sua estrutura durante a criação. Em vez de um campo de chave primária, cada documento em um banco de dados CouchDB tem um ID único. Esta identificação exclusiva pode ser atribuída pelo usuário ou pelo aplicativo, ou ele pode usar um identificador universalmente exclusivo (UUID); este número aleatório é gerado pelo CouchDB que reduz a chance de duplicar IDs.
Segundo Moraes (2009), a base de dados orientados a documento é diferente. Não existe hierarquia de dados, somente uma coleção de documentos que pode conter virtualmente qualquer espécie de dados . Os documentos não precisam ser necessariamente do mesmo tamanho, pois alguns documentos podem conter detalhes de campos que outros não precisam armazenar. Em outras palavras, você não está condicionado a um esquema de banco de dados .
Diferente dos bancos de dados relacionais, o banco orientado a documentos não grava dados em tabelas em linhas com campos uniformes. Neste banco de dados são inseridos documentos com determinadas características, a cada domínio são inseridos vários campos e esses campos por sua vez podem possuir vários elementos.
De acordo com Bain (2009), podem ser descritas algumas características deste modelo de banco de dados. Podem-se criar bancos diferentes com vários esquemas.
Itens são definidos por chaves e a cada item podem ser adicionados vários atributos;
Em algumas implementações os atributos são todos de um tipo, em outras assumem inteiros, listas e string, entre outros;
Mais algumas características, agora sobre acesso aos dados: os dados são criados, atualizados, e recuperados usando métodos de chamada por API ; toda a aplicação e os dados que a integram a lógica estão contidos no código da aplicação.
CouchDB foi criado em meados de 2005 por Damien Katz, escrito originalmente em C++ e traduzido para Erlang em 2008. Este combina um modelo intuitivo de armazenagem em documentos com um poderoso sistema de pesquisa acessível via RESTful e HTTP/JSON Api .
Lennon (apud OLIVEIRA, 2009, p.19) observa que o termo Couch é um acrônimo para Cluster of Unreliable Commodity Hardware (Conjunto de Hardware Não-Confiáveis), refletindo o objetivo do banco de dados ser extremamente escalável, oferecendo alta disponibilidade e confiabilidade, mesmo quando executando em um hardware que é tipicamente suscetível a falhas .
O couchDB combina um modelo intuitivo de armazenagem em documentos com um poderoso sistema de pesquisa acessível via RESTful e (HTTP/JSON Api) , dentre suas funcionalidades está a replicação bidirecional com detecção de falhas e resolução de conflitos; sua base de dados é baseada em princípios MapReduce e em vez de armazenar dados em linhas e colunas, o CouchDB gerencia uma coleção de documentos, os chamados JSON documents .
Este ainda utiliza um modelo de views baseado em JavaScript para a geração de agregações e filtros, provendo resultados de consultas a partir destes documentos semi-estruturados. Ao invés de armazenar dados em linhas e colunas, o CouchDB gerencia uma coleção de documentos, os chamados JSON documents . O mesmo usa um método de visualização (Design Documents) com funções definidas que agregam dados e filtros para serem computados em paralelo.
Dentre suas funcionalidades estão à replicação bidirecional com detecção de falhas e resolução de conflitos. Essa base de dados é baseada em princípios de redução de código o chamado MapReduce .
Para Anderson (2009), as principais características do CouchDB são:
Após uma analise da interface existente para o gerenciamento do banco de dados CouchDB versão 0.10, chegou-se a conclusão sobre algumas desvantagens apresentadas pela mesma.
Vendo estas deficiências, se torna válido o estudo de uma nova interface que venha a contribuir com o banco de dados CouchDB em desempenho, agilidade e segurança.
Para o desenvolvimento do projeto, a linguagem PHP foi selecionada devido às inúmeras vantagens compostas pela mesma, tais como, sua vasta documentação, facilidade de uso e aprendizagem, bem como sua imensa biblioteca de funções.
Segundo o Niederauer (2004, p.19), PHP significa (um acrônimo recursivo para "PHP: Hypertext Preprocessor ). É uma linguagem de programação de computadores interpretada, livre e muito utilizada para gerar conteúdo dinâmico. Hoje mais de 10 milhões de sites no mundo inteiro utilizam PHP .
O PHP teve inicio por Rasmus Ledorf, que resolveu criar alguns scripts simples para integração com seu site pessoal no ano de 1994. Ledorf queria na verdade somente dar um pouco de vida aos sites estáticos existentes naquele momento, mas ele não imaginava que estava nascendo ali uma das mais poderosas ferramentas para Web, o PHP.
No presente trabalho o uso de Web Service se torna primordial para o funcionamento da base de dados uma vez que todas as manipulações são feitas através de chamadas HTTP, usando RESTful/JSON Api.
A Web Service reúne padrões que asseguram a interoperabilidade; estes podem ser acessados via protocolos padrões da Web, tais como: HTTP, HTTPS, entre outros. Os mesmos podem ser aplicados a diversas plataformas de integração e suportam tanto aplicações ponto a ponto (estruturas mais simples) quanto aplicações distribuídas (estruturas mais complexas).
Figueiredo (2008, p.5) salienta que os Web Services são por vezes denominados de serviços de aplicações, sendo serviços que foram disponibilizados por servidores Web para utilizadores Web ou para programas ligados à Web, sendo os seus fornecedores denominados, na generalidade, de Application Service Providers .
Algumas características que podem ser observadas em um Web Service: uso intenso de XML; grande apoio da industria, tais como: IBM, Microsoft; baseado em padrões abertos, tais como: XML, HTTP, SOAP, WSDL e UDDI; uso de URIs para identificação.
O termo REST (Representacional State Transfer) vem da dissertação de doutorado de Roy Fielding, publicada em 2000.
Para Fielding (apud OLIVEIRA, 2009, p.51), REST é um conjunto de princípios arquiteturais que quando aplicadas como um todo enfatiza a escalabilidade da interação entre componentes para reduzir a latência de interação, garantir segurança e encapsular sistemas legados .
Fielding também cunhou o termo RESTful e os classificou com os seguintes princípios:
Algumas características do RESTful:
O protótipo tem por fim gerenciar bancos de dados CouchDB, bem como criar o controle para acesso por usuário sobre estes bancos, além de suprir algumas deficiências encontradas em sua interface de administração original, o Futon.
Para a preparação do ambiente foram utilizados os seguintes equipamentos:
Também foram usados os seguintes softwares:
É necessário observar alguns itens para o pleno funcionamento da interface, antes de usá-la. São eles:
Abaixo uma das telas correspondentes a interface produzida.
Figura 1: Tela para adicionar documento e atributos |
Nesta Figura 1, o administrador pode cadastrar um documento passando um nome para o documento, um atributo e um valor; as validações são feitas com javascript, codificação pode ser vista na continuidade
$curl = curl_init();//Inicia a seção $aux_conect = "http://".$ip_v.":".$porta_v."/".$bde_v."/".$documento["_id"]; // Remove a chave _id do documento, necessário quando se vai adicionar mais um //atributo ao documento, caso isso não seja feito o banco retorna um erro de //conflito $documento["_id"] = false; $documento = array_filter($documento); curl_setopt($curl, CURLOPT_URL, $url); //Define o tipo do conteúdo das mensagens a serem criadas, no caso text/json curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/json")); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //Definindo a entrada dos dados ao documento curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($documento)); $retorno = curl_exec($curl); curl_close($curl); $retorno = json_decode($retorno); //Quando um documento é criado com sucesso ele retorno a mensagem {ok ,true} //sendo assim faço a verificação abaixo if(isset($retorno->ok) && $retorno->ok == "true") { //retorna menssagem }
Quadro 1: Criando documentos e atributos.
O Quadro 1 corresponde à codificação da criação de documentos e atributos.
Abaixo algumas vantagens correspondentes a nova interface produzida: gerenciamento multiplataforma; gerenciamento distribuído; controle de acesso; segurança; flexibilidade; controle de usuários; controle sob os dados com maior facilidade; controle de níveis de acesso sobre os bancos aos usuários; com adaptações no código pode ser usada para gerenciar outros bancos de dados SGBD NoSQL;
O presente trabalho teve como objetivo realizar um protótipo de interface Web com PHP para gerenciamento de banco de dados CouchDB. Mesmo com algumas dificuldades quanto à documentação e suas funcionalidades durante o desenvolvimento do protótipo, pode-se dizer que ao final se obteve êxito.
O CouchDB é um ótimo banco de dados. É um novo paradigma que esta crescendo rápido, graças a sua consistência. Sua documentação melhora gradativamente junto com seus grupos de discussões e sites com conteúdos e informações sobre as suas funcionalidades.
No presente momento, em que foi produzido este protótipo, pode-se observar que o esquema de funcionamento RESTful é uma ótima abordagem em comparação com o modelo tradicional Client/Server. Esta abordagem se torna válida devido à grande facilidade de se trabalhar com este modelo de Web Services, no desenvolvimento de aplicações para Web.
O PHP teve papel fundamental no desenrolar do processo, pois combina poderosos mecanismos de programação aliados a sua facilidade de uso e aprendizagem, outro sim se pode observar a evolução obtida pelo acadêmico em técnicas de programação no decorrer do desenvolvimento da interface.
Com este protótipo, o controle da aplicação CouchDB fica muito mais fácil, pois combina controle de usuários com gerência sobre os bancos e suas informações, ficando muito semelhante a ferramentas disponíveis para os SGBDR.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários