CouchDB
 sql >> Base de Dados >  >> NoSQL >> CouchDB

Introdução ao CouchDB


O NoSQL tem sido um dos tópicos mais comentados nos últimos dois meses. Este tutorial apresentará o CouchDB, uma implementação NoSQL e ensinará como começar a usar a plataforma.


O que é NoSQL?


NoSQL é livre de esquema - você não precisa decidir a estrutura antecipadamente.

NoSQL [não apenas SQL ] é um movimento em direção a repositórios de documentos que não fazem uso do modelo relacional. A mudança de paradigma fundamental está na maneira como eles armazenam dados. Por exemplo, quando você precisa armazenar dados sobre uma fatura, no RDBMS você precisa destilar essas informações em tabelas e, em seguida, usar uma linguagem do lado do servidor para transformar esses dados de volta em objetos da vida real. Por outro lado, no NoSQL, você apenas armazena a fatura. O NoSQL é livre de esquema, o que significa que você não precisa projetar suas tabelas e estruturar antecipadamente - você pode simplesmente começar a armazenar novos valores.

Continuando o exemplo da fatura, algumas faturas podem incluir um número de IVA, outras não. Em um RDBMS, você precisaria dizer à sua tabela para primeiro aceitar um número de IVA e, em seguida, que poderia ser nulo. No NoSQL, no entanto, você pode apenas armazenar faturas com ou sem número de IVA – não há esquema. Tenha em mente que o NoSQL não é uma bala de prata. Se seus dados são realmente relacionais, manter seu RDBMS seria a escolha certa.

Consultando bancos de dados NoSQL


MapReducing tem benefícios sobre consultas SQL porque a tarefa map/reduce pode ser distribuída entre vários nós, algo que não é possível em RDBMS.

Os bancos de dados NoSQL usam map/reduce para consultar e indexar o banco de dados. No RDBMS, você executa uma consulta juntando várias tabelas para primeiro criar um pool de dados e, em seguida, a consulta é executada criando um conjunto de resultados, um subconjunto dos dados gerais. No NoSQL, você usa map/reduce para criar uma 'visualização' (semelhante a um conjunto de resultados) essa visualização é um subconjunto dos dados gerais.

Map é essencialmente extrair dados e reduzir, agregação de dados. Quanto mais familiarizado você estiver com o RDBMS, mais difícil será a compreensão de map/reduce. O MapReducing beneficia as consultas SQL porque a tarefa map/reduce pode ser distribuída entre vários nós, algo que não é possível no RDBMS. Adicionar um novo registro ao banco de dados nem sempre constitui a tarefa de mapear/reduzir sendo completamente executada novamente.

Apresentando o CouchDB


Alguns fatos sobre o CouchDB que você deve saber:
  • CouchDB é um banco de dados orientado a documentos JSON escrito em Erlang.
  • É um banco de dados altamente simultâneo projetado para ser facilmente replicável, horizontalmente, em vários dispositivos e ser tolerante a falhas.
  • Faz parte da geração NoSQL de bancos de dados.
  • É um projeto de fundação Apache de código aberto.
  • Permite que os aplicativos armazenem documentos JSON por meio de sua interface RESTful.
  • Faz uso de map/reduce para indexar e consultar o banco de dados.

Principais vantagens do CouchDB

  • Documentos JSON - Tudo armazenado no CouchDB se resume a um documento JSON.
  • Interface RESTful - Da criação à replicação e inserção de dados, todas as tarefas de gerenciamento e dados no CouchDB podem ser feitas via HTTP.
  • Replicação N-Master - Você pode usar uma quantidade ilimitada de 'mestres', criando algumas topologias de replicação muito interessantes.
  • Criado para off-line - O CouchDB pode replicar para dispositivos (como telefones Android) que podem ficar offline e lidar com a sincronização de dados para você quando o dispositivo estiver online novamente.
  • Filtros de replicação - Você pode filtrar com precisão os dados que deseja replicar para diferentes nós.

Juntando tudo


CouchDB é um banco de dados projetado para rodar na internet de hoje.

O CouchDB permite que você escreva um aplicativo do lado do cliente que fale diretamente com o Couch sem a necessidade de uma camada intermediária do lado do servidor, reduzindo significativamente o tempo de desenvolvimento. Com o CouchDB, você pode lidar facilmente com a demanda adicionando mais nós de replicação com facilidade. O CouchDB permite replicar o banco de dados para seu cliente e com filtros você pode até replicar os dados desse usuário específico.

