Durante décadas, têm sido uti­li­za­das bases de dados re­la­ci­o­nais para a gestão de dados. No entanto, o tipo de dados que compõem as apli­ca­ções web modernas fez com que bases de dados com uma abordagem orientada para do­cu­men­tos, como o MongoDB, se po­si­ci­o­nas­sem como sérios con­cor­ren­tes do modelo tra­di­ci­o­nal. 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 do­cu­men­tos. Ao contrário das bases de dados re­la­ci­o­nais, nas quais os dados são ar­ma­ze­na­dos numa tabela es­tru­tu­rada, nas bases de dados MongoDB os dados são ar­ma­ze­na­dos nas chamadas coleções não es­tru­tu­ra­das.

Além disso, é im­por­tante 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 Ja­vaS­cript. Esta abordagem permite que os registos sejam ar­ma­ze­na­dos no formato BSON, que segue o modelo do formato JSON. Esta ca­rac­te­rís­tica pos­si­bi­lita o suporte para todos os tipos de dados Ja­vaS­cript, o que torna o MongoDB a escolha ideal para inúmeras pla­ta­for­mas baseadas nesta linguagem de pro­gra­ma­ção.

Outra ca­rac­te­rís­tica im­por­tante das bases de dados MongoDB é a sua ca­pa­ci­dade de es­ca­la­bi­li­dade ho­ri­zon­tal. Ou seja, os dados de uma base de dados podem ser dis­tri­buí­dos entre vários ser­vi­do­res, em vez de ficarem con­cen­tra­dos num local central, o que pode ter um impacto positivo na dis­po­ni­bi­li­dade dos dados e no de­sem­pe­nho geral da base de dados. Em geral, essa abordagem de es­ca­la­bi­li­dade costuma ser mais rentável do que a al­ter­na­tiva de po­ten­ci­a­li­zar um único servidor com hardware de maior ca­pa­ci­dade, conhecida como es­ca­la­bi­li­dade vertical.

Como funciona o MongoDB?

O MongoDB, em contraste com o MySQL, adota uma abordagem diferente de ar­ma­ze­na­mento de dados, fun­ci­o­nando de forma orientada a do­cu­men­tos. Em vez de armazenar os dados em forma de tabela, em que cada linha é formada por um conjunto fixo de campos que devem ser pre­en­chi­dos com valores, o MongoDB armazena os dados em do­cu­men­tos BSON não es­tru­tu­ra­dos. Cada documento pode conter a quan­ti­dade de campos desejada, e não é ne­ces­sá­rio que eles coincidam entre si. Dessa forma, os do­cu­men­tos no MongoDB subs­ti­tui­riam as linhas em uma tabela SQL, e os campos definidos nesses do­cu­men­tos subs­ti­tui­riam as colunas. Existem várias fer­ra­men­tas dis­po­ní­veis para trabalhar com bases de dados MongoDB. Além do conhecido MongoDB Shell, existe também o MongoDB Compass, uma fer­ra­menta gráfica para gerir bases de dados MongoDB. No entanto, vamos con­cen­trar-nos nos comandos shell.

Como o MQL é baseado em Ja­vaS­cript, 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 ge­ren­ci­a­mento da sua base de dados MongoDB. Todos eles são ex­pli­ca­dos na do­cu­men­ta­çã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 con­se­cu­ti­vos com a mesma estrutura numa base de dados MongoDB. «db» refere-se a toda a base de dados e «es­tu­di­an­tes» à pasta da coleção na qual serão re­a­li­za­das as di­fe­ren­tes operações. Em seguida, é incluído o método que será aplicado.

O método find() serve para procurar do­cu­men­tos es­pe­cí­fi­cos. Se este campo for deixado em branco, serão obtidos todos os do­cu­men­tos da coleção. No exemplo anterior, no entanto, são pro­cu­ra­dos todos os do­cu­men­tos em que o campo «Apelido» tem o valor «Pérez».

O método updateOne() pode ser utilizado para so­bres­cre­ver valores num documento. No exemplo, este método inclui dois ar­gu­men­tos. O primeiro é o chamado critério de seleção e o segundo é o par chave-valor que se deseja so­bres­cre­ver. 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 do­cu­men­tos devem ser eli­mi­na­dos. No exemplo, todos os es­tu­dan­tes com o apelido «Martín» são eli­mi­na­dos 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 do­cu­men­tos, é im­por­tante lembrar que cada documento de uma coleção MongoDB consiste em um ID de objeto de 12 bytes em formato he­xa­de­ci­mal. Se esse parâmetro não for es­pe­ci­fi­cado ao inserir o documento, o MongoDB gera au­to­ma­ti­ca­mente um ID.

