quinta-feira, 10 de setembro de 2026

Análise de performance – AWS RDS (MySQL, MariaDB, PostgreSQL) e DynamoDB

 


Os testes foram executados em uma instância AWS db.t4g.micro (2 vCPU ARM Graviton, 1 GB RAM) com SSD GP2, utilizando commits em lote de 10.000 registros. O principal indicador é o tempo total de inserção (em segundos).




Observações:

  • MariaDB apresentou a melhor escalabilidade.

  • MySQL também escalou linearmente, porém cerca de 75% mais lento.

  • PostgreSQL manteve crescimento linear, mas com latência muito superior.

  • DynamoDB teve comportamento consistente, porém limitado pela capacidade de gravação.

Ganho relativo entre os bancos

Considerando o teste de 1 milhão de registros:




Quanto maior a barra, maior o aproveitamento da infraestrutura.

Interpretação técnica

1. MariaDB (PyMySQL) — Melhor desempenho

Tempo: 22,64 s

Motivos prováveis:

  • Engine InnoDB muito eficiente para cargas de escrita em lote.

  • Commit a cada 10.000 registros reduz drasticamente o custo de sincronização em disco.

  • Menor overhead de protocolo em relação ao PostgreSQL.

  • Excelente aproveitamento da memória limitada (1 GB).

Conclusão: melhor opção para workloads de ETL, IoT e importação massiva.

2. MySQL (PyMySQL)

Tempo: 39,72 s

Embora utilize praticamente a mesma arquitetura do MariaDB, ficou cerca de 1,75× mais lento.

Possíveis causas:

  • Diferenças de otimização entre versões do MySQL e MariaDB.

  • Configuração padrão do RDS (flush, buffer pool e parâmetros de redo log).

  • Implementação do driver PyMySQL.

Ainda assim, o desempenho é muito bom para aplicações transacionais.

3. PostgreSQL (psycopg2)

Tempo: 2.307 s (38,5 minutos)

O resultado é bastante inferior.

Tecnicamente, isso pode ocorrer devido a:

  • WAL (Write Ahead Log) gerando maior volume de escrita.

  • Sincronização (fsync) a cada commit.

  • Checkpoints frequentes em instância com apenas 1 GB RAM.

  • Inserções individuais em vez de COPY, execute_values ou COPY FROM.

Importante: esse resultado não significa que PostgreSQL seja lento. Ele indica que o método de inserção utilizado não foi o mais eficiente para esse banco.

Com COPY, o desempenho normalmente aumenta em dezenas de vezes.

4. DynamoDB

O comportamento foi curioso.

Método

1 milhão

Padrão

1224 s

Otimizado

1254 s

O modo “otimizado para gravação (40.000)” praticamente não trouxe ganho.

Isso sugere que o gargalo não estava na capacidade provisionada, mas em outro fator, como:

  • Latência de rede.

  • BatchWriteItem limitado a 25 itens.

  • Overhead do cliente Python.

  • Particionamento (hot partition).

Considerações sobre a infraestrutura

Instância utilizada

Recurso

Valor

Tipo

db.t4g.micro

vCPU

2

RAM

1 GB

Armazenamento

GP2 SSD

Essa é uma instância de entrada. Mesmo assim, MariaDB ultrapassou 44 mil inserções por segundo, demonstrando que o gargalo não foi o SSD GP2, mas principalmente o mecanismo de persistência de cada banco.

Conclusão

Melhor desempenho: MariaDB

22,64 s para 1 milhão de registros, cerca de 44 mil registros/s.

MySQL foi competitivo

Entregou cerca de 25 mil registros/s, suficiente para muitas aplicações OLTP.

PostgreSQL precisa de outra estratégia

Para cargas massivas, o correto seria testar COPY FROM ou execute_values; o método atual penaliza fortemente o banco.

DynamoDB não é indicado para carga massiva sequencial

Ele é excelente para baixa latência e escalabilidade distribuída, mas não para importar milhões de registros via cliente Python nesse formato.









terça-feira, 15 de outubro de 2024

Iniciando instâncias EC2 na AWS com Python(boto3) - Starting instances at AWS with Python

 




Infraestrutura como Código (IaC) é uma prática em que a infraestrutura de TI, como servidores, redes e armazenamento, é provisionada e gerenciada por meio de arquivos de configuração em vez de processos manuais. Com o IaC, toda a infraestrutura é descrita em código, permitindo que ela seja versionada, auditada e replicada de forma automatizada e consistente. Essa abordagem melhora a eficiência, a escalabilidade e a confiabilidade da gestão de infraestruturas complexas, principalmente em ambientes de nuvem.

Passos:

Criar um usuário no AWS IAM com Access Keys

  • Acesse o console da AWS.
  • Navegue até o serviço IAM (Identity and Access Management).
  • Crie um novo usuário com as permissões necessárias (no mínimo a política AmazonEC2FullAccess para o uso do EC2).
  • No processo de criação, selecione a opção para gerar Access Key e Secret Key.
Salve essas chaves em local seguro (você precisará delas para configurar o boto3).




Configurar boto3 com as Access Keys
  • Instale o boto3 se ainda não tiver instalado:
                    pip install boto3