Ter o banco de dados armazenado localmente significa que seu aplicativo do lado do cliente pode ser executado com quase nenhuma latência. O CouchDB cuidará da replicação para a nuvem para você. Seus usuários podem acessar suas faturas no celular e fazer alterações sem latência perceptível, tudo isso enquanto estiverem offline. Quando uma conexão estiver presente e utilizável, o CouchDB replicará automaticamente essas alterações para seu CouchDB na nuvem.

O CouchDB é um banco de dados projetado para ser executado na Internet de hoje para aplicativos semelhantes a desktops e dispositivos conectados por meio dos quais acessamos a Internet.

Etapa 1 - Instalando o CouchDB


A maneira mais fácil de colocar o CouchDB em funcionamento em seu sistema é ir ao CouchOne e fazer o download de uma distribuição do CouchDB para o seu sistema operacional -- OSX no meu caso. Baixe o zip, extraia-o e solte o CouchDBX na minha pasta de aplicativos (instruções para outros sistemas operacionais no CouchOne).

Por fim, abra o CouchDBX.

Etapa 2 - Bem-vindo ao Futon


Depois que o CouchDB for iniciado, você deverá ver o painel de controle do Futon no aplicativo CouchDBX. Caso não consiga, você pode acessar o Futon pelo seu navegador. Observando o log, o CouchDBX nos diz que o CouchDB foi iniciado em http://127.0.0.1:5984/ (pode ser diferente no seu sistema). Abra um navegador e vá para http://127.0.0.1:5984/_utils/ e você deve ver Futon.

Ao longo do restante deste tutorial, usarei o Futon no Firefox. Também terei o Firebug e a visualização do console abertos para ver todas as solicitações HTTP que o Futon está enviando nos bastidores. Isso é útil, pois seu aplicativo pode fazer tudo o que o Futon está fazendo. Vamos em frente e criar um banco de dados chamado mycouchshop .

Plugin jQuery do CouchDB


Na verdade, o Futon está usando um plugin jQuery para interagir com o CouchDB. Você pode ver esse plug-in em http://127.0.0.1:5984/_utils/script/jquery.couch.js (lembre-se que sua porta pode ser diferente). Isso fornece um ótimo exemplo de interação com o CouchDB.

Etapa 3 - Usuários no CouchDB


O CouchDB, por padrão, é completamente aberto, dando a cada usuário direitos de administrador para a instância e todos os seus bancos de dados. Isso é ótimo para o desenvolvimento, mas obviamente ruim para a produção. Vamos em frente e configurar um administrador. No canto inferior direito, você verá "Bem-vindo ao grupo de administradores! Todos são administradores! Corrija isso".

Vá em frente e clique em corrigir isso e dê a si mesmo um nome de usuário e senha. Isso cria uma conta de administrador e dá aos usuários anônimos acesso para ler e gravar operações em todos os bancos de dados, mas sem privilégios de configuração.

Mais sobre usuários


No CouchDB, seria imprudente criar um único superusuário e fazer com que esse usuário fizesse toda a leitura/gravação.

Os usuários no CouchDB podem ser um pouco confusos de entender inicialmente, especialmente se você está acostumado a criar um único usuário para todo o seu aplicativo e, em seguida, gerenciar os usuários por conta própria em uma tabela de usuários (não na tabela de usuários do MySQL). No CouchDB, seria imprudente criar um único superusuário e fazer com que esse usuário fizesse toda a leitura/gravação, porque se seu aplicativo for do lado do cliente, as credenciais desse superusuário estarão à vista em seu código-fonte JavaScript.

O CouchDB tem criação e autenticação de usuários integradas. Você pode criar usuários com o plugin jQuery usando $.couch.signup() . Estes essencialmente se tornam os usuários do seu sistema. Os usuários são apenas documentos JSON como todo o resto, para que você possa armazenar quaisquer atributos adicionais que desejar, como e-mail, por exemplo. Você pode então usar grupos dentro do CouchDB para controlar a quais documentos cada usuário tem acesso de gravação. Por exemplo, você pode criar um banco de dados para esse usuário no qual ele possa gravar e adicioná-lo a um grupo com acesso de leitura aos outros bancos de dados, conforme necessário.

Etapa 4 - Criando um documento de produto


Agora vamos criar nosso primeiro documento usando o Futon através dos seguintes passos:
  1. Abra a mycouchshop banco de dados.
  2. Clique em "Novo documento".
  3. Clique em "Adicionar campo" para começar a adicionar dados ao documento JSON. Observe como um ID é pré-preenchido para você, eu recomendo não alterar isso. Adicione a chave "name" com o valor de "Nettuts CouchDB Tutorial One".
  4. Certifique-se de clicar na marca ao lado de cada atributo para salvá-lo.
  5. Clique em "Salvar documento".

