Aaron Benton é um arquiteto experiente, especializado em soluções criativas para desenvolver aplicativos móveis inovadores. Ele tem mais de 10 anos de experiência em desenvolvimento de pilha completa, incluindo ColdFusion, SQL, NoSQL, JavaScript, HTML e CSS. Atualmente, Aaron é Arquiteto de Aplicativos da Shop.com em Greensboro, Carolina do Norte, e é um Campeão da comunidade do Couchbase.

FakeIt Série 1 de 5: Geração de dados falsos
Há inúmeras postagens em blogs sobre modelagem de dados, chave e padrões de documentos. Todas essas publicações oferecem uma ótima introdução sobre como estruturar e modelar seus documentos no Couchbase, mas nenhuma delas diz a você o que fazer em seguida. Nesta série de blogs, responderemos à pergunta: o que fazer depois de definir o modelo de dados?
Modelo de usuários
Nesta série, trabalharemos com um aplicativo de comércio eletrônico greenfield. Como na maioria dos aplicativos de comércio eletrônico, nosso aplicativo terá usuários, portanto, é por aí que começaremos.
Para começar, definimos um modelo básico de usuário.
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "_id": "user_0", "doc_type": "user", "user_id": 0, "first_name": "Mac", "last_name": "Carter", "username": "Salma.Ratke", "password": "DvA6YrMGtgsKKnG", "email_address": "Ludie74@hotmail.com", "created_on": 1457172796088 } |
Fizemos a parte mais difícil, que é definir nosso modelo, mas e agora?
- Como representamos esse modelo?
- Como documentamos esse modelo?
- Esse modelo se baseia em dados de outros modelos?
- Como os dados podem ser gerados a partir desse modelo?
- Como podemos gerar dados falsos/teste?
Felizmente para nós, há um projeto NodeJS chamado Falsa que pode responder a todas essas perguntas para nós. Falsa é um utilitário de linha de comando que gera dados falsos nos formatos json, yaml, yml, cson ou csv com base em modelos definidos em yaml. Os dados podem ser gerados usando qualquer combinação de FakerJS, ChanceJS ou funções personalizadas. Os dados gerados podem ser gerados nos seguintes formatos e destinos:
- json
- yaml
- cson
- csv
- Arquivo Zip de arquivos json, yaml, cson ou csv
- Servidor Couchbase
- Servidor de gateway de sincronização do Couchbase
Podemos definir um modelo FakeIt em YAML para representar nosso modelo JSON. Isso nos fornece um modelo documentado e tipado por dados que nos permite comunicar como nosso modelo deve ser estruturado e para que servem as propriedades.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
name: Users type: object key: _id properties: _id: type: string description: The document id built by the prefixed "user_" and the users id doc_type: type: string description: The document type user_id: type: integer description: The users id first_name: type: string description: The users first name last_name: type: string description: The users last name username: type: string description: The users username password: type: string description: The users password email_address: type: string description: The users email address created_on: type: integer description: An epoch time of when the user was created |
Você provavelmente está se perguntando, "Ótimo, defini meu modelo em YAML, mas de que isso me serve?" Um dos maiores problemas que os desenvolvedores enfrentam ao iniciar o desenvolvimento é ter dados para trabalhar. Muitas vezes, uma quantidade exorbitante de tempo é gasta na criação manual de documentos, escrevendo códigos descartáveis para preencher um bucket. Além disso, você pode ter um dump de dados completo ou parcial do seu banco de dados que precisa ser importado.
Esses procedimentos são demorados, tediosos e, no caso de um despejo de dados, não fornecem nenhuma visão ou documentação sobre os modelos disponíveis. Podemos adicionar algumas propriedades simples ao nosso modelo FakeIt que descrevem como o nosso modelo deve ser gerado e, por meio de um único arquivo, podemos criar uma quantidade infinita de documentos falsos randomizados.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
name: Users type: object key: _id properties: _id: type: string description: The document id built by the prefix "user_" and the users id data: post_build: `user_${this.user_id}` doc_type: type: string description: The document type data: value: user user_id: type: integer description: An auto-incrementing number data: build: document_index first_name: type: string description: The users first name data: build: faker.name.firstName() last_name: type: string description: The users last name data: build: faker.name.lastName() username: type: string description: The username data: build: faker.internet.userName() password: type: string description: The users password data: build: faker.internet.password() email_address: type: string description: The users email address data: build: faker.internet.email() created_on: type: integer description: An epoch time of when the user was created data: build: new Date(faker.date.past()).getTime() |
Adicionamos uma propriedade de dados a cada uma das propriedades de nossos modelos, descrevendo como esse valor deve ser gerado. A FakeIt oferece suporte a 5 maneiras diferentes de gerar um valor:
- pre_build: para inicializar o valor
- construir: função que cria um valor
- falso: Uma string de modelo do FakerJS, ou seja, {{internet.userName}}
- valor: Um valor estático a ser usado
- post_build: uma função que é executada depois que todas as propriedades do modelo são definidas
Essas funções de compilação são um corpo de função JavaScript. Cada uma dessas funções recebe as seguintes variáveis que podem ser usadas no momento de sua execução:
- documents - Um objeto que contém uma chave para cada modelo cujo valor é uma matriz de cada documento que foi gerado
- globals - Um objeto que contém quaisquer variáveis globais que possam ter sido definidas por qualquer uma das funções de execução ou compilação
- inputs - Um objeto que contém uma chave para cada arquivo de entrada usado, cujo valor é a versão desserializada dos dados do arquivo
- faker - Uma referência ao FakerJS
- chance - Uma referência ao ChanceJS
- document_index - Esse é um número que representa a posição do documento gerado atualmente na ordem de execução
- require - Essa é a função require do nó, que permite que você exija seus próprios pacotes. Para obter um melhor desempenho, exija e configure-os na função pre_run.
Por exemplo, se observarmos a função de criação de propriedades de nome de usuário, ela terá a seguinte aparência:
|
1 2 3 |
function (documents, globals, inputs, faker, chance, document_index, require) { return faker.internet.userName(); } |
Agora que definimos como nosso modelo deve ser gerado, podemos começar a gerar alguns dados falsos com ele.
Com nosso modelo de usuários salvo em um arquivo models/users.yaml, podemos enviar dados diretamente para o console usando o comando
|
1 |
fakeit console models/users.yaml |

