Banco de Dados¶
O Oraculo utiliza dois bancos de dados: PostgreSQL para dados relacionais e MongoDB para eventos de sessao.
PostgreSQL¶
Banco relacional principal, compartilhado entre Platform API (Java) e Models API (Python).
Diagrama ER¶
erDiagram
users ||--o{ datasources : possui
datasources ||--o{ success_events : tem
datasources ||--o{ actions : tem
datasources ||--o{ model : tem
model ||--o{ model_version : tem
model ||--o{ training_log : tem
model ||--|| model_version : active_version
users {
uuid id PK
string email UK
string password
string name
timestamp created_at
timestamp updated_at
}
datasources {
uuid id PK
uuid user_id FK
string name
string url
enum type
enum status
int initial_checkpoint
int retrain_checkpoint
}
success_events {
uuid id PK
uuid datasource_id FK
string name
enum selector
string selector_value
}
actions {
uuid id PK
uuid datasource_id FK
int seconds_exit
int percentage_exit
string action
text action_value
}
model {
uuid id PK
uuid datasource_id FK
string created_by
timestamp created_at
boolean trained
boolean need_train
timestamp last_train
int last_session_count
string name
string artifact_path
string algorithm
json metrics
json model_parameters
uuid active_version_id FK
}
model_version {
uuid id PK
uuid model_id FK
timestamp created_at
timestamp trained_at
enum status
json metrics
string artifact_path
json deployment_info
}
training_log {
uuid id PK
uuid model_id FK
timestamp started_at
timestamp completed_at
string status
int session_count
json metrics
}
prediction_cache {
uuid id PK
string session_id UK
uuid datasource_id
float probability
boolean should_trigger
boolean triggered
uuid model_id
string model_version
timestamp created_at
timestamp triggered_at
}
Tabelas¶
users¶
Gerenciada pela Platform API (Hibernate).
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
email |
VARCHAR | UNIQUE, NOT NULL | Email do usuario |
password |
VARCHAR | NOT NULL | Senha hashada (bcrypt) |
name |
VARCHAR | NOT NULL | Nome do usuario |
created_at |
TIMESTAMP | NOT NULL | Data de criacao |
updated_at |
TIMESTAMP | Data de atualizacao |
datasources¶
Landing pages monitoradas. Gerenciada pela Platform API.
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
user_id |
UUID | FK (users) | Proprietario |
name |
VARCHAR | NOT NULL | Nome da landing page |
url |
VARCHAR | NOT NULL | URL da pagina |
type |
ENUM | NOT NULL | VSL ou SVSL |
status |
ENUM | NOT NULL | Status atual |
initial_checkpoint |
INT | DEFAULT 10000 | Sessoes para 1o treino |
retrain_checkpoint |
INT | DEFAULT 50000 | Sessoes para retreino |
Enum type:
| Valor | Descricao |
|---|---|
VSL |
Video Sales Letter |
SVSL |
Short Video Sales Letter |
Enum status:
| Valor | Descricao |
|---|---|
CREATED |
Recem-criado |
INSTALLED |
SDK instalado |
TESTED |
Eventos de teste recebidos |
DONE |
Configuracao completa |
ACTIVE |
Ativo e coletando |
INACTIVE |
Desativado |
success_events¶
Eventos que definem conversao. Gerenciada pela Platform API.
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
datasource_id |
UUID | FK (datasources) | Datasource associado |
name |
VARCHAR | NOT NULL | Nome descritivo |
selector |
ENUM | NOT NULL | Tipo de seletor CSS |
selector_value |
VARCHAR | NOT NULL | Valor do seletor |
Enum selector:
| Valor | Exemplo | Descricao |
|---|---|---|
CLASS |
btn-comprar |
Classe CSS do elemento |
ID |
checkout-button |
ID do elemento |
HREF |
/checkout |
Link href |
actions¶
Intervencoes (modais/redirecionamentos). Gerenciada pela Platform API.
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
datasource_id |
UUID | FK (datasources) | Datasource associado |
seconds_exit |
INT | NULLABLE | Tempo minimo antes do modal (s) |
percentage_exit |
INT | NULLABLE | Threshold de probabilidade (0-100) |
action |
VARCHAR | NOT NULL | MODAL ou REDIRECT |
action_value |
TEXT | NOT NULL | HTML do modal ou URL de redirect |
model¶
Modelos de ML. Gerenciada pela Models API (SQLAlchemy).
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
datasource_id |
UUID | FK (datasources) | Datasource associado |
created_by |
VARCHAR | Quem criou | |
created_at |
TIMESTAMP | Data de criacao | |
trained |
BOOLEAN | DEFAULT false | Se ja foi treinado |
need_train |
BOOLEAN | DEFAULT false | Se precisa retreinar |
last_train |
TIMESTAMP | NULLABLE | Ultimo treinamento |
last_session_count |
INT | DEFAULT 0 | Sessoes no ultimo treino |
name |
VARCHAR | Nome da versao | |
artifact_path |
VARCHAR | Caminho no MinIO | |
algorithm |
VARCHAR | XGBClassifier |
|
metrics |
JSON | Metricas de treinamento | |
model_parameters |
JSON | Hiperparametros | |
active_version_id |
UUID | FK (model_version) | Versao em producao |
model_version¶
Versoes de modelos treinados.
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
model_id |
UUID | FK (model) | Modelo pai |
created_at |
TIMESTAMP | Data de criacao | |
trained_at |
TIMESTAMP | Data de treinamento | |
status |
ENUM | Status da versao | |
metrics |
JSON | Metricas (accuracy, f1, etc.) | |
artifact_path |
VARCHAR | Caminho do .pkl no MinIO | |
deployment_info |
JSON | Info de deploy |
Enum status:
| Valor | Descricao |
|---|---|
TRAINING |
Treinamento em andamento |
READY |
Pronto para uso |
DEPRECATED |
Versao substituida |
FAILED |
Treinamento falhou |
training_log¶
Historico de treinamentos.
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
model_id |
UUID | FK (model) | Modelo |
started_at |
TIMESTAMP | Inicio do treinamento | |
completed_at |
TIMESTAMP | Fim do treinamento | |
status |
VARCHAR | Status (success/failed) | |
session_count |
INT | Sessoes usadas | |
metrics |
JSON | Metricas resultantes |
prediction_cache¶
Cache de predicoes para idempotencia.
| Coluna | Tipo | Constraints | Descricao |
|---|---|---|---|
id |
UUID | PK | Identificador unico |
session_id |
VARCHAR | UNIQUE, INDEX | ID da sessao |
datasource_id |
UUID | INDEX | Datasource |
probability |
FLOAT | Probabilidade predita | |
should_trigger |
BOOLEAN | Se deve disparar modal | |
triggered |
BOOLEAN | DEFAULT false | Se o modal foi exibido |
model_id |
UUID | Modelo usado | |
model_version |
VARCHAR | Versao do modelo | |
created_at |
TIMESTAMP | Data da predicao | |
triggered_at |
TIMESTAMP | NULLABLE | Data do trigger |
Indices compostos: (session_id, datasource_id)
MongoDB¶
Banco documental para armazenar eventos de sessao em alta velocidade.
Collection sessions¶
| Campo | Tipo | Descricao |
|---|---|---|
_id |
ObjectId | ID interno do MongoDB |
clientId |
String | UUID do datasource |
sessionId |
String | Identificador da sessao |
url |
String | URL completa |
path |
String | Path da pagina |
referrer |
String | URL de origem |
utm_source |
String | UTM source |
utm_medium |
String | UTM medium |
utm_campaign |
String | UTM campaign |
mouseX |
Int | Posicao X do mouse |
mouseY |
Int | Posicao Y do mouse |
mouseVelocity |
Float | Velocidade do mouse |
scrollVelocity |
Float | Velocidade de scroll |
maxScrollDepth |
Int | Scroll maximo (0-100) |
idleTime |
Float | Tempo ocioso (s) |
pageVisibility |
String | visible / hidden |
lastClickedTag |
String | Tag do ultimo clique |
sessionTime |
Float | Tempo na pagina (s) |
sessionOutcome |
String | Resultado da sessao |
targetClicked |
String | Seletor do alvo clicado |
sessionStartedAt |
Int64 | Timestamp inicio (ms) |
modalDisplayedAt |
Int64 | Timestamp do modal (ms) |
modalClosedAt |
Int64 | Timestamp fechar modal (ms) |
modalInteraction |
String | Tipo de interacao |
windowFocused |
Boolean | Janela em foco |
focusChanges |
Int | Trocas de foco |
createdAt |
Timestamp | Data de criacao |
Upsert por sessionId
O Tracker API faz upsert (insert or update) usando sessionId como chave. Cada evento atualiza o documento existente da sessao ao inves de criar um novo.
MinIO (S3 Storage)¶
Armazena artefatos de modelos treinados (arquivos .pkl).
Bucket: oraculo-models¶
oraculo-models/
└── {datasource_id}/
├── {model_id}_XGBClassifier_20250115_020000.pkl
├── {model_id}_XGBClassifier_20250116_020000.pkl
└── {model_id}_XGBClassifier_20250117_020000.pkl (ativo)
Convencao de nomes: {model_id}_{algorithm}_{YYYYMMDD}_{HHMMSS}.pkl