Este repositório contém duas versões de um banco de dados ultra-simples BigaoDB:
- v1: append-only em arquivo texto, lookup O(N).
- v2: daemon em Python com índice em memória, lookup O(1) em execução contínua.
- Python 3.6+
- Linux (para socket Unix)
nc(netcat) instalado para o cliente CLIseq,awk(para gerar samples em shell)
-
Clone este repositório:
git clone https://github.com/SEU_USUARIO/bigaodb.git cd bigaodb -
Dê permissão de execução aos scripts:
chmod +x bigaodb_v1.py bigaoDB_v2.py bigaodb_cli.sh
Versão básica que grava cada par key,value em append-only e faz lookup varrendo o arquivo.
# Armazenar dados
./bigaodb_v1.py set nome Big
# Recuperar último valor de uma chave
./bigaodb_v1.py get nomePara criar um arquivo de testes com poucas linhas:
# 100 linhas, 10 chaves distintas
seq 100 | awk '{print "key"($1%10)",value"$1}' > bigaodb.dbEste arquivo tem 100 registros e 10 chaves distintas.
Versão que mantém um índice em memória vivo, exposto via Unix socket, eliminando reloads e garantindo lookup O(1).
# Inicia o daemon escutando em /tmp/bigaodb.sock
python3 bigaoDB_v2.py --db bigaodb.db --sock /tmp/bigaodb.sockUse o script cliente para enviar comandos ao daemon:
# No shell, sem necessidade de export
./bigaodb_cli.sh set usuario alice
./bigaodb_cli.sh get usuario # → aliceO cliente usa por padrão /tmp/bigaodb.sock; para mudar, defina a variável BIGAO_SOCK antes:
export BIGAO_SOCK=/caminho/outro.sock
./bigaodb_cli.sh get usuarioPara gerar um arquivo bigaodb.db com 50M de registros:
# Usando seq + awk (rápido)
seq 50000000 | awk '{print "key"$1",value"$1}' > bigaodb.dbOu, em Python:
#!/usr/bin/env python3
DB = "bigaodb.db"
with open(DB, "w") as f:
for i in range(1, 50000001):
f.write(f"key{i},value{i}\n")-
Sample pequeno (100 linhas):
time ./bigaodb_v1.py get key5 time ./bigaodb_cli.sh get key5
-
Sample grande (50 M linhas):
time ./bigaodb_v1.py get key49999999 # vários segundos time ./bigaodb_cli.sh get key49999999 # milissegundos, sem reload
Compare os tempos para ilustrar o ganho de manter o daemon vivo com índice em RAM.
BigaoDB — simples, didático e direto.