O que é o MongoDB
Durante décadas, têm sido utilizadas bases de dados relacionais para a gestão de dados. No entanto, o tipo de dados que compõem as aplicações web modernas fez com que bases de dados com uma abordagem orientada para documentos, como o MongoDB, se posicionassem como sérios concorrentes do modelo tradicional. Descubra como funciona esta nova abordagem e quais as vantagens que oferece.
O que torna o MongoDB diferente?
MongoDB, derivado do inglês*«humongous»*(português: imenso, enorme), é um sistema de base de dados orientado para documentos. Ao contrário das bases de dados relacionais, nas quais os dados são armazenados numa tabela estruturada, nas bases de dados MongoDB os dados são armazenados nas chamadas coleções não estruturadas.
Além disso, é importante destacar que o MongoDB é um sistema de bases de dados NoSQL, pois não utiliza a linguagem de consulta SQL. Em vez disso, o MongoDB utiliza uma linguagem de consulta conhecida como MQL, baseada em JavaScript. Esta abordagem permite que os registos sejam armazenados no formato BSON, que segue o modelo do formato JSON. Esta característica possibilita o suporte para todos os tipos de dados JavaScript, o que torna o MongoDB a escolha ideal para inúmeras plataformas baseadas nesta linguagem de programação.
Outra característica importante das bases de dados MongoDB é a sua capacidade de escalabilidade horizontal. Ou seja, os dados de uma base de dados podem ser distribuídos entre vários servidores, em vez de ficarem concentrados num local central, o que pode ter um impacto positivo na disponibilidade dos dados e no desempenho geral da base de dados. Em geral, essa abordagem de escalabilidade costuma ser mais rentável do que a alternativa de potencializar um único servidor com hardware de maior capacidade, conhecida como escalabilidade vertical.
Como funciona o MongoDB?
O MongoDB, em contraste com o MySQL, adota uma abordagem diferente de armazenamento de dados, funcionando de forma orientada a documentos. Em vez de armazenar os dados em forma de tabela, em que cada linha é formada por um conjunto fixo de campos que devem ser preenchidos com valores, o MongoDB armazena os dados em documentos BSON não estruturados. Cada documento pode conter a quantidade de campos desejada, e não é necessário que eles coincidam entre si. Dessa forma, os documentos no MongoDB substituiriam as linhas em uma tabela SQL, e os campos definidos nesses documentos substituiriam as colunas. Existem várias ferramentas disponíveis para trabalhar com bases de dados MongoDB. Além do conhecido MongoDB Shell, existe também o MongoDB Compass, uma ferramenta gráfica para gerir bases de dados MongoDB. No entanto, vamos concentrar-nos nos comandos shell.
Como o MQL é baseado em JavaScript, existem várias funções padrão que permitem realizar consultas e usar comandos complexos. No entanto, todos os comandos de escrita e leitura têm, em princípio, a mesma estrutura (que pode ser vista no exemplo a seguir). Além desses comandos, existem muitos outros que permitem o gerenciamento da sua base de dados MongoDB. Todos eles são explicados na documentação do MongoDB.
db.estudiantes.find({ Apellido: "Pérez" })
db.estudiantes.updateOne({ Name: "Pérez" }, { $set: { Semester: 2 } })
db.estudiantes.deleteOne({ Name: "Martín" })
db.estudiantes.insertOne({
Name: "Alegre",
Alter: 18,
Semester: 1
})O exemplo anterior mostra vários comandos consecutivos com a mesma estrutura numa base de dados MongoDB. «db» refere-se a toda a base de dados e «estudiantes» à pasta da coleção na qual serão realizadas as diferentes operações. Em seguida, é incluído o método que será aplicado.
O método find() serve para procurar documentos específicos. Se este campo for deixado em branco, serão obtidos todos os documentos da coleção. No exemplo anterior, no entanto, são procurados todos os documentos em que o campo «Apelido» tem o valor «Pérez».
O método updateOne() pode ser utilizado para sobrescrever valores num documento. No exemplo, este método inclui dois argumentos. O primeiro é o chamado critério de seleção e o segundo é o par chave-valor que se deseja sobrescrever. Neste caso, no campo «Semestre» será escrito um 2 para todos os alunos com o apelido «Pérez».
O método deleteOne() recebe um único argumento, que indica o critério de seleção segundo o qual os documentos devem ser eliminados. No exemplo, todos os estudantes com o apelido «Martín» são eliminados da base de dados. Por outro lado, o método insertOne() também recebe um argumento, embora, neste caso, seja o conteúdo completo em formato JSON do documento a ser inserido. Ao inserir documentos, é importante lembrar que cada documento de uma coleção MongoDB consiste em um ID de objeto de 12 bytes em formato hexadecimal. Se esse parâmetro não for especificado ao inserir o documento, o MongoDB gera automaticamente um ID.
Vantagens do MongoDB
O design do MongoDB apresenta várias vantagens para os utilizadores, especialmente no que diz respeito à flexibilidade e escalabilidade. Por um lado, o armazenamento de dados baseado em documentos permite que nem todas as entradas tenham os mesmos atributos, como é o caso das bases de dados relacionais. Graças a isso, é possível armazenar dados não estruturados e semiestruturados. Além disso, é possível reestruturar documentos individuais (por exemplo, adicionando ou removendo um atributo/campo) sem ter que fazer o mesmo com outros documentos da mesma pasta. Como o BSON é o formato em que os documentos são armazenados, há outra vantagem importante: as bases de dados MongoDB oferecem um alto grau de compatibilidade com muitas plataformas JavaScript comuns.
Além do armazenamento de dados não estruturados, o MongoDB também oferece um alto grau de escalabilidade horizontal sem violar os princípios do modelo ACID (Atomicidade, Consistência, Isolamento, Durabilidade). No entanto, com bancos de dados distribuídos, é difícil garantir a coerência, pois nem todos os dados são armazenados no mesmo servidor. Se forem feitas alterações em vários documentos ao mesmo tempo, elas não podem ser adotadas imediatamente por todos os servidores envolvidos. Se o volume de solicitações for alto, podem ser gerados dados inconsistentes. No entanto, desde o lançamento do MongoDB 4.2 em 2019, é possível fazer alterações em vários documentos em diferentes servidores sem comprometer a consistência ou a disponibilidade dos dados.
Possíveis cenários de aplicação para MongoDB
O MongoDB é sempre uma excelente opção quando se deseja realizar projetos web baseados em grandes conjuntos de dados não estruturados. Sem estar vinculado a nenhum esquema, o trabalho baseado em documentos é o método ideal para gerenciar um grande número de dados diferentes que devem ser armazenados e processados rapidamente.
A escalabilidade horizontal deste sistema de bases de dados é quase ilimitada, pois as bases de dados podem ser facilmente distribuídas em diferentes servidores sem comprometer a funcionalidade. Para garantir a segurança e a disponibilidade dos dados a longo prazo, o MongoDB facilita a criação de cópias de todos os dados e disponibiliza-as em diferentes servidores. Esta base de dados orientada para documentos também desempenha um papel importante na síntese de grandes quantidades de dados de uma ou mais fontes.
Assim, a implementação do MongoDB é adequada para quase todos os tipos de projetos web que desejam se caracterizar por:
- Escalabilidade: se o seu projeto web está em crescimento, provavelmente aumentará o número de visitas e solicitações, o que exige uma maior capacidade de resposta por parte da base de dados.
- Disponibilidade: uma das prioridades de qualquer projeto web é a disponibilidade em todos os momentos, mesmo em caso de falhas no servidor.
- Flexibilidade: um projeto deve poder ser ajustado a qualquer momento de forma dinâmica.
Não sabe qual é o modelo de base de dados mais adequado para o seu projeto? Não precisa tomar uma decisão, também é possível optar por uma combinação de diferentes modelos que pode representar a solução perfeita para as suas necessidades.