Portuguese version of the Cassandra driver javascript node.js workshop

Overview

Versão em Português do workshop Cassandra driver javascript node.js

Olá e bem-vindo!

Este é o repositório complementar para a apresentação prática dos drivers Cassandra em Javascript / Node.js.

Neste repositório você encontrará todos os trechos de código para você praticar e acompanhar.

Além disso também disponibilizamos instruções para repetir a prática por conta própria!

Você concluirá esta prática com uma boa compreensão do que pode fazer, e como, com os drivers Node.js para Apache Cassandra™.

Documentação oficial

Node.js driver

Requisitos

Para praticar você precisa:

  • internet (o banco de dados Apache Cassandra usado aqui está na nuvem)
  • o Node.js LTS (ou superior) https://nodejs.org/en/

Nota: crie sua instância do Apache Cassandra chamado AstraDB de graça. https://astra.datastax.com/

Você ganha $25 todo mês em créditos (isso dá até 80GB por mês na faixa)

1. Configurando o ambiente

Sugestão: use o Linux, Mac ou WSL/Windows

Começamos com a instalação básica dos componentes:

mkdir code-pt-br
cd code-pt-br
npm init -y
npm i cassandra-driver dotenv
touch index.js
echo "console.log('Vamos começar')" > index.js
node index.js

Se o terminal mostrou Vamos começar você está pronta para continuar!

Nota: vamos usar a versão "type": "module" no package.json

2. Passo a passo para criar a infraestrutura

O AstraDB é a maneira mais simples de executar o Cassandra com zero instalações - basta apertar o botão e obter seu cluster. Não é necessário cartão de crédito, e você ganha crédito de US$ 25,00 todos os meses. Isso é aproximadamente:

  • 5 milhões de gravações,
  • 30 milhões de leituras,
  • 40 GB de armazenamento mensal

Site

Acesse o seu banco de dados em https://astra.datastax.com

  • Você pode logar com seu Github, Google ao invés de criar mais uma combinação email e senha.
Se for sua primeira vez acessando o site, clique aqui

O banco

A interface em https://astra.datastax.com está em Inglês. Vamos lá:

  • Clique em um dos botões que com CREATE DATABASE ou CREATE SERVERLESS DATABASE (ambos são equivalentes)
  • Vamos dar nomes
    • DATABASE NAME: workshop
    • KEYSPACE NAME: demo

Sugiro escolher NORTH AMERICA e depois MONCKS CORNER (us-east1)

  • Clique no botão bem a direita CREATE DATABASE

Nota

⚠️ Como usuário do plano FREE, você pode usar GCP e qualquer Area ou Região que esteja destravada

  • Se você quiser GCP > SOUTH AMERICA > SAO PAULO (southamerica-east1), sugiro cadastrar o cartão de crédito
  • Se você quiser AWS ou AZURE > *qualquer região* > *qualquer área*, sugiro cadastrar o cartão de crédito

O banco de dados já está ativo?

Você verá seu novo banco de dados pendente no Painel.

O status mudará para Ativo quando o banco de dados estiver pronto.

Você também receberá um e-mail com essa notificação.

🥳 Credenciais para conectar ao banco de dados

Vamos agora expor variaveis de ambiente para conectar ao banco de dados.

Clique em "CONNECT" no canto superior direito (imagem)

🚧 Selecione Node.JS no menu lateral

Aqui é um momento chave onde você precisa ir para a página de criação de token e download das credenciais.

  • Primeiro clique em DOWNLOAD BUNDLE
  • Em seguida clique no link com a palavra HERE (indicado na imagem)

Gere um token como Administrador

Clique em "DOWNLOAD TOKEN DETAILS"

🇧🇷 Conectar ao banco de dados com Javascript

Insira os segredos e credenciais baixados até agora no seu .env.

Sugestão de como inserir (esses valores são exemplos):

touch .env
echo "SECURE_CONNECT_BUNDLE=secure-connect-workshop.zip" >> .env
echo "ASTRA_DB_CLIENT_ID=RAwfLeZORZoPnSUYQSgbnhEX" >> .env
echo "ASTRA_DB_CLIENT_SECRET=XjvJawKpp2iyRZJGDmGFLCc+jvDpRi,MNAs4se5Glj0qhhDm4TBsl7x71vMcexNm8aubaND0pj,zCLOP59JZ2FPh1gT+mIJzCtOx6ZB0ocgSZJ-9bbZfvn-yP5ht85b0" >> .env

Vamos testar?

echo "require('dotenv').config(); \n console.log(process.env.SECURE_CONNECT_BUNDLE)" >> index.js
node index.js

O resultado deve ser

