A parte não digital de sua vida está repleta de documentos. Sua mesa está coberta deles. Alguns deles são estruturados (faturas, cartões de visita), outros são menos estruturados (anotações, esboços) e outros estão em um meio termo ou são uma coleção de ambos (cadernos, blocos de rascunho).
A maioria das tecnologias de banco de dados quebrou essa experiência comum. Em geral, a causa é a necessidade de forçar nossos conceitos naturais a entrar em buracos digitais não naturais. A criação dos bancos de dados relacionais, por exemplo, foi motivada pelo armazenamento de dados apenas uma vez para evitar a duplicação devido às limitações de espaço impostas pela tecnologia da época.
As abstrações relacionais e outras abstrações focadas em tecnologia de métodos são boas para o que são, mas e se você não tivesse que mudar a forma como pensa e trabalha quando passa de conceitos naturais (como documentos) para a criação de software?
Vamos dar uma olhada em como podemos ser naturais ao projetar documentos para o Couchbase.
Dados abertos sobre cervejas
O conjunto de dados que analisaremos é originalmente de OpenBeerDB.com e está licenciado sob a Open Database License. Originalmente, os dados eram relacionais, e os downloads do site contêm despejos SQL dos bancos de dados originais.
Felizmente, é bastante fácil remontar os dados de volta à sua forma mais natural. Vamos nos aprofundar na migração dos dados de SQL para NoSQL mais tarde em uma postagem "Migrando para o Couchbase".
Primeiro, vamos dar uma olhada nos dois tipos de documentos que temos.
Cerveja (é claro)
"_id": "beer_1554_Enlightened_Black_Ale",
"_rev": “1-191ae52a6c773fd7749b65ffd9ae8044”,
"cervejaria": "Cervejaria New Belgium",
"name" (nome): "1554 Enlightened Black Ale" (cerveja preta iluminada),
"abv": “5.5”,
"description" (descrição): "Nascida de uma inundação e de um texto belga centenário, a 1554 Enlightened Black Ale usa uma cepa de levedura lager leve e maltes de chocolate escuro para redefinir o que pode ser uma cerveja escura. Em 1997, uma enchente em Fort Collins destruiu a receita original que nosso pesquisador, Phil Benstein, encontrou na biblioteca. Assim, Phil e o mestre cervejeiro, Peter Bouckaert, viajaram para a Bélgica para recuperar esse estilo único perdido no tempo. Seu primeiro desafio foi decifrar a escrita antiquada e as unidades de medida ultrapassadas, mas a tentativa e o erro (e muitos meses de amostragem interna) culminaram na 1554, uma cerveja escura altamente saborosa com corpo e sensação na boca moderados.",
"category" (categoria): "Cerveja belga e francesa",
"estilo": "Outras cervejas do estilo belga",
"atualizado": “2010-07-22 20:00:20”
}
Aqui está o documento que descreve a 1554 Enlightened Black Ale da New Belgium Brewing. É claro que você provavelmente já sabia disso porque leu o documento. Você não precisou (felizmente!) ler algo como isto:
id | nome | brewery_id | abv | style_id |
1 | 1554 Enlightened Black Ale | 2 | 5.5 | 3 |
O que, embora altamente normalizado e relacional, não é muito informativo por si só. Mesmo com a adição das duas outras tabelas nessa relação, ainda é um pouco difícil de ler e remontar mentalmente.
Além do nome da cerveja e de quem a produz, também encontramos seu ABV, uma descrição, uma categoria e um estilo. O único "id" mencionado no documento é um ID natural e construído para a própria cerveja. Há relacionamentos mencionados aqui, mas eles ainda são humanamente legíveis e ainda (como veremos mais tarde) recuperáveis.
Agora vamos dar uma olhada no próprio documento da New Belgium Brewing...
Cervejaria
"_id": "cervejaria_Nova_Bélgica_Brewing",
"_rev": “1-e405d6f86ec028a4fe0d18be0a6d4fa1”,
"name" (nome): "Cervejaria New Belgium",
"endereço": [
"500 Linden Street"
],
"cidade": "Fort Collins",
"estado": "Colorado",
"código": “80524”,
"país": "Estados Unidos",
"telefone": “1-888-622-4044”,
"website": "http://www.newbelgium.com/",
"description" (descrição): "Vamos preparar o cenário: 1989. Bélgica. Garoto em uma bicicleta (OK, um jovem de 32 anos). Enquanto o nosso jovem aspirante a cervejeiro caseiro pedala em sua mountain bike com pneus gordos por vilarejos europeus famosos pela cerveja, a New Belgium Brewing Company era apenas um vislumbre em seus olhos. Ou porão. Pois Jeff Lebesch voltaria para Fort Collins com um punhado de ingredientes e uma imaginação cheia de receitas. E então veio a cerveja. As duas primeiras criações de Jeff feitas no porão? Uma dubbel marrom com tons terrosos chamada Abbey e uma âmbar extraordinariamente bem equilibrada que ele chamou de Fat Tire. Dizer que o resto é história seria ignorar o envolvimento de sua esposa. Kim Jordan foi a primeira engarrafadora, representante de vendas, distribuidora, comerciante e planejadora financeira da New Belgium. E agora, ela é a nossa CEO".,
"geo": {
"loc": [
“-105.07”,
“40.5929”
],
"precisão": "RANGE_INTERPOLATED"
},
"atualizado": “2010-07-22 20:00:20”
}
Você notará que o ID deste documento é semelhante, mas agora estamos usando o prefixo "brewery_". Os prefixos nesses dois IDs de documento ajudam os seres humanos a encontrá-los novamente (assim como os IDs baseados em nomes). É possível usar UUIDs, IDs numéricos ou baseados em datas. No entanto, pode ser útil poder "criar manualmente" um ID para consulta, em vez de sempre ter que carregar os resultados de uma consulta de visualização para encontrar o que você está procurando no banco de dados.
A aparência desse documento não é muito diferente da que se espera de qualquer versão estruturada de um cartão de visita. Na verdade, é provável que pudéssemos ter usado formatos de contato baseados em JSON.
Conclusão
O Couchbase não tem esquema, portanto, lançar esses dois documentos no banco de dados não leva mais tempo do que digitá-los e adicioná-los ao banco de dados. O verdadeiro valor da estrutura, dos valores e dos nomes das chaves é definido mais tarde no processo, em vez de ser exigido antes mesmo de termos certeza do que estamos construindo.
Na próxima parte, veremos algumas considerações para determinar quando usar um documento para uma coleção de dados e quando usar vários documentos.