Thiết kế tốt nhất cho nguyên mẫu Python / PostGIS mã nguồn mở


9

Tôi đang viết một ứng dụng web chuyên sâu về dữ liệu được phân phối thông qua apache. Câu hỏi của tôi là về cách sắp xếp tốt nhất xử lý cho rằng có nhiều tùy chọn.

Tôi có quyền xử lý OpenLayers / JQuery / Javascript, PostGIS / Postgresql (với pssql), python / psycopg2, php.

Cơ sở dữ liệu chứa khoảng 3 triệu hàng và nguyên mẫu hiện đang chạy như sau:

  • Người dùng nhấp vào một điểm trên cửa sổ OpenLayers

  • Tọa độ được gửi dưới dạng yêu cầu AJAX thông qua chức năng python trên máy chủ

  • Hiện tại ứng dụng của tôi không quốc tịch

  • Psycopg2 của Python được sử dụng để gọi một thủ tục được lưu trữ pssql và một tập hợp lớn các giá trị WKT (và trường dữ liệu) được trả về mô-đun python

  • Trường dữ liệu được sử dụng để phân loại các bản ghi WKT trong python như sau: tất cả các giá trị WKT được phân loại thành một trong 5 nhóm. Khoảng 1% giá trị WKT thực sự được sửa đổi.

  • Năm bộ / nhóm WKT được đệm để tạo ra năm đa giác riêng biệt. Tôi hiện đang gọi một thủ tục được lưu trữ trong cơ sở dữ liệu để làm điều này. Đến lượt nó chỉ sử dụng ST_BUFFER. (Tôi đã cân nhắc sử dụng Shapely nhưng không chắc chắn sẽ có lợi thế về hiệu suất do thư viện GEOS được sử dụng trong cả hai trường hợp ...)

  • Cuối cùng, 5 giá trị văn bản WKT được gói trong một chuỗi JSON và được gửi lại cho OpenLayers để hiển thị dưới dạng năm lớp.

Tôi thấy rằng các nút cổ chai là tìm kiếm không gian ban đầu và giai đoạn đệm cuối cùng.

Tôi đoán Câu hỏi là:

Có cách nào tốt hơn để sắp xếp mọi thứ? Ví dụ, TẤT CẢ việc xử lý dữ liệu có nên được thực hiện trong PostgreSQL (ví dụ: với con trỏ) và đây có phải là một điều tốt về mặt bảo trì và hiệu suất không? Sẽ tốt hơn nếu sử dụng máy chủ ô vuông để tránh truyền chuỗi WKT dài cho máy khách web? Làm thế nào bạn sẽ giải quyết nó?


Các bộ đệm luôn có cùng khoảng cách hoặc dựa trên đầu vào của người dùng? Bạn có đệm bộ đệm thủ tục lưu trữ hoạt động chống lại dữ liệu được gửi từ python hoặc bảng gốc? Ngoài ra nó sẽ hữu ích để có một số ý tưởng về những gì bạn đang cố gắng để đạt được.
Matthew Snape

Matthew - Tôi đang cố gắng tạo ra các đa giác drivetime. Tôi biết điều gì đó về đa giác lõm nhưng muốn thử theo cách này, chủ yếu để có độ chính xác cao hơn. Đa giác là bộ đệm MultiLinestrings 200m (nghĩa là: đường). Tôi hiện đang chơi với ý tưởng đệm trước tất cả các con đường trong cơ sở dữ liệu, nhưng tôi vẫn cần hợp nhất chúng. \ n #
John Steedman

Nói chung, tôi đang tìm cách giải quyết một kiến ​​trúc cân bằng xử lý địa lý khá chuyên sâu với giao diện người dùng web đáp ứng: tất nhiên không nhanh như Google, nhưng có thể nhận ra theo kỳ vọng của người dùng ngày nay! Điều này là cho một vài người dùng quyền lực.
John Steedman

Câu trả lời:


3

Đệm cổ chai

Khi sử dụng ST_Buffer, bạn có thể giảm độ phức tạp của hình dạng kết quả bằng cách thêm tùy chọn num_seg_ cục_circle thấp hơn. Điều này sẽ làm giảm số lượng xử lý khi đệm, và trong các hoạt động tiếp theo.

Từ tài liệu của PostGIS:

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

Nói chung trong PostGIS, bạn sẽ có hiệu suất tốt hơn nếu bạn chạy truy vấn đối với các bảng được lập chỉ mục đúng. Điều này cho phép bạn dễ dàng truy cập vào một số tối ưu hóa (chẳng hạn như phân cụm). Xem xét xử lý 1% thay đổi riêng biệt và hợp nhất hai ở cuối.


2

Không nghĩ gì về kiến ​​trúc, đối với tất cả các ứng dụng bản đồ Web, bạn muốn thực hiện càng nhiều việc xử lý trước thời hạn. Điều này có nghĩa là nếu bạn có thể, bộ đệm nên được tính toán trước, tất cả dữ liệu của bạn phải ở trong SRS đầu ra, v.v ... Rõ ràng, một số dữ liệu và tính toán cần phải là động.

Tôi đề nghị rằng ngoài Python, bạn nhìn vào MapServer và Geoserver để thực hiện các tính toán và tạo đầu ra. Cả hai đều có thể tạo ra các ô hình ảnh hoặc đầu ra GeoJSON. Cả hai ứng dụng đều có thể sử dụng PostGIS làm mặt sau.


Cảm ơn, David. Nghe có vẻ như một chính sách tốt mà tôi đã trôi dạt về phía mình. Tôi sẽ xem xét GeoServer cho các ô hình ảnh. Tôi đã sử dụng python / mapnik trong quá khứ cho việc này.
John Steedman

Một điều khác mà tôi vừa phát hiện ra là việc trả về các hàng thông qua một thủ tục được lưu trữ rất chậm (rất, rất).
John Steedman
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.