Implementa sistema de IDs curtos para pastes, substituindo hashes SHA-256. Atualiza a estrutura do banco de dados e a lógica de inserção para suportar a detecção de duplicatas. O README e a documentação de migração foram atualizados para refletir essas mudanças.
This commit is contained in:
+48
-16
@@ -1,24 +1,39 @@
|
||||
# Migração para SQLite3
|
||||
# Migração para SQLite3 com IDs Curtos
|
||||
|
||||
Este documento descreve como migrar o YASUC de BoltDB para SQLite3.
|
||||
Este documento descreve como migrar o YASUC de BoltDB para SQLite3 com o novo sistema de IDs curtos.
|
||||
|
||||
## Por que migrar para SQLite3?
|
||||
## Por que migrar para SQLite3 com IDs Curtos?
|
||||
|
||||
- **URLs mais amigáveis**: IDs de 7 caracteres em vez de hashes SHA-256 de 64 caracteres
|
||||
- **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
|
||||
- **Detecção de duplicatas**: Pastes idênticos recebem o mesmo ID curto
|
||||
|
||||
## 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
|
||||
short_id TEXT PRIMARY KEY, -- ID curto único (7 caracteres)
|
||||
content TEXT NOT NULL, -- Conteúdo do paste
|
||||
content_hash TEXT NOT NULL, -- Hash SHA-256 para detecção de duplicatas
|
||||
created_at INTEGER NOT NULL -- Timestamp de criação
|
||||
);
|
||||
```
|
||||
|
||||
## Sistema de IDs Curtos
|
||||
|
||||
### Características:
|
||||
- **7 caracteres**: Combinação de letras maiúsculas, minúsculas e números (a-z, A-Z, 0-9)
|
||||
- **62^7 possibilidades**: Aproximadamente 3.5 trilhões de combinações únicas
|
||||
- **Detecção de duplicatas**: Pastes idênticos recebem o mesmo ID
|
||||
- **Geração aleatória**: IDs são gerados aleatoriamente para evitar previsibilidade
|
||||
|
||||
### Exemplo de URLs:
|
||||
- **Antes**: `http://localhost:8080/a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447`
|
||||
- **Agora**: `http://localhost:8080/Ly34kx3`
|
||||
|
||||
## Passos para Migração
|
||||
|
||||
### 1. Backup dos Dados Atuais
|
||||
@@ -45,6 +60,8 @@ Se você quiser migrar dados existentes do BoltDB para SQLite3:
|
||||
go run cmd/migrate/main.go -bolt data/yasuc.db -sqlite data/yasuc.sqlite3
|
||||
```
|
||||
|
||||
**Nota**: Durante a migração, cada paste do BoltDB receberá um novo ID curto. URLs antigas não funcionarão mais.
|
||||
|
||||
### 4. Testar a Aplicação
|
||||
|
||||
```bash
|
||||
@@ -73,6 +90,12 @@ sqlite3 data/yasuc.sqlite3 ".schema pastes"
|
||||
sqlite3 data/yasuc.sqlite3 "SELECT COUNT(*) FROM pastes;"
|
||||
```
|
||||
|
||||
### Verificar IDs curtos gerados:
|
||||
|
||||
```bash
|
||||
sqlite3 data/yasuc.sqlite3 "SELECT short_id, substr(content, 1, 50) FROM pastes LIMIT 5;"
|
||||
```
|
||||
|
||||
## Rollback (se necessário)
|
||||
|
||||
Se algo der errado, você pode voltar ao BoltDB:
|
||||
@@ -81,27 +104,31 @@ Se algo der errado, você pode voltar ao BoltDB:
|
||||
2. Reverter o código para a versão anterior
|
||||
3. Reconstruir o container
|
||||
|
||||
## Vantagens do SQLite3
|
||||
## Vantagens do SQLite3 com IDs Curtos
|
||||
|
||||
1. **Consultas SQL**: Você pode fazer consultas como:
|
||||
1. **URLs mais amigáveis**: Fáceis de compartilhar e digitar
|
||||
2. **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;
|
||||
SELECT short_id, length(content) as size FROM pastes WHERE length(content) > 1024;
|
||||
|
||||
-- Verificar duplicatas
|
||||
SELECT content_hash, COUNT(*) as count FROM pastes GROUP BY content_hash HAVING count > 1;
|
||||
```
|
||||
|
||||
2. **Backup mais simples**: Um único arquivo
|
||||
3. **Ferramentas de administração**: SQLite Browser, DBeaver, etc.
|
||||
4. **Melhor performance**: Para consultas complexas
|
||||
3. **Backup mais simples**: Um único arquivo
|
||||
4. **Ferramentas de administração**: SQLite Browser, DBeaver, etc.
|
||||
5. **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
|
||||
- **URLs antigas não funcionam**: Pastes migrados terão novos IDs curtos
|
||||
- **Detecção de duplicatas**: Pastes idênticos recebem o mesmo ID
|
||||
- **Tamanho máximo**: O tamanho máximo de paste (4MB) permanece inalterado
|
||||
- **Compatibilidade**: A API permanece a mesma, apenas os IDs mudaram
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
@@ -113,6 +140,11 @@ Se algo der errado, você pode voltar ao BoltDB:
|
||||
- Execute o script de migração novamente
|
||||
- Verifique se o arquivo SQLite3 foi criado corretamente
|
||||
|
||||
### Erro: "não foi possível gerar um ID único"
|
||||
- Extremamente raro, mas pode acontecer se houver muitas colisões
|
||||
- O sistema tenta 100 vezes antes de falhar
|
||||
- Considere aumentar o `maxAttempts` no código se necessário
|
||||
|
||||
### Performance lenta
|
||||
- Considere adicionar índices se necessário
|
||||
- Verifique se o volume Docker está configurado corretamente
|
||||
Reference in New Issue
Block a user