DEV Community

Cover image for Como inicializar uma base de dados para um Sistema Modularizado?
Ortiz de Arcanjo António David
Ortiz de Arcanjo António David

Posted on

1

Como inicializar uma base de dados para um Sistema Modularizado?

Definições Relacionadas

- Inicialização da base de dados: Processo de criar e configurar a estrutura necessária na base de dados para suportar a aplicação. Isso inclui a criação de tabelas, views, procedures, triggers e outros objetos necessários para o funcionamento do sistema.
- Script da base de dados: Conjunto de instruções SQL que define e manipula a estrutura da base de dados. Podem conter comandos para criar tabelas, definir índices, inserir dados de exemplo e realizar outras operações necessárias.
- Objectos da base de dados: Entidades na base de dados, como tabelas, views, triggers e procedures que são usadas para armazenar e manipular dados.
- Transações: Unidades lógicas de trabalho numa base de dados. Garantem que um conjunto de operações sejam executadas com sucesso como uma única unidade, ou sejam completamente revertidas.
- Schema: Colecção de objectos de banco de dados, incluindo tabelas, views, stored procedures, etc. Ele serve para organizar e agrupar esses objectos.
- Módulo: Parte distinta e isolada da aplicação, frequentemente associada a um conjunto específico de funcionalidades.

Cenário no Contexto de um Sistema Modularizado

Em um sistema modular, é uma prática comum organizar diversos elementos, por meio de Schemas. Cada Schema actua como uma unidade que agrupa objectos relacionados a um módulo específico do sistema. Conforme o software evolui, a quantidade de tabelas aumenta, o que por sua vez aumenta a complexidade na administração dos scripts da base de dados.
O principal desafio neste cenário está na inicialização dos scripts da base de dados, pois para cada módulo, é necessário lidar com múltiplos scripts. A etapa de inicialização envolve não apenas a criação dos Schemas, mas também a inclusão dos scripts associados a cada Schema. A complexidade aumenta exponencialmente à medida que o número de módulos e, consequentemente, de scripts, cresce.
A inicialização manual da base de dados torna-se extremamente desafiadora quando há uma grande quantidade de módulos, considerando que cada módulo pode ter múltiplos scripts associados. A escalabilidade do software resulta em uma crescente complexidade na gestão dos processos de inicialização.
Para enfrentar a complexidade estrutural durante a inicialização da base de dados, é recomendado adoptar um método adequado, alinhado à familiaridade e preferências da equipa de desenvolvimento. Existem abordagens tanto automatizadas quanto manuais, cada uma oferecendo benefícios específicos.

Métodos para Inicializar uma Base de Bados

- Cópia manual dos Scripts para a base de dados: Criando scripts SQL ou outro formato compatível e executá-los manualmente no console de gerenciamento do banco de dados.
- Scripts de CLI (Bash ou PowerShell): Utilizando scripts da linha de comandos para automatizar o processo de inicialização. Isso pode incluir a execução de comandos SQL ou a chamada de utilitários específicos da base de dados.
- Scripts Python: Desenvolvendo scripts em Python para manipular a inicialização da base de dados, aproveitando a facilidade da linguagem.
- Migrations: Utilizando frameworks de migração oferecidas pela linguagem de programação. Migrations permitem gerenciar alterações no esquema do banco de dados de forma estruturada ao longo do tempo.
- Funções usando a linguagem de implementação: Implementando funções específicas na linguagem de programação principal do sistema. Por exemplo, usando funções Golang para criar tabelas, estabelecer índices e realizar outras operações de inicialização.
- Ferramentas dedicadas: Utilizando ferramentas especializadas, projetadas para gerenciar migrações e inicialização de bancos de dados de maneira eficiente e controlada. Essas ferramentas muitas vezes oferecem recursos avançados, como versionamento automático e rollback. Ex: Flyway e Liquibase.

Método adoptado para inicialização

Neste artigo, direcionaremos nossa atenção para a inicialização por meio da implementação de funções utilizando a linguagem Golang. Essa abordagem concede-nos o controle da execução dos scripts, a capacidade de definir a ordem de execução, maior flexibilidade para incorporar operações e, se necessário, utilizar transações na base de dados.

Passos para a Inicialização

  • Inclusão dos scripts da base dados num directório do projecto (Ex: /database).
  • Organização da base de dados em Schemas (representando os módulos).
  • Ler os scripts a partir desse directório.
  • Executar cada script, adoptando o conceito de transações.
  • Mostrar os resultados de cada processamento.

Vantagens da utilização

- Versionamento dos scripts: Os scripts podem ser versionados usando um sistema de controle de versão, o que facilita o gerenciamento das mudanças.
- Incialização dos scripts desejados: Os scripts podem ser selecionados para inicialização, o que permite inicializar apenas os scripts necessários.
- Controle da ordem de execução: A ordem de execução dos scripts pode ser controlada, o que garante que a base de dados seja inicializada corretamente.
´

Desafios dessa abordagem

- Manutenção da Consistência: Garantir que os scripts ou as operações de inicialização estejam consistentes ao longo do tempo, especialmente em sistemas complexos com diversas versões e ambientes.
- Controle de Versão: Gerenciar efetivamente as versões dos scripts ou migrações para evitar conflitos e garantir que a base de dados esteja alinhada com a versão do código-fonte.
- Gerenciamento de Erros: Lidar com erros durante o processo de inicialização, garantindo que falhas não comprometam a integridade da base de dados e possam ser corrigidas de maneira eficiente.
- Desafios de Escala: À medida que a aplicação cresce, a inicialização do banco de dados pode se tornar mais complexa. Manter a eficiência e o desempenho durante esse processo é crucial.

Sugestões

- Automatização Contínua: Integrar a inicialização do banco de dados nos processos de integração contínua para garantir que as alterações no código e no esquema do banco de dados sejam refletidas automaticamente.
- Documentação Detalhada: Manter documentação detalhada dos scripts, migrações ou funções de inicialização para facilitar a compreensão e a resolução de problemas futuros.
- Testes Adequados: Implementar testes rigorosos para os scripts de inicialização, migrações e operações no banco de dados, garantindo que as alterações sejam testadas antes de serem aplicadas em ambientes de produção.
**- Controle de Acesso: **Garantir que apenas usuários autorizados tenham permissão para executar operações de inicialização e que as credenciais necessárias sejam gerenciadas de forma segura.

Conclusão

A escolha da abordagem para inicialização do banco de dados depende das necessidades específicas do projeto, da equipe e da complexidade do sistema. Cada método apresenta vantagens e desafios, sendo crucial avaliar esses aspectos antes de decidir qual abordagem adotar. A integração contínua, documentação adequada e testes eficientes são fundamentais para garantir uma inicialização de banco de dados suave e confiável ao longo do ciclo de vida do projeto.

Exemplo

Incialização de uma base de dados modularizada, usando Golang e PostgreSQL.
Código Fonte: https://github.com/ortizdavid/golang-modular-software

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay