MySQL

MySQL ou PostgreSQL – Qual é o melhor?

Por em

Os bancos de dados relacionais (MySQL e PostgreSQL por exemplo) estão em uso há muito tempo. Eles se tornaram populares graças aos sistemas de gerenciamento, que implementam o modelo relacional extremamente bem, o que provou ser uma ótima maneira de trabalhar com dados.

Neste post, temos por objetivo descrever as principais características a se avaliar de ambos os bancos de dados, o que pode lhe ajudar a definir a melhor solução para o seu projeto.

 

Licença de código aberto

Uma das características mais interessantes do MySQL é a licença. O MySQL é um projeto de código aberto. Ou seja, o código fonte completo do MySQL está disponível gratuitamente. A licença válida para o MySQL é a GPL, assim, é garantido que o MySQL continuará disponível gratuitamente no sentido da ideia de código aberto.  É verdade que o software GPL pode ser usado sem pagamento de taxas, desde que se adeque a certas condições. Aqui na School of net nós possuímos diversos cursos de MySQL, você pode conhecer mais sobre essa e outras questão em nosso curso Iniciando com MySQL Parte 1.

Se você deseja usar um programa GPL como base para um produto comercial, você deve novamente disponibilizar seu próprio código-fonte livremente, no sentido de GPL, com as alterações feitas, caso tenham sido feitas. Isso raramente é algo que os desenvolvedores de produtos comerciais desejam fazer. Em geral, então, todo programa derivado do software GPL existe sob os termos da GPL. (GPL é, por assim dizer, transmitido.) O MySQL, além disso, agora é propriedade da Oracle Corporation e oferece várias edições pagas para uso exclusivo.

Já o PostgreSQL é desenvolvido pelo Grupo de Desenvolvimento Global do PostgreSQL, um grupo diversificado de várias empresas e colaboradores individuais. O PostgreSQL sempre foi open-source e apesar de ter uma licença própria, ela é muito parecida com as licenças BSD e MIT.

 

ACID

Atualmente as aplicações suportam vários usuários e sendo assim o banco de dados tem que garantir a confiabilidade nas transações, haja visto que muitas delas podem ocorrer forma concorrente. Daí vem o conceito de ACID,  que se refere às quatro propriedades de transação de um sistema de banco de dados. ACID vem do acrônimo de Atomicidade, Consistência, Isolamento e Durabilidade. Iremos explicar brevemente cada conceito abaixo:

Atomicidade: É o que trata a transação efetuada. Veja, caso a transação tenha sido efetuada com sucesso, o valor será alterado/incluído na base de uma forma correta. Caso ocorra algum erro e a mesma tenha sido abortada, a base não deve receber esta alteração “pela metade”.

Consistência: Este garante que o processo da transação respeite todas as normas pré estabelecidas na integridade dos dados, como o relacionamento entre chaves, a fim de que não ocorra nenhuma divergência no momento da transação.

Isolamento: Uma das propriedades mais interessantes, o isolamento é uma garantia do dado verídico, ou seja, ele garante que uma transação sendo executada agora, não seja sobreposta por outras no mesmo campo.

Durabilidade: Este garante a integridade do dado já inserido na base. Sendo mais objetivo, este garante que qualquer alteração feita com sucesso deve permanecer no banco até uma nova intervenção.

Em Resumo, a conformidade com o ACID garante que nenhum dado seja perdido ou mal comunicado em todo o sistema em caso ocorra uma falha, mesmo que várias alterações sejam feitas durante uma única transação.

O MySQL é apenas compatível com ACID ao usar os mecanismos InnoDB e NDB Cluster Storage. Já o PostgreSQL é compatível com ACID por padrão e garante que todos os requisitos sejam atendidos.

 

Conformidade com SQL

A conformidade com o SQL é um conjunto de diretrizes e padrões da linguagem de consulta estruturada(SQL) que um banco de dados deve atender. Isso é muito importante quando as empresas desejam trabalhar com bancos de dados heterogêneos para um aplicativo. Ter a conformidade com o SQL torna muito fácil mover dados de um banco de dados compatível com SQL para outro (ex. MySQL para PostgreSQL ou SQL Server). O padrão SQL vem evoluindo desde 1986 e existem várias versões.

O MySQL é parcialmente compatível com algumas destas versões. Existem várias diferenças entre os sistemas de privilégios do MySQL e do SQL padrão. Por exemplo, no MySQL, os privilégios para uma tabela não são revogados automaticamente quando você exclui uma tabela. Você deve explicitamente emitir uma instrução REVOKE para revogar privilégios de uma tabela. A lista completa destas diferenças você pode consultar neste link.

