Avatar
0
e2al3qakmdd1okym Beginner
Một cách tối ưu để thực hiện delta-load trong ETL
Em đang tìm hiểu về delta-load trong ETL, em đang có 1 mô hình producer-consumer.
  • Consumer sẽ thực hiện logic trên tất cả dữ liệu được publish bởi producer
  • Producer sẽ thực hiện incremetal write cho tập dữ liệu nhận được. Vấn đề là producer sẽ đóng vai trò như 1 framework và tự động đánh giá nội dung để cho rằng 1 Object có bị thay đổi hay không.

Em muốn hỏi là coó 1 cách tối ưu nhất để Producer tự extract những Object bị modified không?

  • Giải pháp hiện tại của em là serialize Object sang byte và thực hiện hash trên byte array đó (giống như commit hash) để lưu trữ state Object đó, tuy nhiên em đang không biết 1 hàm hash hiệu quả cho việc này, xin nhờ mọi người giúp.
  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
Hash không bao giờ hiệu quả vì nó có tỉ lệ bị trùng: https://en.wikipedia.org/wiki/Hash_collision

Ví dụ:

public class HashCodeCollision {
    public static void main(String[] args) {
        String str1 = "FB";
        String str2 = "Ea";

        System.out.println("hashCode của "FB": " + str1.hashCode());
        System.out.println("hashCode của "Ea": " + str2.hashCode());
        System.out.println("Các chuỗi có hashCode trùng nhau: " + (str1.hashCode() == str2.hashCode()));
    }
}

Để tránh bị trùng em có thể tạo id cho từng đối tượng, để khắc phục hoàn toàn việc trùng id thì em sẽ cần tạo ra 1 service chuyên cấp id, có thể dùng mysql. Nếu không thì em cũng có thể dùng UUID tỉ lệ trùng cũng là siêu siêu thấp.

  • 0
  • Reply
Ví dụ em sử dụng 1 key (String) cho 1 Object để lưu vào 1 HashTable (được implement theo open address hashing)
  • hash(key) -> int32, hash(object) -> int32, lúc này tỉ lệ là rất nhỏ và mình chấp chận việc mất delta-load cho 1 vài trường hợp hiếm như thế ổn không anh nhỉ. Tại vì em đang không muốn Producer của mình biết trước là sẽ dùng 1 field nào để so sánh giữa 2 state
 –  e2al3qakmdd1okym 1714663676000
không ổn em nhé, làm phần mềm không thể trông chờ vào may mắn và xác suất được em ạ, không hiểu sao nhưng cứ triển khai thật là các vấn đề mà em nghĩ nó sẽ ít xảy ra thì lại xảy ra rất nhiều.  –  tvd12 1714666111000
Okay, thanks anh đã dành thời gian khai thông ánh sánh cho em :)  –  e2al3qakmdd1okym 1714670875000