Vamos começar
secure-connect-workshop.zip

Criar a primeira tabela

Recaptitulando, nosso package.json deve estar assim:

{
  "name": "workshop-cassandra-pt-br",
  "version": "1.0.0",
  "description": "Apresentação sobre Cassandra usando drivers",
  "main": "index.js",
  "type": "module",
  "keywords": [],
  "author": "Daniel S<[email protected]>",
  "license": "Apache",
  "dependencies": {
    "cassandra-driver": "^4.6.3",
    "dotenv": "^16.0.0",
    "express": "^4.17.3"
  },
  "devDependencies": {
    "prettier": "^2.5.1"
  }
}

Vamos apagar tudo do ìndex.js e substituir com

import dotenv from "dotenv"; // permite acessar process.env via .env
import { Client } from "cassandra-driver"; // 🤩 a estrela de hoje

dotenv.config(); // inicializa o pacote

/* Configurações do banco de dados na nuvem, AstraDB */
const cassandraConfig = {
  cloud: {
    secureConnectBundle: process.env.SECURE_CONNECT_BUNDLE,
  },
  credentials: {
    username: process.env.ASTRA_DB_CLIENT_ID,
    password: process.env.ASTRA_DB_CLIENT_SECRET,
  },
  keyspace: "demo",
};

const clienteCassandra = new Client(cassandraConfig); // inicializa o cliente

/* Essa é a função principal da aplicação neste workshop */
const consultarBancoDeDados = async () => {
  await clienteCassandra.connect(); // aguarda a conexão ao banco
  const consultaCQL = `SELECT * FROM system.local`; // 1a consulta CQL do dia
  // a próxima linha aguarda a execução da consulta
  const respostaConsulta = await clienteCassandra.execute(consultaCQL);
  await clienteCassandra.shutdown(); // desconecta ao banco
  return respostaConsulta;
};

const resultadoFinal = await consultarBancoDeDados();
console.log(resultadoFinal);

Vamos testar?

node index.js

O resultado dever ser