O PostgreSQL é em grande parte compatível com SQL. O PostgreSQL suporta a maioria dos principais recursos do SQL versão 2003. Dos 164 recursos obrigatórios exigidos para total conformidade com o SQL, o PostgreSQL está em conformidade com pelo menos 150.

 

Replicação

O objetivo de um mecanismo de replicação de banco de dados é permitir a manutenção de várias cópias idênticas de um mesmo dado em vários servidores. Os principais benefícios da replicação de dados são a redundância, que torna o sistema tolerante a falhas, a escalabilidade, pois há a possibilidade de um balanceamento de carga do sistema, com o acesso podendo ser distribuído entre as réplicas, e finalmente, o backup online dos dados, já que todas as réplicas estão sincronizadas.

As várias topologias de replicação suportadas no MySQL incluem:

  • Único mestre para uma réplica
  • Único mestre para várias réplicas
  • Replicação circular (A para B para C e de volta para A)
  • Replicação mestre para mestre

A principal topologia de replicação atualmente não suportada no MySQL é a replicação de várias fontes: ter um ou mais servidores mestres alimentando uma única réplica.

A replicação do PostgreSQL é baseada em uma tecnologia madura e há muito utilizada, denominada arquivamento de “write ahead log” (WAL). A tecnologia WAL está em uso desde a versão 7.1 e tem sido usada em recursos como backup/restauração e servidores de espera a quente (ou seja, servidores escravos off-line mantidos em sincronia com o mestre para entrar durante a recuperação de falhas) para alta disponibilidade.

O PostgreSQL 9.0 introduziu aprimoramentos significativos, produzindo um processamento WAL extremamente rápido que resulta em replicação quase em tempo real. As topologias de replicação suportadas no PostgreSQL incluem:

  • Único mestre para uma réplica
  • Único mestre para várias réplicas
  • Replicação em espera
  • Replicação Bidirecional
  • Replicação de fluxo de log lógico

Em resumo, para muitos casos de uso de aplicativos, a replicação do MySQL e do PostgreSQL  será uma escolha igualmente boa. A melhor maneira de determinar o que é certo para você é fazer o download de ambos e colocar cada um através de uma avaliação abrangente.

 

Desempenho

O desempenho é uma área que pode ser avaliada apenas olhando para as métricas de possíveis cenários, pois isso depende dos requisitos puros do usuário específico e da natureza do aplicativo.

É importante neste caso nós entendermos dois conceitos, bem importantes no que se refere a aplicações. Aí entram as famosas siglas OLTP e OLAP. OLTP é o termo usado para se referir aos sistemas transacionais, ou seja, os sistemas operacionais das organizações. São utilizados no processamento dos dados de rotina, que são gerados diariamente através dos sistemas informacionais da empresa e dão suporte às funções de execução do negócio organizacional.

Já o OLAP, do inglês “On-line Analytical Processing”, trata da capacidade de analisar grandes volumes de informações nas mais diversas perspectivas dentro de um Data Warehouse (DW). O OLAP também faz referência às ferramentas analíticas utilizadas no BI, para a visualização das informações gerenciais e dá suporte para as funções de análises do negócio organizacional.

O MySQL é um amplamente escolhido para projetos baseados na web, que precisam de um banco de dados simplesmente para transações diretas de dados. É comum, no entanto, que o MySQL tenha um baixo desempenho quando sobrecarregado por cargas pesadas ou ao tentar concluir consultas complexas.

O MySQL funciona bem em sistemas OLAP / OLTP quando apenas velocidades de leitura são necessárias. O MySQL quando funciona com o mecanismo de armazenamento do InnoDB fornece velocidades de leitura/gravação muito boas para cenários OLTP. No geral, o MySQL funciona bem com cenários de alta concorrência. O MySQL é confiável e funciona bem com aplicativos de Business Intelligence, já que os aplicativos de inteligência de negócios são tipicamente pesados ​​para leitura.

O PostgreSQL é amplamente utilizado em grandes sistemas onde as velocidades de leitura e gravação são cruciais e os dados precisam ser validados. Além disso, ele suporta uma variedade de otimizações de desempenho que estão disponíveis apenas em soluções comerciais, como suporte a dados geoespaciais, concorrência sem bloqueios de leitura e assim por diante (por exemplo, Oracle, SQL Server).

Em geral, o desempenho do PostgreSQL é melhor utilizado em sistemas que exigem execução de consultas complexas. O PostgreSQL funciona bem em sistemas OLTP / OLAP quando as velocidades de leitura/gravação são necessárias e é necessária uma análise extensiva dos dados.

O PostgreSQL também funciona bem com aplicativos de Business Intelligence, mas é mais adequado para aplicações de Data Warehousing e análise de dados que exigem velocidades rápidas de leitura/gravação.

