Baixe o app para aproveitar ainda mais
Prévia do material em texto
Inserir Título Aqui Inserir Título Aqui Bancos de Dados não Estruturados CRUD Responsável pelo Conteúdo: Prof. Esp. Milton Roberto y Goya Revisão Textual: Profa. Dra. Silvia Albert Nesta unidade, trabalharemos os seguintes tópicos: • Introdução ao Tema • Orientações para Leitura Obrigatória • Material Complementar Fonte: iStock/Getty Im ages Objetivos • Instruir sobre download e configuração do MongoDB • Introduzir as operações CRUD: Create, Read, Update e Delete Caro(a) aluno(a), Nesta Unidade abordaremos as operações CRUD (Create, Read, Update e Delete) em banco de dados não relacional. Para exemplificar o processo, usaremos o banco de dados orientado a documentos MongoDB. Antes de iniciarmos, comentaremos sobre o download e a configuração desse banco. Nesta unidade, o principal objetivo é não só entender os aspectos relevantes da criação de objetos em banco de dados não relacional, como também o seu uso em operações de leitura, exclusão e alteração de documentos. Acesse o Material Didático, onde encontrará o conteúdo teórico da unidade, e realize as Atividades Propostas. Lembre-se de que depende também de você a construção de novos conhecimentos na disciplina. Bom estudo! CRUD UNIDADE CRUD Introdução ao tema Caro(a) aluno(a), Alguns conceitos são compreendidos melhor através de exemplos práticos. Como plataforma para testarmos esses exemplos, usaremos o banco de dados não relacional MongoDB. O termo Non-Rel é usado para indicar bancos de dados não-relacionais. O banco de dados Non-Rel MongoDB é orientado a documentos e seu nome deriva da palavra inglesa humongous, que pode ser traduzido para gigantesco. Desenvolvido na linguagem C++, um mesmo servidor com MongoDB pode armazenar vários bancos. É desprovido de esquema (“schema free” ou “schemaless”) e trabalha com BSON (Bynary JSON). Para sua melhor compressão, o quadro 1, a seguir, apresenta uma comparação entre os termos usados no banco de dados relacional Oracle e o banco MongoDB, orientado a documentos. Quadro 1 – Comparação entre os termos usados no RDBMS Oracle e NonRel MongoDB Oracle (RDBMS) MongoDB (documentos) Database Database Instância de Banco de Dados Instância MongDB Esquema Banco de Dados Tabela, View Coleção Tupla Documento (JSON, BSON) Coluna Campo ou Field ROWID / Primary Key id Junção DBRef (Embedded Document) Foreign Key Reference Partição Shard Select Método find Insert Método insert Update Método update Delete Método remove Vale lembrar que uma forma simples de acessar o IDE do MongoDb é através do site https://goo.gl/5YmcIu. Todo acesso é feito através do navegador do seu computador ou dispositivo móvel. Não é necessário cadastro para utilizar o ambiente. A instalação e configuração do MongoDB é simples e pode ser feita observando-se os seguintes passos: 1. Faça download da versão compatível com seu computador em https://goo.gl/yHAk6y 2. No diretório principal do seu sistema, crie a pasta “data” (sem aspas) e, dentro dela, a pasta “db” (sem aspas). Isso pode ser feito clicando com o botão direito em seu disco C: e escolhendo “Criar Pasta”. Opcionalmente, entre no prompt de comando e execute o comando mkdir c:\data\db. 3. Instale o programa. Após a instalação, navegue até a pasta onde o MongoDB foi 6 7 instalado e localize a pasta “bin” (sem aspas) e execute o programa mongod. Isso irá iniciar o deamon do MongoDB. Após iniciar o programa, execute o programa mongo para iniciar o aplicativo. As imagens abaixo mostram esse processo. Notem que os caminhos exibidos podem ser alterados dependendo da instalação efetuada. Figura 1 – Iniciando o Daemon do MongoDB Figura 2 – Iniciando o banco nom-rel MongoDB 4. A instalação do software não altera os serviços do Windows. Caso queira que o serviço seja iniciado automaticamente, é necessário registrá-lo com o comando mongod --install --dbpath c:\data --logpath c:\MongoDB\Log\mongo_log. txt. Notem que o caminho mostrado neste comando pode mudar dependendo da forma como a instalação do software foi realizada. Após a instalação e inicialização do software, teste seu funcionamento através do comando show dbs;. Figura 3 – Exemplo da execução do comando show dbs; O comando show dbs; exibe uma listagem dos databases existentes. Dependendo da instalação, o banco vazio local tem 0.078GB pré-alocado. Esse espaço é pré-alo- cado por razões de desempenho e para garantir espaço sequencial para persistência. O banco local é criado durante a instalação do software e seus arquivos ficam na pasta data criada anteriormente. Uma característica dos bancos de dados não relacionais é a facilidade de uso. Não 7 UNIDADE CRUD existe, por exemplo, o comando create database, o banco é criado no momento em que é criada uma coleção. Para entrar em um banco específico, é utilizado o comando use. O nome do banco não pode conter uma cadeia vazia, um ponto ou palavra reservada. Exemplo: use banco; Para compreender melhor, é importante definirmos Coleção: O MongoDB armazena dados na forma de documentos. Os documentos são armazenados em formato <chave:valor>. Uma coleção é um conjunto de documentos. A coleção só é criada quando o primeiro documento é inserido. O exemplo, a seguir, mostra como se efetua a contagem de documentos de uma coleção, como se acrescenta um documento à coleção, e se efetua nova contagem e listagem de todos os seus documentos. db.biblioteca.count(); db.biblioteca.insert({Nome:’Banco de Dados’, Autor:’Sandra Puga’}); db.biblioteca.count(); db.biblioteca.find(); db.biblioteca.find({Autor: “Sandra Puga”}); db.biblioteca.find({Autor: “Sandra Puga”}).pretty(); O método insert insere um documento a uma coleção. A operação irá criar a coleção, caso ela não exista. A operação retorna um objeto WriteResult com o status da operação. A sintaxe é db.collection.insert() onde db indica uma operação do banco, collection é o nome da coleção e insert() é o método usado para incluir documentos em uma coleção. A operação de insert cria o atributo _id que consiste em um índice único (unique index) produzido durante a criação de uma coleção. Este é sempre o primeiro campo de um documento. Se o campo _id não for o primeiro em um documento, o servidor move o campo para o início. Cada documento inserido possui seu próprio _id. Cada _id é único. Normalmente, um _id é um tipo de dado ObjectId do BSON com 12 bytes que, assim, se organizam: 4 bytes indicam o timestamp da criação do objeto; 3 bytes identificam a máquina; 2 bytes mostram o identificador (id) do processo e 3 bytes correspondem ao contador, iniciado com um valor aleatório. Ordenar por _id é o equivalente a ordenar por data de criação.O método getTimestamp() acessa a data de criação do objeto. É possível outorgar valores a um atributo _id, mas o valor não pode ser repetido. O comportamento é similar uma chave primária em um RDBMS. Esse método pode conter qualquer tipo de dados BSON, com exceção de array. Expressões regulares são desaconselhadas nesse campo em casos de replicação. O método db.coleção.find() lista os registros de uma coleção e retorna um array com os objetos da coleção, mesmo que ela tenha apenas um objeto. Os dados são retornados em um cursor implícito e é preciso iterar o cursor para acessar o documento. Se o cursor não for atribuído a uma variável usando a palavra-chave var, ele fará 20 iterações automaticamente. O método db.coleção.findOne() retorna apenas o primeiro objeto encontrado. Usa-se find() para listagem de registros e findone() para consulta 8 9 de registros. Uma consulta vazia ({}) retorna todos os documentos de uma coleção. Vale lembrar que não especificar uma consulta é o equivalente a efetuar uma consulta vazia. Sendo assim, o db.coleção.find() é equivalente ao db.coleção.find({}). É possível, ainda, efetuar uma consulta por igualdade {<campo>: <valor>}. Neste caso, serão listados todos os campos com o valor especificado. Veja o seguinte exemplo: db.biblioteca.find(); db.biblioteca.find({Autor:“Sandra Puga”}); O método find() trabalha com operadores aritméticos de comparação $lt (menor que), $lte (menor ou igual), $gt (maior que), $gte (maior ou igual). O quadro 2, a seguir, com- para o uso com comandos SQL tradicionais para facilitar a compreensão de seu uso. Quadro 2 – Comparação dos operadores aritméticos do SQL com o MongoDB SQL MongoDB SELECT * FROM users db.users.find() SELECT * FROM users WHERE age = 33 db.users.find({age: 33}) SELECT * FROM users WHERE age > 33 db.users.find({age: {$gt: 33}}) SELECT * FROM users WHERE age >= 33 db.users.find({age: {$gte: 33}}) SELECT * FROM users WHERE age < 33 db.users.find({age: {$lt: 33}}) SELECT * FROM users WHERE age <= 33 db.users.find({age: {$lte: 33}}) UPDATE users SET age = 33 WHERE name = ‘Bob’ db.users.update({name: “Bob”}, {$set: {age: 33}}, {multi: true}) UPDATE users SET age = age + 2 WHERE name = ‘Bob’ db.users.update({name: “Bob”}, {$inc: {age: 2}}, {multi: true}) Então, está acompanhando? Os quadros auxiliam a fazer as comparações, para que você possa construir novos conhecimentos. Observe, a seguir, o quadro 3 que compara o uso dos operadores com comandos SQL tradicionais, para facilitar a sua compreensão: Quadro 3 – Comparação dos operadores lógicos do SQL com os do MongoDB SQL MongoDB SELECT * FROM users WHERE age > 33 AND age < 40 db.users.find({age: {$gt: 33, $lt: 40}}) SELECT * FROM users WHERE age = 32 AND name = ‘Bob’ db.users.find({age: 32, name: “Bob”}) SELECT * FROM users WHERE age = 33 OR name = ‘Bob’ db.users.find({$or:[{age:33}, {name:“Bob”}]}) SELECT * FROM users WHERE age >= 32 AND (name = ‘Bob’ OR job=‘Salesman’) db.users.find(age: {$gte:32}, $or: [{name: “Bob”}, {job: “Salesman”}] }) O método update() modifica um ou mais documentos em uma coleção. Além disso, esse método pode modificar um campo específico ou substituir um documento existente. Se o parâmetro multi estiver ligado (TRUE), ele atualiza todos os documentos que atendam ao critério de seleção. Se o parâmetro multi estiver desligado (FALSE), ele atualiza apenas um documento. O método update() ainda possui operadores para facilitar as operações de atualização como $set que modifica o conteúdo de um campo específico e, se o campo não existir, 9 UNIDADE CRUD um novo campo será adicionado ao documento. Além disso, há os operadores: $inc, que incrementa o conteúdo de um campo; $unset, que remove um campo de um documento e $rename, que altera o nome de um campo em um documento. O quadro 4, a seguir, compara o uso dos operadores com comandos SQL tradicionais, para facilitar a sua compreensão: Quadro 4 – Comparação entre os comandos de atualização do SQL com os do MongoDB SQL MongoDB UPDATE users SET age = 33 WHERE name = ‘Bob’ db.users.update({name: “Bob”}, {$set: {age: 33}}, {multi: true}) UPDATE users SET age = age + 2 WHERE name = ‘Bob’ db.users.update({name: “Bob”}, {$inc: {age: 2}}, {multi: true}) O método remove() remove os dados de uma coleção, mas ela continua existindo, mesmo sem dados. A sintaxe geral é db.collection.remove( <query>, <justOne> ) onde <query> especifica os critérios de deleção. Para apagar todos os documentos de uma coleção, basta especificar um documento vazio ({}). <justOne> define que será apagado apenas um documento. O parâmetro deve ser configurado para true ou 1. Observe o quadro 5, a seguir, que compara o uso dos operadores com comandos SQL tradicionais, para facilitar a sua compreensão: Quadro 5 – Comparação entre os comando de deleção do SQL com os do MongoDB SQL MongoDB DELETE FROM users WHERE name = ‘Bob’ db.users.remove({name: “Bob”}) Vimos, nessa unidade, as operações CRUD (Create, Read, Update e Delete) em banco de dados não relacional, exemplificado pelo banco de dados orientado a documentos MongoDB. Além de abordar os aspectos relevantes da criação de objetos em banco de dados não relacional, vimos como se dá o seu uso em operações de leitura, exclusão e alteração de documentos. Não deixe de fazer as leituras indicadas na unidade e as atividades, para que possa construir e solidificar novos conhecimentos! Bom trabalho!! 10 11 Orientações para Leitura Obrigatória Caro(a) aluno(a), Considerando que a ideia central desta Unidade é lhe mostrar os principais conceitos que envolvem o banco de dados não relacional, é de suma importância que primeiro conheçamos os princípios de um banco de dados relacional. Editado pela Elsiever Editora, ‘Introdução a Sistemas de Bancos de Dados’, de C. J. Date, oferece uma introdução bastante completa ao amplo campo de sistemas de bancos de dados. O livro apresenta uma base sólida sobre os alicerces da tecnologia de bancos de da- dos, ao mesmo tempo em que esclarece como o campo deve se desenvolver no futuro. A edição de 2015 foi revista e atualizada com as tendências e desenvolvimentos dos sistemas de bancos de dados. Atento(a) a esses aspectos, inicie sua leitura pelo capítulo Arquitetura de Sistemas de Banco de Dados , da página 28 a 46 – da obra de C.J. Date, Introdução a Sistemas de Banco de Dados, disponível na Biblioteca Virtual Universitária. Passe, então, para o capítulo Normalização Avançada I: 1FN, 2FN, 3FN, FNBC, da página 302 a 323. Em seguida, reveja os conceitos de Banco de Dados distribuído, da página 554 a 583 e os princípios de Word Wide Web e XML, da página 768 a 801. Para acessar essa obra, percorra o seguinte caminho: Após entrar em sua “área do aluno”, disponível em: https://goo.gl/PsPf6p, no menu à esquerda da tela, clique em “Serviços”, depois em “Biblioteca” e, no centro da tela, clique em “E-books - Bib. Virtual Universitária”. No topo da tela que abrirá haverá um campo de busca para autor, título, assunto etc., nesse espaço digite “Introdução a Sistemas de Bancos de Dados” (sem as aspas) e clique na capa que aparecer como resultado. Para ler os capítulos e páginas indicados, utilize a seta ao lado direito da tela para avançar página a página. Observe também que os ícones no rodapé da tela correspondem a determinadas funções, entre as quais ampliar a visualização (zoom), marcar a obra como favorita, imprimir trechos que escolher e pular para um número específico de página. Referência: DATE, C.J. Introdução a Sistemas de Bancos de Dados. Trad. Daniel Vieira. Rio de Janeiro: Elsiever Editora, 2015. 11 UNIDADE CRUD Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Vídeos Big Data Storymap https://goo.gl/DuYrlv Big Data Architecture Patterns https://goo.gl/muTwcy Explaining Big Data https://goo.gl/IVOuA2 Introduction to Hadoop https://goo.gl/zzdg7K 12 13 Referências DATE, C.J.. Introdução a Sistemas de Bancos de Dados. Trad. Daniel Vieira. Rio de Janeiro: Elsiever Editora, 2015. MongoDB.org, CRUD Operations. Disponível em: <https://docs.mongodb.com/ manual/crud/>. Acesso em 3 de dezembro de 2016. 13
Compartilhar