Xử lý hiệu quả sự khác biệt giữa dữ liệu đầu vào và cơ sở dữ liệu


8

Tôi có một bộ dữ liệu đầu vào có hồ sơ sẽ được thêm vào cơ sở dữ liệu hiện có. Trước khi được nối thêm, dữ liệu sẽ trải qua quá trình xử lý nặng, tốn nhiều thời gian. Tôi muốn lọc các bản ghi từ bộ dữ liệu đầu vào đã tồn tại trong cơ sở dữ liệu để giảm thời gian xử lý.

Sự khác biệt giữa đầu vào và cơ sở dữ liệu được minh họa ở đây: Chênh lệch cơ sở dữ liệu và đầu vào

Đây là một cái nhìn tổng quan về loại quy trình tôi đang xem xét. Dữ liệu đầu vào cuối cùng sẽ đưa vào cơ sở dữ liệu. Quy trình xử lý đầu vào

Giải pháp hiện tại của tôi liên quan đến việc sử dụng biến áp Matcher trên cơ sở dữ liệu và đầu vào kết hợp, sau đó lọc kết quả NotMatched bằng FeatureTypeFilter để chỉ giữ lại các bản ghi đầu vào.

Có cách nào hiệu quả hơn để có được các tính năng khác biệt?


1
bạn đang sử dụng một cơ sở dữ liệu oracle? bạn có thể lấy cơ sở dữ liệu để thực hiện công việc giữa các bảng delta bằng cách sử dụng MINUS stackoverflow.com/questions/2293092/ Lời
Mapperz

2
Thay vì đọc mọi thứ từ cơ sở dữ liệu, bạn có thể muốn thử sử dụng một SQLexecutor. Nếu thuộc tính _matched_records bằng 0 trên bộ khởi tạo thì đó là một bổ sung
MickyT

Câu trả lời:


4

Nếu bạn có các đặc điểm cơ sở dữ liệu được chỉ ra bởi sơ đồ. Đầu vào nhỏ, chồng chéo nhỏ, mục tiêu lớn. Sau đó, loại không gian làm việc sau đây có thể hoạt động khá hiệu quả, mặc dù nó sẽ thực hiện nhiều truy vấn đối với cơ sở dữ liệu.

nhập mô tả hình ảnh ở đây

Vì vậy, đối với mỗi tính năng được đọc từ truy vấn đầu vào cho tính năng phù hợp trong cơ sở dữ liệu. Hãy chắc chắn rằng có các chỉ số phù hợp tại chỗ. Kiểm tra thuộc tính _matched_records cho 0, thực hiện xử lý và sau đó chèn vào cơ sở dữ liệu.


Tôi thấy đây là giải pháp nhanh nhất. Tôi đoán bởi vì nó giới hạn số lượng dữ liệu được rút ra từ cơ sở dữ liệu vào FME và giữ cho phía SQL xử lý.
rovyko

4

Tôi đã không sử dụng FME, nhưng tôi có một nhiệm vụ xử lý tương tự yêu cầu sử dụng đầu ra của công việc xử lý 5 giờ để xác định ba trường hợp xử lý có thể có cho cơ sở dữ liệu song song qua liên kết mạng băng thông thấp:

  • Các tính năng mới sẽ được thêm vào
  • Các tính năng hiện có sẽ được cập nhật
  • Các tính năng hiện tại sẽ bị xóa

Vì tôi đã đảm bảo rằng tất cả các tính năng sẽ giữ lại các giá trị ID duy nhất giữa các lần vượt qua, tôi có thể:

  1. Chạy tập lệnh xử lý đã tạo một bảng gồm các cặp {uID, checksum} trên các cột quan trọng trong bảng được cập nhật
  2. Đã sử dụng các cặp {uID, checksum} được tạo trong lần lặp trước để truyền các bản cập nhật đến bảng đích với các hàng trong bảng được cập nhật trong đó uID nằm trong một truy vấn con trong đó tổng kiểm tra không khớp
  3. Truyền chèn từ bảng đã cập nhật mà truy vấn phụ tham gia bên ngoài được chỉ định có uIDs chưa từng có và
  4. Truyền danh sách các uID để xóa các tính năng trong bảng bên ngoài mà truy vấn phụ tham gia bên ngoài cho biết không còn có uID phù hợp trong bảng hiện tại
  5. Lưu các cặp {uID, checksum} hiện tại cho hoạt động của ngày hôm sau

Trên cơ sở dữ liệu bên ngoài, tôi chỉ cần chèn các tính năng mới, cập nhật deltas, điền vào bảng tạm thời các uID bị xóa và xóa các tính năng IN bảng xóa.

Tôi đã có thể tự động hóa quy trình này để tuyên truyền hàng trăm thay đổi hàng ngày cho bảng hàng 10 triệu với tác động tối thiểu đến bảng sản xuất, sử dụng ít hơn 20 phút thời gian chạy hàng ngày. Nó chạy với chi phí hành chính tối thiểu trong vài năm mà không mất đồng bộ hóa.

Mặc dù chắc chắn có thể thực hiện N so sánh trên các hàng M, sử dụng thông báo / tổng kiểm tra là một cách rất hấp dẫn để thực hiện thử nghiệm "tồn tại" với chi phí thấp hơn nhiều.


4

Sử dụng FeatureMerger, tham gia và nhóm theo các trường phổ biến từ DATABASE VÀ INPUT DATA. nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.