Vantagens do MongoDB

O design do MongoDB apresenta várias vantagens para os uti­li­za­do­res, es­pe­ci­al­mente no que diz respeito à fle­xi­bi­li­dade e es­ca­la­bi­li­dade. Por um lado, o ar­ma­ze­na­mento de dados baseado em do­cu­men­tos permite que nem todas as entradas tenham os mesmos atributos, como é o caso das bases de dados re­la­ci­o­nais. Graças a isso, é possível armazenar dados não es­tru­tu­ra­dos e se­mi­es­tru­tu­ra­dos. Além disso, é possível re­es­tru­tu­rar do­cu­men­tos in­di­vi­du­ais (por exemplo, adi­ci­o­nando ou removendo um atributo/campo) sem ter que fazer o mesmo com outros do­cu­men­tos da mesma pasta. Como o BSON é o formato em que os do­cu­men­tos são ar­ma­ze­na­dos, há outra vantagem im­por­tante: as bases de dados MongoDB oferecem um alto grau de com­pa­ti­bi­li­dade com muitas pla­ta­for­mas Ja­vaS­cript comuns.

Além do ar­ma­ze­na­mento de dados não es­tru­tu­ra­dos, o MongoDB também oferece um alto grau de es­ca­la­bi­li­dade ho­ri­zon­tal sem violar os prin­cí­pios do modelo ACID (Ato­mi­ci­dade, Con­sis­tên­cia, Iso­la­mento, Du­ra­bi­li­dade). No entanto, com bancos de dados dis­tri­buí­dos, é difícil garantir a coerência, pois nem todos os dados são ar­ma­ze­na­dos no mesmo servidor. Se forem feitas al­te­ra­ções em vários do­cu­men­tos ao mesmo tempo, elas não podem ser adotadas ime­di­a­ta­mente por todos os ser­vi­do­res en­vol­vi­dos. Se o volume de so­li­ci­ta­ções for alto, podem ser gerados dados in­con­sis­ten­tes. No entanto, desde o lan­ça­mento do MongoDB 4.2 em 2019, é possível fazer al­te­ra­ções em vários do­cu­men­tos em di­fe­ren­tes ser­vi­do­res sem com­pro­me­ter a con­sis­tên­cia ou a dis­po­ni­bi­li­dade 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 es­tru­tu­ra­dos. Sem estar vinculado a nenhum esquema, o trabalho baseado em do­cu­men­tos é o método ideal para gerenciar um grande número de dados di­fe­ren­tes que devem ser ar­ma­ze­na­dos e pro­ces­sa­dos ra­pi­da­mente.

A es­ca­la­bi­li­dade ho­ri­zon­tal deste sistema de bases de dados é quase ilimitada, pois as bases de dados podem ser fa­cil­mente dis­tri­buí­das em di­fe­ren­tes ser­vi­do­res sem com­pro­me­ter a fun­ci­o­na­li­dade. Para garantir a segurança e a dis­po­ni­bi­li­dade dos dados a longo prazo, o MongoDB facilita a criação de cópias de todos os dados e dis­po­ni­bi­liza-as em di­fe­ren­tes ser­vi­do­res. Esta base de dados orientada para do­cu­men­tos também de­sem­pe­nha um papel im­por­tante na síntese de grandes quan­ti­da­des de dados de uma ou mais fontes.

Assim, a im­ple­men­ta­ção do MongoDB é adequada para quase todos os tipos de projetos web que desejam se ca­rac­te­ri­zar por:

  • Es­ca­la­bi­li­dade: se o seu projeto web está em cres­ci­mento, pro­va­vel­mente aumentará o número de visitas e so­li­ci­ta­ções, o que exige uma maior ca­pa­ci­dade de resposta por parte da base de dados.
  • Dis­po­ni­bi­li­dade: uma das pri­o­ri­da­des de qualquer projeto web é a dis­po­ni­bi­li­dade em todos os momentos, mesmo em caso de falhas no servidor.
  • Fle­xi­bi­li­dade: 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 com­bi­na­ção de di­fe­ren­tes modelos que pode re­pre­sen­tar a solução perfeita para as suas ne­ces­si­da­des.

Ir para o menu principal