Các tính năng hòa tan có cải thiện hiệu quả xử lý địa lý không?


9

Tôi có một bộ dữ liệu dòng lớn (> 140.000 tính năng). Có một lợi thế xử lý, trong cả thời gian cần thiết hoặc (quan trọng hơn) bộ nhớ được sử dụng:

  • để chạy Dissolve trên dữ liệu trước khi chạy Buffer ?
  • để chạy Dissolve trên các đầu vào cho hai hoạt động Nhận dạng ?

Tôi thường chỉ cần đợi cho đến khi tất cả quá trình xử lý địa lý kết thúc và sau đó thực hiện một Hòa tan ở cuối. Tuy nhiên, tôi đang gỡ lỗi kịch bản rất cũ của người khác và tôi không rõ liệu anh ta có liên tục giải tán mọi thứ vì một lý do hay không (quay lại Arc 9.3), hoặc chỉ không nghĩ về các giải pháp thay thế. (Cùng một kịch bản lặp lại dự án dữ liệu giữa các công cụ xử lý địa lý, do đó logic đã bị nghi ngờ.)


Tôi không có bất kỳ dữ liệu cứng nào để sao lưu dữ liệu này, nhưng theo kinh nghiệm cá nhân của tôi: luôn luôn đệm trước khi giải thể nếu có thể, bởi vì việc đệm một tính năng đường phức tạp như vậy sẽ mất đi sự vĩnh cửu.
nmpeterson

Câu trả lời:


9

Nếu việc sử dụng bộ nhớ là mối quan tâm chính của bạn, thì rất nhiều tính năng nhỏ (số lượng đỉnh thấp) có thể sẽ phù hợp với sở thích của bạn hơn một số tính năng rất lớn (số lượng đỉnh cao). Nhưng bạn có thể thấy rằng "quá nhiều tính năng" cuối cùng có thể áp đảo ngay cả "quá nhiều đỉnh" cho tốc độ xử lý.

Nếu bạn nghĩ về cách các thuật toán phải được cấu trúc để xử lý tất cả các tính năng đối với tất cả các tính năng giữa hai lớp tính năng, thì bạn đang làm việc với các vòng lặp lồng nhau (cho các tính năng trong FC1 và FC2 và cho các đỉnh trong Feature1 và Feature2). Trong các hoạt động như vẽ, số lượng yêu cầu vẽ thường được quan tâm nhiều hơn các đỉnh trong mỗi yêu cầu, nhưng với các thao tác theo chủ đề, các thuật toán chính có thể dựa trên số lượng đỉnh trong mỗi cặp F1 / F2 , với " ký hiệu O lớn " là "O (N * M)" (thời gian hoàn thành thao tác có liên quan đến yếu tố số lượng đỉnh liên quan), với các tính năng lớn trong cả hai tập dữ liệu, đủ gần với O (N ^ 2) để khiến bạn lo lắng về công việc từng hoàn thành.

Tôi đã thành công bằng cách phủ các tính năng lớn (như Nga, Canada, Mỹ, Úc, Brazil, Na Uy) bằng lưới 5 độ (fishnet) để giảm độ phức tạp của tính năng cho xử lý trung gian. Tôi đã thấy các hoạt động đa giác điểm trên lớp QUỐC GIA 1: 15m bị giới hạn đỉnh chạy nhanh hơn 100-1000 lần so với bảng ban đầu (chỉ tăng số lượng tính năng 20 lần). Bạn cần phải cẩn thận trong logic xử lý của mình để xử lý các mối quan hệ một-nhiều và nhiều-nhiều một cách chính xác, đặc biệt là trong trường hợp tồn tại một ranh giới sai.

Ngoài ra còn có khía cạnh "lợi nhuận giảm dần" để tiết kiệm khi làm việc với các tính năng nhỏ hơn - Tôi đã giải quyết trên lưới 5 độ bằng cách thử nghiệm hiệu suất của giao cắt với 90, 45, 30, 20, 15, 10, 5, 3, 2 và Các lưới 1 độ, cho thấy sự gia tăng đáng báo động về thời gian xử lý khi số lượng các tính năng tăng lên.

