Ich kenne die Intuition hinter der Einschränkungsprogrammierung, sozusagen, ich habe die Programmierung mit einem Einschränkungslöser nie wirklich erlebt. Obwohl ich denke, dass es eine andere Situation ist, das erreichen zu können, was wir als konsistente Daten definieren würden.
Kontext:
Wir müssen eine Reihe von Regeln auf einem ETL-Server implementieren. Diese Regeln sind entweder:
- auf eine Reihe einwirken.
- Zwischenzeilen in einer oder mehreren Tabellen.
- Gleiches Verhalten zwischen zwei Läufen (Es sollte die gleiche Einschränkung für alle Daten oder nur für die letzten n Läufe beibehalten).
Der dritte Fall unterscheidet sich vom zweiten, da er gilt, wenn der zweite Fall gilt, jedoch für eine genau definierte Anzahl von Läufen. Es kann für einen einzelnen Lauf (eine Datei) oder zwischen (1 bis n (vorherige) oder für alle Dateien) angewendet werden.
Technisch gesehen hat die ETL, wie wir sie konzipiert haben, keinen Speicher zwischen zwei Läufen: zwei Dateien (dies ist jedoch zu überdenken)
Für die Anwendung der dritten Art von Regel muss ETL über Speicher verfügen (ich denke, wir würden am Ende Daten in ETL sichern). Oder indem Sie nach einem bestimmten Zeitfenster die gesamte Datenbank unendlich (einen Job) erneut überprüfen, sodass Daten, die in der Datenbank landen, nicht unbedingt die dritte Art von Regel rechtzeitig erfüllen.
Beispiel:
Während wir kontinuierlich fließende Daten haben, wenden wir Einschränkungen an, um eine vollständige eingeschränkte Datenbank zu haben. Am nächsten Tag erhalten wir eine Sicherungs- oder Korrekturdaten für beispielsweise einen Monat. Für dieses Zeitfenster möchten wir, dass Einschränkungen nur für diese erfüllt werden run (dieses Zeitfenster), ohne sich um die gesamte Datenbank zu kümmern, für zukünftige Läufe sollten alle Daten wie zuvor eingeschränkt werden, ohne sich um vergangene Daten zu kümmern. Sie können sich andere Regeln vorstellen, die zur zeitlichen Logik passen könnten .
Im Moment haben wir nur die erste Art von Regeln implementiert. Die Art und Weise, wie ich es mir vorgestellt habe, ist eine minimierte Datenbank (jeglicher Art: MySQL, PostgreSQL, MongoDB ...), die alle Daten (nur eingeschränkte Spalten, wahrscheinlich mit Hash-Werten) mit Flags sichert, die sich auf die Konsistenz beziehen, die auf früher basiert Art von Regeln.
Frage: Gibt es Lösungen / Konzeptionsalternativen , die diesen Prozess vereinfachen würden?
In einer Cook-Programmiersprache zu veranschaulichen ; Ein Beispiel für eine Reihe von Regeln und folgenden Aktionen:
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')
Hinweis : Während Constraint-Programmierung theoretisch ein Paradigma zur Lösung kombinatorischer Probleme ist und in der Praxis die Problementwicklung und -ausführung beschleunigen kann; Ich denke, das ist etwas anderes als ein Problem zur Lösung von Einschränkungen. Da der erste Zweck nicht darin besteht, Einschränkungen vor der Auflösung zu optimieren, werden wahrscheinlich nicht einmal Datendomänen eingeschränkt. Das Hauptanliegen besteht darin, Regeln für den Datenempfang anzuwenden und einige grundlegende Aktionen auszuführen (Zeile ablehnen, Zeile akzeptieren, Protokollierung ...).
Ich hoffe wirklich, dass dies keine sehr breite Frage ist und dies der richtige Ort ist.
quelle