Tôi biết trực giác đằng sau lập trình ràng buộc, vì vậy có thể nói tôi chưa bao giờ thực sự có kinh nghiệm lập trình bằng cách sử dụng một bộ giải ràng buộc. Mặc dù tôi nghĩ rằng đó là một tình huống khác nhau để có thể đạt được những gì chúng ta sẽ định nghĩa là dữ liệu nhất quán.
Bối cảnh:
Chúng tôi có một bộ quy tắc để thực hiện trên máy chủ ETL. Những quy tắc này là:
- hành động trên một hàng.
- hành động liên hàng, trong một hoặc các bảng khác nhau.
- hành động theo cùng một cách giữa hai lần chạy (Cần duy trì cùng một ràng buộc đối với tất cả dữ liệu hoặc chỉ n lần chạy cuối cùng);
Trường hợp thứ ba khác với trường hợp thứ hai, vì nó giữ khi trường hợp thứ hai giữ nhưng với số lần chạy được xác định rõ. Nó có thể được áp dụng cho một lần chạy (một tệp) hoặc giữa (1 đến n (trước đó) hoặc trên Tất cả các tệp).
Về mặt kỹ thuật khi chúng tôi hình thành ETL, nó không có bộ nhớ giữa hai lần chạy: hai tệp (nhưng điều này cần được suy nghĩ lại)
Đối với việc áp dụng loại quy tắc thứ ba, ETL cần phải có bộ nhớ (tôi nghĩ rằng chúng tôi sẽ kết thúc dữ liệu sao lưu trong ETL); Hoặc bằng cách kiểm tra lại vô hạn (một Công việc) trên toàn bộ cơ sở dữ liệu sau một thời gian, do đó, dữ liệu kết thúc trong cơ sở dữ liệu không nhất thiết phải hoàn thành loại quy tắc thứ ba kịp thời.
Thí dụ:
Mặc dù chúng tôi có dữ liệu chảy liên tục, chúng tôi áp dụng các ràng buộc để có toàn bộ cơ sở dữ liệu bị ràng buộc, ngày hôm sau chúng tôi sẽ nhận được một bản sao lưu hoặc dữ liệu chỉnh sửa trong một tháng, đối với cửa sổ thời gian này, chúng tôi muốn có các ràng buộc chỉ thỏa mãn điều này chạy (cửa sổ thời gian này), mà không phải lo lắng về toàn bộ cơ sở dữ liệu, cho các lần chạy trong tương lai, tất cả dữ liệu sẽ bị hạn chế như trước mà không phải lo lắng về dữ liệu trong quá khứ. Bạn có thể tưởng tượng các quy tắc khác có thể phù hợp với logic tạm thời .
Hiện tại, chúng tôi chỉ có loại quy tắc đầu tiên được thực hiện. Cách tôi nghĩ là có một cơ sở dữ liệu rút gọn (dưới bất kỳ hình thức nào: MySQL, PostgreQuery, MongoDB ...) sao lưu tất cả Dữ liệu (chỉ các cột bị ràng buộc, có thể có giá trị băm) với các cờ đề cập đến tính nhất quán dựa trên trước đó loại quy tắc.
Câu hỏi: Có giải pháp / giải pháp thay thế thụ thai nào có thể làm giảm quá trình này không?
Để minh họa bằng ngôn ngữ lập trình Cook; Một ví dụ về một bộ quy tắc và các hành động sau:
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')
Ghi chú : Mặc dù về mặt lý thuyết, lập trình ràng buộc là một mô hình để giải quyết các vấn đề tổ hợp và trong thực tế có thể tăng tốc độ phát triển và thực hiện vấn đề; Tôi nghĩ rằng điều này khác với một vấn đề giải quyết ràng buộc; Vì mục đích đầu tiên không phải là để tối ưu hóa các ràng buộc trước khi giải quyết, có lẽ thậm chí không giới hạn các miền dữ liệu; Mối quan tâm chính của nó là áp dụng các quy tắc về nhận dữ liệu và thực hiện một số hành động cơ bản (Từ chối một dòng, Chấp nhận một dòng, Ghi nhật ký ...).
Tôi thực sự hy vọng đây không phải là một câu hỏi rất rộng và đây là nơi thích hợp.