Usando esse mesmo modelo, podemos gerar 100 arquivos JSON e salvá-los em um diretório chamado output/ usando o comando
|
1 |
fakeit directory –count 100 –verbose output models/users.yaml |

Além disso, podemos criar um arquivo zip com 1.000 arquivos JSON usando o comando:
|
1 |
fakeit directory –count 1000 –verbose output/users.zip models/users.yaml |
Podemos até mesmo gerar um único arquivo CSV do nosso modelo usando o seguinte comando:
|
1 |
fakeit directory –count 25 –format csv –verbose output/ models/users.yaml |
Isso criará um único arquivo CSV cujo nome é o nome do modelo, neste caso, o nome: Users, e o arquivo resultante será denominado Users.csv

Se você estiver usando arquivos JSON, arquivos Zip ou arquivos CSV, todos eles podem ser importados para o Couchbase Server usando as ferramentas CLI carregador de arquivos cbdocloader (para arquivos *.json e *.zip) ou cbimport (para arquivos *.json e *.csv)
Embora a geração de arquivos estáticos seja vantajosa, ainda há a etapa adicional de importá-los para o Couchbase Server por meio das ferramentas CLI disponíveis. O FakeIt também oferece suporte ao Couchbase Server e ao Sync Gateway como destinos de saída. Podemos gerar 10.000 documentos JSON a partir do nosso modelo users.yaml e enviá-los para um bucket chamado ecommerce em um Couchbase Server executado localmente usando o comando:
|
1 |
fakeit couchbase –server 127.0.0.1 –bucket ecommerce –count 10000 –verbose models/users.yaml |

Conclusão
Vimos como podemos representar o modelo JSON de um usuário usando YAML para documentar e descrever como um valor de propriedades deve ser gerado. Esse único arquivo users.yaml pode ser enviado para o console, arquivos JSON, arquivo Zip de arquivos JSON, arquivos CSV e até mesmo diretamente para o Couchbase. O FakeIt é uma ferramenta fantástica para acelerar seu desenvolvimento e gerar conjuntos de dados de desenvolvimento maiores. Você pode salvar seus modelos FakeIt como parte de sua base de código para facilitar a repetição de conjuntos de dados por qualquer desenvolvedor.
O FakeIt é uma ferramenta para facilitar o desenvolvimento e o teste de sua implantação do Couchbase. Embora possa gerar grandes quantidades de dados, não é uma verdadeira ferramenta de teste de carga. Há ferramentas CLI disponíveis para teste de carga e dimensionamento, como cbc-pillowfight e cbworkloadgen
Próximo
- FakeIt Série 2 de 5: Dados compartilhados e dependências
- Série FakeIt 3 de 5: Modelos Lean por meio de definições
- FakeIt Série 4 de 5: Trabalhando com dados existentes
- FakeIt Series 5 de 5: Desenvolvimento móvel rápido com o Sync-Gateway

Esta postagem faz parte do Programa de Redação da Comunidade Couchbase
[...] FakeIt Série 1 de 5: Geração de dados falsos Aprendemos que o FakeIt pode gerar uma grande quantidade de dados aleatórios com base em um único arquivo YAML e [...]
[...] até agora, em nossa série FakeIt, vimos como podemos gerar dados falsos, compartilhar dados e dependências e usar definições para modelos menores. Hoje vamos dar uma olhada [...]
[...] Série FakeIt 1 de 5: Geração de dados falsos [...]
No Couchbase 5.0 e superior, é necessário especificar um nome de usuário e uma senha para o Couchbase.
Você pode fazer isso adicionando os parâmetros -username (ou -u) e -password (ou -p) ao comando "fakeit couchbase"