ResultSet {
  info: {
    queriedHost: '172.25.140.4:9042',
    triedHosts: { '172.25.140.4:9042': null },
...

Criando dados para o nosso dominio

Os dados aqui são meramente ilustrativos do melhor time de futebol do mundo, e servem somente para ressaltar que o banco de dados Apache Cassandra é altamente distribuído, democrático, aceita falhas muito bem, e é superescalável. Para acessar a planilha, esse é o link

copie esses dados dentro de um arquivo selecao.csv

nome,camisa,posicao
diego alves,1,goleiro
hugo souza,45,goleiro
matheus cunha,51,goleiro
rodrigo caio,3,zagueiro
gustavo henrique,2,zagueiro
leo pereira,4,zagueiro
david luiz,23,zagueiro
noga,41,zagueiro
cleiton,33,zagueiro
fabricio bruno,15,zagueiro
pablo,30,zagueiro
rodinei,22,laterais direito
isla,44,laterais direito
matheuzinho,34,laterais direito
rene,6,laterais esquerdo
filipe luis,16,laterais esquerdo
ramon,36,laterais esquerdo
willian arao,5,volante
andreas,18,volante
thiago maia,8,volante
joao gomes,35,volante
everton ribeiro,7,meias
diego,10,meias
de arrascaeta,14,meias
lazaro,13,meias
matheus franca,42,meias
gabi gol,9,atacante
vitinho,11,atacante
bruno henrique,27,atacante
pedro,21,atacante
marinho,31,atacante

Data Loader

Vamos usar a functionalidade do AstraDB para carregar os dados acima.

Com isso:

  • a tabela foi criada automaticamente
  • os dados foram carregados

Nota: você poderia criar e inserir elementos manualmente também.

CREATE TABLE demo.workshopdemojogadores (
    posicao text,
    nome text,
    camisa int,
    PRIMARY KEY (posicao, nome)
)

Pratica com Javascript/Node.js

Vamos agora para o arquivo index.js, e vamos analisar os diversos trechos de codigo comentados la

The DataStax Developers

You might also like...

Repository for hands on practice in Git and GitHub workshop

Git and Github Workshop Jan 2022 Successful contributors ✨ of this project will be featured on the GDSC website so as to bring attraction and learn vi

Feb 10, 2022

GatsbyConf - Decoupling Drupal Using Gatsby: A Crash Course workshop

GatsbyConf - Decoupling Drupal Using Gatsby: A Crash Course workshop

Sep 29, 2022

For this workshop, we're going to learn more about cloud computing by exploring how to use Pulumi to build, configure, and deploy a real-life, modern application using Docker

For this workshop, we're going to learn more about cloud computing by exploring how to use Pulumi to build, configure, and deploy a real-life, modern application using Docker. We will create a frontend, a backend, and a database to deploy the Pulumipus Boba Tea Shop. Along the way, we'll learn more about how Pulumi works.

Dec 29, 2022

Resources for the App.js Conf Workshop 2022 hosted by Evan Bacon and Lydia Hallie

App.js Conf 2021 React Native workshop Order of sections: up-and-going: Learn about React Native and options to start your first project. get-started:

Sep 14, 2022

Here are the sources for the wdi5 workshop at UI5con 2022.

wdi5 workshop at UI5con 2022 Here are the sources for the wdi5 workshop at UI5con 2022. prerequisites please have this installed on your 'puter: Node

Oct 19, 2022

REST API for a rudimentary blog - from Prisma Day 22 NestJS workshop

NestJS Workshop Prisma Day 22 - Let's build a REST API with NestJS and Prisma! Welcome to the code repository for the Prisma Day 2022 NestJS Workshop!

Jan 3, 2023

Remix enables you to build fantastic user experiences for the web and feel happy with the code that got you there. In this workshop, we'll look at some more advanced use cases when building Remix applications.

💿 Advanced Remix Workshop Remix enables you to build fantastic user experiences for the web and feel happy with the code that got you there. In this

Dec 9, 2022

Remix enables you to build fantastic user experiences for the web and feel happy with the code that got you there. Get a jumpstart on Remix with this workshop.

💿 Remix Fundamentals Build Better websites with Remix Remix enables you to build fantastic user experiences for the web and feel happy with the code

Dec 25, 2022

Workshop for starknetCC (nextjs x starknetjs x cairo)

Workshop for starknetCC (nextjs x starknetjs x cairo)

NextJS - Starknet.js - Cairo • Workshop StarknetCC - Full dApp workshop by Alpha Road team You'll find the PDF presentation here Introduction This wor

Nov 8, 2022
Owner
DataStax Developers
DataStax Developers
Framework agnostic CLI tool for routes parsing and generation of a type-safe helper for safe route usage. 🗺️ Remix driver included. 🤟

About routes-gen is a framework agnostic CLI tool for routes parsing and generation of a type-safe helper for safe route usage. Think of it as Prisma,

Stratulat Alexandru 192 Jan 2, 2023
The high efficent browser driver on top of puppeteer, ready for production scenarios.

browserless is an efficient driver for controlling headless browsers built on top of puppeteer developed for scenarios where performance matters. High

microlink.io 1.2k Jan 6, 2023
🚀 Macaca Playwright driver

macaca-playwright Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API. Macaca P

Macaca 13 Nov 8, 2022
A Fetch API-compatible PlanetScale database driver

PlanetScale Serverless Driver for JavaScript A Fetch API-compatible PlanetScale database driver for serverless and edge compute platforms that require

PlanetScale 255 Dec 27, 2022
a simple wrapper nestjs dynamic module on top of surrealdb.js driver, with a consumer app to show case library in action, nothing fancy

README README Project Components Dynamic Module Consumer App Install SurrealDb Starts SurrealDb Init surrealDb Database Run App from Source Code Launc

Mário Monteiro 0 Oct 3, 2022
Workshop contruyendo una API Rest con Node.js + Koa.js

Workshop contruyendo una API Rest con Node.js + Koa.js Tabla de Contenido Acerca de Introducción Explicación del caso de uso Ciclo de vida de las soli

Jhony Rivero 6 Apr 8, 2022
Workshop: Crafting Human Friendly CLIs with Node.js Core

$ Crafting Human Friendly CLIs with Node.js Core █ A workshop by Simon Plenderleith & Kevin Cunningham. Getting ready for the workshop 1. Required sof

Simon Plenderleith 13 Dec 26, 2022
A workshop about JavaScript iteration protocols: iterator, iterable, async iterator, async iterable

JavaScript Iteration protocol workshop A workshop about JavaScript iteration protocols: iterator, iterable, async iterator, async iterable by @loige.

Luciano Mammino 96 Dec 20, 2022
The Remix version of the fakebooks app demonstrated on https://remix.run. Check out the CRA version: https://github.com/kentcdodds/fakebooks-cra

Remix Fakebooks App This is a (very) simple implementation of the fakebooks mock app demonstrated on remix.run. There is no database, but there is an

Kent C. Dodds 61 Dec 22, 2022
ITkonekt .NET workshop

Autobarn This is the sample application for Dylan Beattie's workshop on distributed systems with .NET. It's an Asp.NET Core web application based on v

Ursatile 1 Dec 19, 2021