Cliente de Sincronização ee-database - Documentação do Entity Enricher

cliente de sincronização ee-database

O cliente de aplicação open-source para bases de dados de schema. Execute-o junto ao seu próprio PostgreSQL, emparelhe uma vez e ele mantém essa base de dados convergida com os seus enrichments — inicializando a partir de um snapshot e, depois, aplicando um feed delta em tempo real através de um único WebSocket de saída. A sua connection string nunca sai da sua máquina.

Entity Enricherservidor · caixa de saídaee-databasea sua máquinaA sua base de dadosPostgres · MySQL · SQLitebatch · concessão 120saplicar — uma transaçãocommitack a janela seguinte é enviada de imediato

Cada instrução é protegida por revisão, pelo que um batch reentregue converge para as mesmas linhas. Um erro de SQL faz rollback ao batch e interrompe-o — um delta problemático nunca é ignorado silenciosamente.

O cliente obtém estado, não operações: cada delta transporta a(s) linha(s) atual(is) completa(s) de uma entity alterada como um INSERT … ON CONFLICT … DO UPDATE idempotente, para que o destino convirja mesmo que um batch tenha sido perdido.

Porquê o cliente de sincronização?

As bases de dados de schema podem ser consumidas de várias formas — n8n, Make.com, MCP, webhooks diretos ou o feed delta REST. O cliente de sincronização é o caminho totalmente automatizado: o menos a construir e o menos a expor.

Nenhum workflow para construir

Sem scenario do n8n, sem cron, sem código de ligação. Emparelhe uma vez e ele arranca a partir do snapshot, aplicando depois cada delta à medida que chega.

O seu DSN nunca sai da sua máquina

A connection string é passada na linha de comandos ou armazenada localmente em modo 600 — nunca é enviada para o Entity Enricher. O cliente liga-se apenas para o exterior.

Seguro para replay por construção

Cada delta é um upsert idempotente e protegido por revisão. Se o cliente falhar a meio de um batch, o batch é reentregue após a expiração da sua concessão e a reaplicação converge para as mesmas linhas.

Falha em voz alta, nunca em silêncio

Um erro de SQL reverte o lote, reporta o delta com falha na página Bases de dados e termina com um código diferente de zero — um delta problemático nunca pode ser ignorado silenciosamente.

Início rápido

Registe primeiro uma base de dados num schema, depois emparelhe um cliente e execute-o junto à sua base de dados.

  1. 1

    Registar uma base de dados

    Na página Databases, registe uma base de dados no schema que pretende espelhar e reveja as respetivas chaves da base de dados. Consulte Databases para conhecer o modelo completo. Este passo declara o dialeto de destino que o cliente irá aplicar.

  2. 2

    Instale o cliente

    Transfira um binário assinado a partir de Versões ou compile a partir do código-fonte (Go ≥ 1.23).

    go build -o ee-database .

    O código-fonte e as versões assinadas encontram-se em TOT-Concept/ee-database (MIT).

  3. 3

    Emparelhe através do seu navegador

    Execute ee-database pair. Abre-se um separador do navegador em /database/connect com um código curto — confirme-o e escolha que base de dados este cliente deve sincronizar.

    ee-database pair --server https://entityenricher.ai
    
    Open this URL in your browser to confirm pairing:
       https://entityenricher.ai/database/connect?code=7QX-KP2
    
      Code: 7QX-KP2
    
    Waiting for confirmation...

    Prefere um token? Emita um na página Databases (Sync client → Pair a client) e passe-o diretamente: ee-database pair --server … <refresh-token>.

  4. 4

    Execute-o junto à sua base de dados

    Na primeira execução, o cliente obtém o snapshot .sql e aplica-o, ligando-se depois e transmitindo deltas. --save-dsn guarda a string de ligação localmente, para que as execuções seguintes não precisem de argumentos.

    ee-database run --dsn "postgres://user:pass@localhost:5432/mydb" --save-dsn

    “Ao lado” significa adjacente na rede, não no servidor da base de dados: qualquer máquina ou contentor que consiga alcançar a DSN funciona — incluindo PostgreSQL gerido na cloud (Azure, OVHcloud, AWS RDS…), que normalmente impõe TLS: …/mydb?sslmode=require.

Como funciona a entrega: concessão e confirmação

