Atualiza a configuração do Docker para usar SQLite3, incluindo a criação de um novo banco de dados e a modificação do Dockerfile. O README foi atualizado para refletir as mudanças na estrutura do projeto e no uso do servidor. A lógica do código foi adaptada para suportar operações com SQLite3, substituindo o uso anterior do BoltDB.
This commit is contained in:
+118
@@ -0,0 +1,118 @@
|
||||
# Migração para SQLite3
|
||||
|
||||
Este documento descreve como migrar o YASUC de BoltDB para SQLite3.
|
||||
|
||||
## Por que migrar para SQLite3?
|
||||
|
||||
- **Melhor compatibilidade**: SQLite3 é mais amplamente suportado
|
||||
- **Ferramentas de administração**: Mais ferramentas disponíveis para gerenciar dados
|
||||
- **Consultas SQL**: Possibilidade de fazer consultas complexas
|
||||
- **Backup mais simples**: Arquivo único mais fácil de fazer backup
|
||||
|
||||
## Estrutura do Banco SQLite3
|
||||
|
||||
```sql
|
||||
CREATE TABLE pastes (
|
||||
hash TEXT PRIMARY KEY, -- Hash SHA-256 do conteúdo
|
||||
content TEXT NOT NULL, -- Conteúdo do paste
|
||||
created_at INTEGER NOT NULL -- Timestamp de criação
|
||||
);
|
||||
```
|
||||
|
||||
## Passos para Migração
|
||||
|
||||
### 1. Backup dos Dados Atuais
|
||||
|
||||
```bash
|
||||
# Fazer backup do banco BoltDB atual
|
||||
cp data/yasuc.db data/yasuc.db.backup.$(date +%Y%m%d_%H%M%S)
|
||||
```
|
||||
|
||||
### 2. Executar Script de Migração
|
||||
|
||||
```bash
|
||||
# Executar o script de migração automática
|
||||
chmod +x scripts/migrate.sh
|
||||
./scripts/migrate.sh
|
||||
```
|
||||
|
||||
### 3. Migração Manual (Opcional)
|
||||
|
||||
Se você quiser migrar dados existentes do BoltDB para SQLite3:
|
||||
|
||||
```bash
|
||||
# Compilar e executar o script de migração
|
||||
go run cmd/migrate/main.go -bolt data/yasuc.db -sqlite data/yasuc.sqlite3
|
||||
```
|
||||
|
||||
### 4. Testar a Aplicação
|
||||
|
||||
```bash
|
||||
# Reconstruir e executar o container
|
||||
docker-compose down
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
## Verificação da Migração
|
||||
|
||||
### Verificar se o banco SQLite3 foi criado:
|
||||
|
||||
```bash
|
||||
sqlite3 data/yasuc.sqlite3 ".tables"
|
||||
```
|
||||
|
||||
### Verificar estrutura da tabela:
|
||||
|
||||
```bash
|
||||
sqlite3 data/yasuc.sqlite3 ".schema pastes"
|
||||
```
|
||||
|
||||
### Contar número de pastes:
|
||||
|
||||
```bash
|
||||
sqlite3 data/yasuc.sqlite3 "SELECT COUNT(*) FROM pastes;"
|
||||
```
|
||||
|
||||
## Rollback (se necessário)
|
||||
|
||||
Se algo der errado, você pode voltar ao BoltDB:
|
||||
|
||||
1. Restaurar o backup: `cp data/yasuc.db.backup.* data/yasuc.db`
|
||||
2. Reverter o código para a versão anterior
|
||||
3. Reconstruir o container
|
||||
|
||||
## Vantagens do SQLite3
|
||||
|
||||
1. **Consultas SQL**: Você pode fazer consultas como:
|
||||
```sql
|
||||
-- Encontrar pastes criados hoje
|
||||
SELECT * FROM pastes WHERE date(created_at, 'unixepoch') = date('now');
|
||||
|
||||
-- Encontrar pastes maiores que 1KB
|
||||
SELECT hash, length(content) as size FROM pastes WHERE length(content) > 1024;
|
||||
```
|
||||
|
||||
2. **Backup mais simples**: Um único arquivo
|
||||
3. **Ferramentas de administração**: SQLite Browser, DBeaver, etc.
|
||||
4. **Melhor performance**: Para consultas complexas
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
- O hash SHA-256 continua sendo usado como identificador único
|
||||
- A funcionalidade da API permanece a mesma
|
||||
- URLs dos pastes existentes continuam funcionando
|
||||
- O tamanho máximo de paste (4MB) permanece inalterado
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Erro: "database is locked"
|
||||
- Verifique se não há outro processo usando o banco
|
||||
- Reinicie o container: `docker-compose restart`
|
||||
|
||||
### Erro: "no such table"
|
||||
- Execute o script de migração novamente
|
||||
- Verifique se o arquivo SQLite3 foi criado corretamente
|
||||
|
||||
### Performance lenta
|
||||
- Considere adicionar índices se necessário
|
||||
- Verifique se o volume Docker está configurado corretamente
|
||||
Reference in New Issue
Block a user