Conheço a intuição por trás da programação de restrições, por assim dizer, nunca experimentei programação usando um solucionador de restrições. Embora eu ache que é uma situação diferente conseguir o que definiríamos como dados consistentes.
Contexto:
Temos um conjunto de regras para implementar em um servidor ETL. Essas regras são:
- agindo em uma linha.
- inter-linhas atuantes, em uma ou em tabelas diferentes.
- agindo da mesma maneira entre duas execuções (deve manter a mesma restrição em todos os dados ou apenas nas últimas n execuções);
O terceiro caso é diferente do segundo, pois ocorre quando o segundo caso é válido, mas por um número bem definido de execuções. Pode ser aplicado a uma única execução (um arquivo) ou entre (1 a n (anterior) ou em Todos os arquivos).
Tecnicamente, como concebemos o ETL, ele não tem memória entre duas execuções: dois arquivos (mas isso deve ser repensado)
Para a aplicação do terceiro tipo de regra, o ETL precisa ter memória (acho que acabaríamos fazendo backup de dados no ETL); Ou remarcando infinitamente (um trabalho) em todo o banco de dados após algum tempo, para que os dados que terminam no banco de dados não cumpram necessariamente o terceiro tipo de regra em tempo.
Exemplo:
Embora tenhamos um fluxo contínuo de dados, aplicamos restrições para ter todo um banco de dados restrito. No dia seguinte, receberemos um backup ou dados de correção por um mês, por exemplo, para esta janela de tempo, gostaríamos de ter as restrições satisfeitas apenas por isso. executar (nesta janela de tempo), sem se preocupar com todo o banco de dados, para execuções futuras, todos os dados devem ser restringidos como antes, sem se preocupar com dados anteriores. Você pode imaginar outras regras que poderiam se encaixar na lógica temporal .
Por enquanto, temos apenas o primeiro tipo de regras implementadas. A maneira como pensei nisso é ter um banco de dados minificado (de qualquer tipo: MySQL, PostgreSQL, MongoDB ...) que faça backup de todos os dados (apenas colunas restritas, provavelmente com valores de hash) com sinalizadores referentes à consistência baseada em dados anteriores. tipo de regras.
Pergunta: Existem alternativas de soluções / concepção que facilitariam esse processo?
Para ilustrar em uma linguagem de programação Fogão; Um exemplo de um conjunto de regras e seguintes ações:
run1 : WHEN tableA.ID == tableB.ID AND tableA.column1 > tableB.column2
BACK-UP
FLAG tableA.rule1
AFTER run1 : LOG ('WARN')
run2 : WHEN tableA.column1 > 0
DO NOT BACK-UP
FLAG tableA.rule2
AFTER run2 : LOG ('ERROR')
Nota : Embora a programação de restrições seja, em teoria, um paradigma para resolver problemas combinatórios e, na prática, pode acelerar o desenvolvimento e a execução de problemas; Eu acho que isso é diferente de um problema de solução de restrições; Como o primeiro objetivo não é otimizar restrições antes da resolução, provavelmente nem mesmo limitar os domínios de dados; Sua principal preocupação é aplicar regras na recepção de dados e executar algumas ações básicas (Rejeitar uma linha, Aceitar uma linha, Logar ...).
Eu realmente espero que essa não seja uma pergunta muito ampla e que este seja o lugar certo.
fonte