Os deltas saem do Entity Enricher através de uma caixa de saída FIFO rigorosa por base de dados. O servidor concede a janela visível durante 120 segundos e envia-a como um único lote; o cliente aplica todo o lote numa única transação e responde ack , o que faz avançar o cursor e aciona a próxima janela de imediato. Um cliente que falha a meio de um lote está protegido pela expiração da concessão e por um reenvio do lado do servidor — nada se perde nem é confirmado em duplicado.

Snapshot = delta a partir do zero

O arranque inicial e o estado estável partilham o mesmo caminho de código. Ignore o arranque inicial com --skip-bootstrap se a sua base de dados já estiver preenchida.

Protegido por revisão

Cada instrução transporta um _sync_revision para que uma linha mais antiga nunca substitua uma mais recente, mesmo fora de ordem.

Interromper em caso de falha

Um erro de SQL armazena o id do delta com falha na página Bases de dados → cartão do cliente de sincronização, e o processo termina com um código diferente de zero para que o seu supervisor o reinicie.

Bases de dados e dialetos

O dialeto de destino é definido pelo registo da schema-database no Entity Enricher — o cliente aplica o SQL que o servidor gerar. PostgreSQL é o dialeto de lançamento; os drivers MySQL e SQLite já vêm incluídos para quando os respetivos geradores de SQL forem disponibilizados. A aplicação de múltiplas instruções é tratada por cada driver (protocolo simples pgx, multiStatements do MySQL e SQLite sem CGO).

Segurança

Apenas saída

O cliente inicia o WebSocket através de :443/wss. O host da sua base de dados nunca aceita ligações de entrada — sem portas para abrir, sem ingress para configurar.

Uma credencial, uma base de dados, um cliente

Uma credencial está associada a uma única base de dados de esquema. Emparelhar novamente rotaciona-a e remove instantaneamente a ligação ativa anterior.

Tokens de acesso de curta duração

O refresh token de 365 dias (armazenado em modo 600) é trocado por tokens de acesso de 15 minutos que autenticam o WebSocket. Revogar na interface desliga um cliente ativo em cerca de 1 segundo.

Recomenda-se o menor privilégio possível

Execute o cliente com uma função de base de dados dedicada, limitada ao schema sincronizado, para que um token comprometido não possa aceder a mais nada.

Referência da CLI

ComandoO que faz
ee-database pair --server URLEmparelhamento por código de dispositivo confirmado no navegador. Escolha que base de dados sincronizar.
ee-database pair --server URL <token>Emparelhe com um token emitido na página Databases (compatível com modo headless).
ee-database run --dsn DSN [--save-dsn] [--skip-bootstrap]Faça o arranque inicial a partir do snapshot (a menos que seja ignorado) e, em seguida, ligue-se e aplique os deltas.
ee-database run … --create-missingCrie primeiro a base de dados de destino se ela não existir, utilizando as credenciais do próprio DSN (o postgres precisa de CREATEDB, o mysql do privilégio CREATE; os ficheiros sqlite são criados automaticamente de qualquer forma).
ee-database run … --create-missing --admin-dsn DSNInicialize tudo o que o DSN de destino nomeia através de uma ligação de administrador: o role/utilizador em falta (com a palavra-passe do DSN) e a base de dados de que é proprietário. O DSN de destino deixa então de necessitar de direitos de criação; o DSN de administrador nunca é armazenado.
ee-database run --allSincronizar todas as bases de dados emparelhadas em simultâneo a partir de um único processo (cada uma precisa de um DSN guardado).
ee-database statusMostrar o estado do emparelhamento, o URL do servidor e as bases de dados emparelhadas.
ee-database disconnectEsquecer as credenciais locais de um emparelhamento. Revogue no servidor a partir da interface.
ee-database versionVersão para impressão.

As credenciais são armazenadas em modo-600, um perfil por base de dados emparelhada, em ~/.config/ee-database/profiles/ — emparelhe uma vez por base de dados e --database NAME seleciona uma quando várias estão emparelhadas. Prefere não usar automação de todo? O mesmo feed está disponível em REST simples: GET /api/databases//changes seguido de POST /api/databases//ack — consulte Bases de dados.

Código aberto

O cliente tem licença MIT e reside num repositório público, para que qualquer pessoa possa auditar exatamente o que é executado na sua base de dados.

Código-fonte: github.com/TOT-Concept/ee-database

Versões: github.com/TOT-Concept/ee-database/releases — cada binário é assinado antes da publicação.