Quer saber mais como funciona o PostgreSQL? Veja o nosso curso de PostgreSQL e fique por dentro de tudo!

 

Suporte de Concorrência

Concorrência significa que vários usuários podem ter acesso aos dados ao mesmo tempo. É uma das principais características consideradas ao desenvolver um sistema, porque aumenta a capacidade de muitas pessoas acessarem e usarem o banco de dados em vários locais simultaneamente.

Este conceito em banco de dados é chamado de MVCC. MVCC significa controle de simultaneidade multiversão. É um método de controle de simultaneidade comumente usado pelos sistemas de gerenciamento de banco de dados para fornecer acesso simultâneo ao banco de dados.

O MySQL só tem suporte a MVCC no InnoDB. O PostgreSQL aborda a concorrência de maneira eficiente com sua implementação de MVCC, que alcança níveis muito altos de simultaneidade.

 

Segurança

A segurança do banco de dados refere-se às medidas coletivas usadas para proteger um banco de dados contra uso ilegítimo, ameaças mal-intencionadas e ataques. É um termo amplo que inclui uma infinidade de processos, ferramentas e metodologias que garantem a segurança em um ambiente de banco de dados.

O MySQL implementa segurança com base em Access Control Lists (ACLs) para todas as conexões, consultas e outras operações que um usuário pode tentar executar. Há também algum suporte para conexões criptografadas por SSL entre clientes e servidores MySQL.

O PostgreSQL possui funções e funções herdadas para definir e manter permissões. O PostgreSQL possui suporte SSL nativo para conexões, para criptografar as comunicações cliente/servidor. Ele também tem segurança em nível de linha. Além disso, o PostgreSQL vem com um aprimoramento embutido chamado SE-PostgreSQL que fornece controles de acesso adicionais baseados na política de segurança do SELinux.

 

Suporte para Linguagens de Programação

O suporte a linguagens de programação ajuda uma ampla gama de desenvolvedores a executar várias tarefas no idioma em que são mais proficientes. Os desenvolvedores podem decidir livremente, caso a caso, se devem executar um determinado procedimento no servidor ou no cliente, porque o servidor suporta uma ampla gama de linguagens de programação diferentes para funções de banco de dados. Linguagens de programação tendem a dar mais poder aos desenvolvedores.

O MySQL possui  suporte para uma variedade de linguagens de programação, incluindo: C / C ++, Java, JavaScript, .Net, Perl, Python, e Ruby.

O PostgreSQL também suporta uma ampla variedade de linguagens de programação, incluindo: C / C++, Java, JavaScript, .Net, Perl, Python, Ruby, Tcl e outros. É até mesmo possível executar código fornecido pelo usuário em processos separados (ou seja, executando como trabalhadores em segundo plano).

 

Sistema de tipo extensível

Um banco de dados que suporta sistema de tipos extensíveis pode ser estendido pelo usuário de várias maneiras, como a adição de novos tipos de dados, funções, operadores, funções agregadas, métodos de índice e linguagens procedurais.

O MySQL não oferece suporte para extensibilidade. O PostgreSQL possui vários recursos dedicados à extensibilidade. É possível adicionar novos tipos, novas funções, e etc.

 

Suporte da Comunidade

O MySQL tem uma grande comunidade de colaboradores que, particularmente após a aquisição pela Oracle, se concentra principalmente na manutenção de recursos existentes com alguns novos recursos surgindo ocasionalmente.

O PostgreSQL tem uma comunidade muito forte e ativa que melhora constantemente os recursos existentes, enquanto os inovadores committers se esforçam para garantir que ele continue sendo o banco de dados mais avançado, com novos recursos e segurança de ponta.

 

Cloud Hosting

À medida que mais e mais empresas optam por transferir seus dados para a nuvem, a capacidade de localizar provedores de nuvem que suportam seu banco de dados torna-se cada vez mais importante. A hospedagem na nuvem permite a elasticidade dos servidores, permitindo que você expanda ou contraia sua capacidade rapidamente. Ele também permite reduzir o tempo de inatividade, gerenciando facilmente as cargas de trabalho de pico.

O MySQL é suportado por todos os principais provedores de serviços em nuvem, incluindo Amazon, Google e Microsoft. O mesmo ocorre com o PostgreSQL .

 

Concluindo

Baseado nestas características você pode definir qual o melhor banco de dados para o seu projeto. Se você possui aplicações web simples, use o MySQL. Se você possui um sistema mais robusto, use o PostgreSQL. Aqui na School of Net, possuímos um plano de estudos voltado para banco de dados, onde ensinamos desde o início a trabalhar com ambos os bancos. Espero que vocês tenham gostado do nosso artigo e até a próxima!