Я знаю интуицию, лежащую в основе программирования с ограничениями, так сказать, я никогда не сталкивался с программированием с использованием решателя ограничений. Хотя я думаю, что это другая ситуация, когда мы можем достичь того, что мы определяем как непротиворечивые данные.
Контекст:
У нас есть набор правил для реализации на сервере ETL. Этими правилами являются:
- , действующие на одну строку.
- действующие междурядья, в одной или разных таблицах.
- , действующие одинаково между двумя прогонами (Он должен поддерживать одно и то же ограничение для всех данных или только для последних n запусков);
Третий случай отличается от второго, поскольку он имеет место, когда второй случай выполняется, но для четко определенного числа прогонов. Он может применяться для одного отдельного прогона (один файл) или между (от 1 до n (предыдущий) или для всех файлов).
Технически, так как мы задумали ETL, он не имеет памяти между двумя прогонами: двафайлы (но это нужно переосмыслить)
Для применения правила третьего типа у ETL должна быть память (я думаю, что в конечном итоге мы создадим резервные копии данных в ETL);Или путем бесконечной повторной проверки (задания) всей базы данных через некоторое время, поэтому данные, попадающие в базу данных, не обязательно соответствуют третьему виду правил во времени.
Пример:
Несмотря на то, что у нас есть непрерывные текущие данные, мы применяем ограничения, чтобы иметь целую ограниченную базу данных, на следующий день мы получим резервную копию или данные коррекции, скажем, за один месяц, для этого временного окна мы быхотелось бы, чтобы ограничения выполнялись только для этого прогона (это временное окно), не беспокоясь о всей базе данных, для будущих прогонов все данные должны быть ограничены, как и раньше, не беспокоясь о прошлых данных. Вы можете представить себе другие правила, которые могли бы соответствовать Временная логика .
На данный момент у нас реализованы только правила первого типа. Я подумал о том, чтобы иметь минимизированную базу данных (любого типа: MySQL, PostgreSQL, MongoDB ...), которая резервирует все данные (только ограниченные столбцы, возможно, с хешированными значениями) с флагами, ссылающимися на согласованность, основанную на предыдущихТип правил.
Вопрос: Существуют ли решения / альтернативы концепции , которые облегчили бы этот процесс?
К иллюстрируют на языке программирования Cook;Пример набора правил и следующих действий:
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')
Примечание : хотя теоретически программирование ограничений является парадигмой для решения комбинаторных задач и на практике может ускорить разработку и выполнение задач;Я думаю, что это отличается от проблемы решения ограничений;Поскольку первая цель не в том, чтобы оптимизировать ограничения перед разрешением, возможно, даже не ограничивая области данных;Его главная задача - применить правила к приему данных и выполнить некоторые основные действия (Отклонить строку, Принять строку, Регистрация ...).
Я действительно надеюсь, что это не очень широкий вопрос, иэто правильное место.