những lần, nơi ít tính năng với nhiều đỉnh có hiệu quả hơn, do đó nó có lẽ là giá trị các nỗ lực để làm một số xét nghiệm về trật tự hoạt động với dữ liệu thực tế (không phải đơn giản hóa các tập con thử nghiệm) trước khi cam kết một cách tiếp cận trong khác (cân bằng việc sử dụng bộ nhớ RAM với thời gian chạy).

LƯU Ý: Tôi đã chạy lại bài tập chia lưới với phần cứng hiện đại và đạt hiệu suất tối ưu với lớp phủ 30 độ, để tăng nguy cơ các tính năng quá nhỏ và tăng tầm quan trọng của việc đánh giá với dữ liệu sản xuất.


10

Một hoạt động Dissolve thường sẽ làm giảm số lượng các tính năng, cung và nút trong một lớp, đặc biệt đối với các lớp có độ dài đáng kể của ranh giới được chia sẻ. Do thời gian sử dụng trong hoạt động đệm phụ thuộc rất nhiều vào số lượng nút, nên việc xử lý trước với Dissolve có thể giảm đáng kể thời gian chạy (và yêu cầu bộ nhớ). Việc nó có đáng hay không trong trường hợp của bạn sẽ tùy thuộc vào mức độ bạn có thể giảm số lượng nút (phụ thuộc vào lớp dữ liệu của bạn) và hiệu quả của hoạt động Hòa tan so với Bộ đệm . Theo kinh nghiệm của tôi, sử dụng Bộ cấu trúc liên kết Java, thao tác Hòa tan có thể khá nhanh so vớiBộ đệm , mặc dù hiệu suất của Dissolve thay đổi đáng kể theo thư viện. Sự xem xét khác là Dissolve bị ảnh hưởng mạnh mẽ bởi các lỗi tô pô. Nếu lớp của bạn chứa lỗi, bạn sẽ cần thực hiện làm sạch vectơ trước khi hoạt động Dissolve, điều này sẽ thêm vào thời gian chạy dòng công việc.


2
Tôi không chắc lắm về phần "yêu cầu bộ nhớ". Các tính năng lớn hơn yêu cầu lưu trữ nhiều hơn. Việc đệm các tính năng rất phức tạp sẽ khó khăn hơn (và tốn nhiều RAM) hơn so với việc đệm các tính năng đơn giản. Nhiều khả năng có một "điểm ngọt" giữa "quá nhiều tính năng" và "quá nhiều đỉnh trên mỗi tính năng" hơn là đưa ra một khẳng định chăn rằng việc hòa tan trước sẽ luôn cải thiện hiệu suất bộ đệm.
Vince

@Vince, tôi đồng ý rằng hiệu ứng Hòa tan có hiệu quả hơn nhiều trong việc giảm thời gian chạy thay vì bộ nhớ, nhưng cuối cùng nếu một nhóm tính năng có ít tính năng hơn với tổng số nút ít hơn, nó sẽ cần ít bộ nhớ hơn để thể hiện.
WhiteboxDev

Nó sẽ giảm tổng bộ nhớ, nhưng không phải bộ nhớ cho mỗi tính năng. Việc thực hiện các hoạt động xử lý địa lý trên các tính năng lớn, phức tạp mất nhiều thời gian hơn so với các tính năng đơn giản hơn - và không chỉ theo cách thức tuyến tính, theo kinh nghiệm của tôi.
nmpeterson

@Vince, cũng Hòa tan sẽ, tùy thuộc vào lớp, dẫn đến các tính năng lớn hơn ít hơn. Kích thước địa lý thực tế của một tính năng không liên quan gì đến các yêu cầu bộ nhớ của nó. Nó hoàn toàn phụ thuộc vào độ phức tạp của nó, là một hàm của số lượng nút được sử dụng để thể hiện nó. Tôi sẽ đồng ý với bạn về sự cân bằng điểm ngọt mặc dù.
WhiteboxDev

@nmpeterson, Vâng, đúng là điều này nằm trên mỗi lớp chứ không phải trên mỗi tính năng. Nhưng chúng tôi đệm các lớp nói chung và không phải là các tính năng riêng lẻ. Bạn chắc chắn là đúng về tính phi tuyến tính của hiệu suất trong xử lý không gian địa lý! Dường như đó luôn là trường hợp của chúng tôi!
WhiteboxDev
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.