Criar um código Python para iniciar instâncias EC2
  • A seguir está o código que usa o boto3 para iniciar uma instância EC2.

import boto3

# Definir as credenciais de acesso (access key e secret key)
ACCESS_KEY = 'sua_access_key_aqui'
SECRET_KEY = 'sua_secret_key_aqui'
REGION = 'us-east-1'  # Região em que você deseja iniciar a instância

# Criar uma sessão no boto3 com as credenciais e região configurada
ec2_client = boto3.client(
    'ec2',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    region_name=REGION
)

# Parâmetros para iniciar a instância
instance_params = {
    'ImageId': 'ami-0c55b159cbfafe1f0',  # AMI ID da instância (Ubuntu, Amazon Linux, etc.)
    'InstanceType': 't2.micro',           # Tipo da instância
    'MinCount': 1,                        # Número mínimo de instâncias
    'MaxCount': 1,                        # Número máximo de instâncias
    'KeyName': 'nome-da-sua-keypair',     # Nome do par de chaves (já criado no EC2)
    'TagSpecifications': [
        {
            'ResourceType': 'instance',
            'Tags': [
                {'Key': 'Name', 'Value': 'MinhaInstanciaEC2'}
            ]
        }
    ]
}

# Iniciar a instância EC2
response = ec2_client.run_instances(**instance_params)

# Obter o ID da instância criada
instance_id = response['Instances'][0]['InstanceId']
print(f'Instância {instance_id} foi iniciada com sucesso.')


Dica importante, você pode postar usar esse código no Google Colab e fazer toda a operação por lá, sem a necessidade de Python ser instalado na sua máquina local.

Até mais pessoal

Fonte : aws.com


terça-feira, 21 de julho de 2020

Analisando gastos do Governo Federal utilizando Python




quarta-feira, 8 de julho de 2020

Jogo em Python utilizando a biblioteca Game2dBoard


Segue um jogo desenvolvido em Python utilizando a biblioteca Game2DBoard

O jogo consistem em acertar a bolinha com o clique do mouse, a bolinha inicia na parte superior e vai descendo para a parte inferior,  cada acerto gera um ponto, um erro e o jogo termina. Cada acerto a bolinha inicia novamente na parte superior, por[em agora com uma velocidade maior.


Biblioteca Game2dBoard para jogos simples




sexta-feira, 19 de junho de 2020

Beneficiários do Auxílio Emergencial por Cidade









Portal da Transparência

Todos os dados contidos no link acima foram retirados do Portal da Transparência, a contraprova pode ser feita lá. 

Como denunciar ?

Muitos foram os beneficiários e também, muitos receberam valores sem necessidade. Se você souber de algum caso, pode denunciar no Portal da Transparência neste link, basta apenas alterar a Busca Livre por sobrenome e mudar o município e o mês de consulta. A consulta é lenta. 




Sobre o portal 

É de conhecimento de todos que o Portal da Transparência veio para mostrar onde e como o dinheiro público é gasto. A consulta pública pode ser realizada por qualquer cidadão, porém, como já disse acima, a consulta é lenta,  os dados abertos podem ser baixados e acessados diretamente no Portal.

Desenvolvedor 

Utilizando alguma linguagem de programação, é possível separar as informações por cidade, e isso foi feito utilizando a linguagem Python.

Os dados abertos pode ser obtidos aqui em formato CSV.



Se você quer o código Python para separação por cidades, também pode estar fazendo download aqui


quarta-feira, 13 de maio de 2020

Maven x Netbeans - Erro de repositório

Olá pessoal


Há muito tempo venho tentando  utilizar Maven nos projetos em Netbeans, e sempre havia um erro na tentativa de download dos arquivos do repositório http://repo.maven.apache.org



Por muitas vezes pensei que era erro no sistema operacional, na minha rede, no firewall, no antivírus ou sei lá o que mais.

Pois bem, tentei resolver e aqui vai a resposta, pode parecer simples, mas isso é o resultado depois de uma hora de tentativas frustradas.

Qual a causa.
O repositório central utilizado pelo Maven era

http://repo.maven.apache.org/    e parece que a URL mudou para
https://repo.maven.apache.org/maven2/
 (foi adiciona um s no http, camada adicional de segurança SSL/TLS).

Abaixo seguem os passos rápidos para realizar essa mudança no Netbeans e ser feliz, ou seja adicionando apenas o repositório com SSL 


Passo 1
Acesse este arquivo na sua máquina Windows

   C:\Program Files\NetBeans 8.2 RC\java\maven\conf\settings.xml

Passo 2
    Copie e cole o conteúdo abaixo no arquivo citado no passo 1.


<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><pluginGroups></pluginGroups><proxies></proxies><servers></servers><mirrors><mirror><id>internal-repository</id><name>Maven Repository Manager running on https://repo1.maven.org/maven2</name><url>
https://repo.maven.apache.org/maven2/</url><mirrorOf>*</mirrorOf></mirror></mirrors><profiles></profiles></settings>

Passo 3
    Crie o projeto Maven e visualize as dependências sendo baixadas tranquilamente.