Suba um nível, volte para o banco de dados e você verá um documento listado com o ID anterior como chave e um valor começando com {rev: . Este é o documento JSON que você acabou de criar.

Etapa 5 - Atualizando um documento


O CouchDB é um banco de dados somente anexado -- novas atualizações são anexadas ao banco de dados e não substituem a versão antiga. Cada nova atualização de um documento JSON com um ID pré-existente adicionará uma nova revisão. Isto é o que significa a chave de revisão inserida automaticamente. Siga os passos abaixo para ver isso em ação:
  • Visualizando o conteúdo da mycouchshop banco de dados, clique no único registro visível.
  • Adicione outro atributo com a chave "tipo" e o valor "produto".
  • Clique em "Salvar documento".

Depois de clicar em salvar, uma nova chave de revisão deve estar visível começando com o número 2. Voltando um nível para o mycouchshop visualização do banco de dados, você ainda verá apenas um documento, esta é a revisão mais recente do documento do nosso produto.

Revisões


Embora o CouchDB use revisões internamente, tente não se apoiar muito nisso. As revisões podem ser limpas facilmente através do Futon e ele não foi projetado para ser usado como um sistema de controle de revisões. O CouchDB usa as revisões como parte de sua funcionalidade de replicação.

Etapa 6 - Criando um documento usando cURL


Eu já mencionei que o CouchDB usa uma interface RESTful e o leitor de olhos de águia teria notado o Futon usando isso através do console no Firebug. Caso não tenha, vamos provar isso inserindo um documento usando cURL via Terminal.

Primeiro , vamos criar um documento JSON com o conteúdo abaixo e salvá-lo na área de trabalho chamando o arquivo person.json .
	{
		"forename":	"Gavin",
		"surname":	"Cooper",
		"type":		"person"
	}

Próximo , abra o terminal e execute cd ~/Desktop/ colocando você no diretório correto e depois execute a inserção com curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @person.json -H "Content-Type:application/json" . O CouchDB deve ter retornado um documento JSON semelhante ao abaixo.
{"ok":true,"id":"c6e2f3d7f8d0c91ce7938e9c0800131c","rev":"1-abadd48a09c270047658dbc38dc8a892"}

Este é o ID e o número de revisão do documento inserido. O CouchDB segue a convenção RESTful e assim:
  • PUBLICAR - cria um novo registro
  • OBTER - lê registros
  • COLOCAR - atualiza um registro
  • EXCLUIR - exclui um registro

Etapa 7 - Visualizando todos os documentos


Podemos verificar ainda mais nossa inserção visualizando todos os documentos em nossa mycouchshop banco de dados executando curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs .

Etapa 8 - Criando uma função de mapa simples


Visualizar todos os documentos é bastante inútil em termos práticos. O que seria mais ideal é visualizar todos os documentos do produto. Siga os passos abaixo para conseguir isso:
  • No Futon, clique no menu suspenso de visualização e selecione "Visualização temporária".
  • Este é o editor de redução de mapas no Futon. Copie o código abaixo na função map.
    			function (doc) {
    				if (doc.type === "product" && doc.name) {
    					emit(doc.name, doc);
    				}
    			}
  • Clique em executar e você verá o único produto que adicionamos anteriormente.
  • Vá em frente e torne esta visualização permanente salvando-a.

Depois de criar essa função de mapa simples, agora podemos solicitar essa visualização e ver seu conteúdo por HTTP usando o seguinte comando curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products .

Uma pequena coisa a notar é como obtemos o ID e a revisão do documento por padrão.

Etapa 9 - Executando uma redução


Para realizar uma redução útil, vamos adicionar outro produto ao nosso banco de dados e adicionar um atributo de preço com o valor de 1,75 ao nosso primeiro produto.
	{
		"name":		"My Product",
		"price":	2.99,
		"type":		"product"
	}

Para nossa nova visualização, incluiremos uma redução e um mapa. Primeiro, precisamos mapear definido como abaixo.
	function (doc) {
		if (doc.type === "product" && doc.price) {
			emit(doc.id, doc.price);
		}
	}

A função de mapa acima simplesmente verifica se o documento inserido é um produto e se tem um preço. Se essas condições forem atendidas, o preço dos produtos é emitido. A função de redução está abaixo.
function (keys, prices) {
	return sum(prices);
}

A função acima pega os preços e retorna a soma usando uma das funções de redução incorporadas do CouchDB. Certifique-se de marcar a opção reduzir no canto superior direito da tabela de resultados, caso contrário, você não poderá ver os resultados da redução. Pode ser necessário atualizar a página para visualizar a opção de redução