Hiệu suất kém với việc lưu trữ các trình quét lớn trong PostGIS và hiển thị trực quan trong QGIS


23

câu hỏi của tôi liên quan đến việc sử dụng và hiệu suất của một số công cụ phần mềm kết hợp, cụ thể là PostgreSQL, PostGIS, QGIS và GDAL.

Tôi là người dùng ArcGIS, Python và R lâu năm, người quan tâm đến việc đa dạng hóa vào hệ sinh thái GIS nguồn mở miễn phí và cả Linux. Gần đây, tôi rất quan tâm đến việc sử dụng QGIS (ver 2.8) cùng với PostgreSQL (ver 9.4) và PostGIS (ver 2.1) và tôi đã cài đặt phần mềm trên máy tính có Windows 8.1 x64 (thông số kỹ thuật của máy tính ngắn gọn: ThinkPad X200s với Core 2 tốc độ 2.1 GHz, RAM 8GB và ổ SSD 240 GB). Khi tôi tìm hiểu cách quản lý dữ liệu không gian của mình (trị giá ~ 100 GB), tôi muốn chạy Ubuntu trên máy này.

Hiện tại, tôi chỉ đơn giản là cố gắng lưu trữ và lấy các shapefiles và raster một cách đáng tin cậy. Cho đến nay tôi đã thành công trong việc tải các shapefiles vào PostGIS, nhưng các raster đang tỏ ra có vấn đề hơn. Tôi đã hoàn thành nhập khẩu đơn lẻ và hàng loạt các tệp GeoTIFF và GRID nhỏ, nhưng các trình quét lớn hơn (giả sử, tệp 15619x14655 có kích thước 870 MB trên đĩa) có thể tải mãi mãi vào PostGIS. Tôi đã đọc và định cấu hình công cụ raster2pgsql để xây dựng các chỉ mục không gian và tải các trình quét bằng cách sử dụng các tham số sau:

raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres

Hiệu suất trong nhập khẩu vẫn còn rất kém và phần cứng không phải là vấn đề. Hình dung của các trình quét PostGIS trong QGIS thậm chí còn tệ hơn, từ từ tải các trình quét nhỏ ở mức tốt nhất hoặc đóng băng hoàn toàn. Các raster lớn như người tôi đã đề cập là không thể hình dung được trong QGIS. Từ các tài liệu và thảo luận trên diễn đàn, sự thiếu sót này dường như là do trình điều khiển raster PostGIS của GDAL chứ không phải do chính QGIS. Các cuộc thảo luận diễn đàn đề cập đến vấn đề này một cách ngắn gọn và một số thậm chí còn đề xuất rằng các raster không nên được lưu trữ trong PostGIS (điểm nào trong cơ sở dữ liệu không gian không xử lý trơn tru các trình quét?). Tuy nhiên, tôi thường xuyên sử dụng cơ sở dữ liệu địa lý tệp của ESRI để lưu trữ, trực quan hóa và phân tích các trình quét khá lớn (~ 70GB) một cách nhanh chóng và dễ dàng, và ArcGIS 10.1 không bao giờ bị đóng băng hoặc chậm do các hoạt động thông thường như vậy.

Có điều gì tôi đang thiếu ở đây, một nút cổ chai tôi chưa giải quyết? PostgreSQL có cần điều chỉnh để nhận ra lợi ích hiệu suất của PostGIS không? Tôi có thiếu một phiên bản GDAL mà tôi cần săn lùng và biên dịch không? Làm cách nào để cải thiện hiệu suất và hình ảnh của PostGIS trong QGIS của shapefiles và raster đặc biệt? Làm cách nào tôi có thể tận hưởng vinh quang của việc quản lý dữ liệu không gian toàn diện và nhanh chóng thông qua thiết bị đầu cuối Linux? Bất kỳ trợ giúp về vấn đề này sẽ được hoan nghênh!


Tôi đã làm theo hướng dẫn này bởi một Duncan Golicher: https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/

Tôi đã sử dụng gạch với cài đặt tự động ban đầu, nhưng tôi đặt lại ốp lát thành 100x100 ô mỗi hàng và sau đó bao gồm các kim tự tháp như trong hướng dẫn như sau:

raster2pgsql -s 3161 -d -C -I -M -l 4 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres

Tôi đã có thể nhập thành công raster 870 MB IMG trong một thời gian tốt và hiển thị nó trong QGIS mà không làm chậm hoặc làm hỏng ứng dụng. Thời gian kết xuất không linh hoạt như tôi mong đợi, nhưng nó có thể chấp nhận được. Tôi sẽ đọc thêm về tham số -l để sử dụng nó đúng cách.

Ngẫu nhiên, khi nhập tệp dem.img dưới dạng bảng dem100, một bảng raster khác đã được tạo có tên là "o_4_dem100". Khi tôi nhập nó dưới dạng một lớp trong QGIS, nó có phạm vi giá trị trong khoảng từ 201 đến 524, trong khi lớp dem100 có phạm vi từ 36 đến 524. Tôi có đúng không khi cho rằng bảng phụ này là bảng kim tự tháp hẹp hơn phạm vi giá trị là kết quả của việc được tổng hợp đến độ phân giải thấp hơn?


Tôi không nghĩ rằng phần cứng không đầy đủ là vấn đề. Đây là một bản tóm tắt ngắn gọn về những gì tôi đã tìm thấy cho đến nay.

Trình điều khiển raster PostGIS của GDAL đã có vấn đề về hiệu suất trong quá khứ ( xem thêm ở đây ). Mặc dù những vấn đề này đã được ghi nhận vào năm 2012, tôi tự hỏi liệu GDAL 1.11.2 được tìm thấy trong QGIS 2.8 có còn vấn đề này không. Chắc chắn có những người khác sử dụng QGIS và PostGIS để hiển thị và lưu trữ raster?

Trong một lưu ý liên quan có thể có, tôi cũng đã gặp vấn đề về hiệu năng khi mở các bảng thuộc tính PostGIS trong QGIS với các bảng có ~ 4,7 triệu bản ghi . Sau một vài gợi ý trong chủ đề đó và không khắc phục được sự cố, cuối cùng tôi đã nộp báo cáo lỗi với QGIS cuối cùng đã bị đóng và liên kết với báo cáo lỗi tương tự sau đây . Mặc dù báo cáo lỗi đã bị đóng, nhưng nó dường như không được sửa ...

Để tổng hợp những nỗ lực của tôi cho đến nay:

  • Tôi đã tối ưu hóa máy chủ PostgreSQL cho dữ liệu không gian.
  • Tôi đã xây dựng các chỉ số không gian cho các bảng hình học và thực hiện VACUUM.
  • Hành vi của QGIS để mở các bảng thuộc tính lớn (~ 4,7m bản ghi) dường như cố gắng đọc tất cả các bản ghi thay vì trả về một tập hợp con để xem tức thời. Điều này dẫn đến hiệu suất kém.
  • Hiệu suất trong việc hiển thị các bảng hình học PostGIS lớn dường như không phải là vấn đề.

  • Với raster2pgsql, các raster đã được lập chỉ mục, lát gạch và được nhập dưới dạng các bảng raster với các kim tự tháp trong PostGIS.

  • Các trình quét có kích thước hợp lý vẫn rất chậm để nhập vào PostGIS, hãy để một mình mở và xoay quanh trong QGIS.

Cũng đáng lưu ý rằng khi nhập các trình quét lớn hoặc mở các bảng thuộc tính lớn bằng PostGIS, mức tiêu thụ bộ nhớ cho raster2pgsql và qgis-bin là hơn 1GB. Như @Michael và @Paul đã đề cập để trả lời câu hỏi ban đầu của tôi, có vẻ như PostGIS không mang lại nhiều lợi ích nếu lưu trữ các trình quét. Tuy nhiên, tại thời điểm đó tôi đặt câu hỏi tại sao tôi lại chạy QGIS + PostGIS cho tất cả các nhu cầu về GIS của mình, đặc biệt là khi tệp ESRIGDB cho phép các thuộc tính raster, bộ dữ liệu khảm và các hoạt động raster khác được cơ sở dữ liệu địa lý tạo điều kiện. Vì vậy, có lẽ tôi thực sự đang thiếu một cái gì đó hoặc QGIS và PostGIS không đáp ứng nhu cầu về GIS của tôi. Tôi thấy cái sau khó tin.


Liệu các raster phải ở PostGIS không? Những lợi ích / chức năng bổ sung mà bạn hy vọng đạt được từ điều này? Tôi thấy rằng vector PostGis có thể chấp nhận được và đã cung cấp chỉnh sửa cho nhiều người dùng nhưng raster PostGis không có lợi ích thực sự so với raster dựa trên tệp (máy chủ được lưu trữ). Câu hỏi hay mặc dù; hoàn toàn có thể có một số lợi ích mà tôi đã bỏ lỡ trong đánh giá của mình ...
Michael Promotionson

Tôi nghĩ rằng các trình raster PostGIS cho phép tính toán raster nhanh hơn cũng như hiệu suất tốt hơn với các hoạt động raster / vector. Đó là ngoài những lợi ích của DB không gian: độ tin cậy, khả năng truy cập, phương tiện sao lưu, lưu trữ nhỏ gọn hơn, v.v. Trong mọi trường hợp, cách tiếp cận tệp / gạch không cho phép các chức năng tìm kiếm, kim tự tháp dựng sẵn, ốp lát và các khả năng khác cải thiện cách sử dụng và hiển thị raster.
mbcaradima

Tôi chưa thấy số liệu nào nói rằng các trình quét của PostGIS nhanh hơn khi tính toán raster .. trong cả hai trường hợp với ổ SSD 240 GB (BTW lựa chọn tốt, nhanh hơn RAID với một phần chi phí / công sức), bạn sẽ lấp đầy rất nhanh với các trình quét ... ECW / JP2 cho 8 bit hoặc GeoTIFF với các dấu nén nén LZW / Deflate hầu hết các hộp đó, kim tự tháp dựng sẵn, ốp lát (thông qua VRT), sao lưu dưới dạng tệp, v.v ... lợi ích duy nhất là chức năng tìm kiếm. Tôi nhận ra mình đang hơi lạc đề nhưng nếu raster PostGIS không làm những gì bạn mong đợi thì tại sao không gắn bó với raster file để hiển thị?
Michael Promotionson

3
Ai đã từng nói rằng các raster PostGIS nhanh hơn bất cứ thứ gì? Chúng có thể thuận tiện hơn (API truy cập SQL tiện dụng) và chúng có thể hữu ích cho việc phân tích (raster và vector trong cùng một nhóm) nhưng nhanh hơn ? Không bao giờ.
Paul Ramsey

1
Tôi đang làm việc thông qua một cuốn sách về PostGIS (PostGIS in Action, tái bản lần 2) và dường như rất tự nhiên khi cho rằng lợi ích của việc lưu trữ shapefile trong DB không gian cũng sẽ mở rộng đến một raster. Tất nhiên, với các mô hình dữ liệu khác nhau của họ, tôi có thể thấy giả định này hoàn toàn trực quan. Tuy nhiên, các raster thường được lưu trữ trong cơ sở dữ liệu địa lý với ArcGIS và cho phép xây dựng các kim tự tháp, xử lý địa lý nhanh hơn và xây dựng các bức tranh khảm. Trong một quy trình làm việc với phần mềm nguồn mở, người dùng GIS phải làm việc với các trình quét như thế nào? BTW, tôi sẽ tự đấm vào mặt mình.
mbcaradima

Câu trả lời:


9

Nếu bạn muốn hiển thị các trình quét lớn trong QGIS, bạn phải xây dựng các kim tự tháp, cho hình ảnh tif trên hệ thống tệp hoặc cho hình ảnh được đăng ký trong Postgis.

Sự khác biệt về hiệu suất trong kết xuất QGIS giữa một raster lớn trong hệ thống tệp hoặc trong Postgis là mô phỏng. Người dùng sẽ không nhận thấy sự khác biệt. Nhưng - nếu và chỉ nếu - bạn xây dựng các kim tự tháp với tùy chọn -l.

Nếu bạn đơn giản nhập hình ảnh mà không có tùy chọn -l hoặc chỉ với -l 4 nó sẽ không hoạt động .

Nếu bạn sử dụng, ví dụ, -l 2,4,8,16bốn cấp kim tự tháp sẽ được tạo, như trong lớp bên dưới:

Kim tự tháp được tạo ra với -l 2,4,8,16

Nếu bạn muốn có trải nghiệm người dùng tốt hơn, bạn nên thêm nhiều cấp độ kim tự tháp hơn, như -l 2,4,8,16,32,64,128,256 . Điều này sẽ tạo ra tám cấp độ của kim tự tháp.

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

Tóm lại, câu trả lời cho câu hỏi này là: nhập raster với tùy chọn -lvà sử dụng cùng số cấp độ hình chóp như bạn sử dụng cho cùng một raster trên hệ thống tệp.

Ví dụ:

raster2pgsql -s 3161 -d -C -I -M -l 2,4,8,16,32,64,128,256 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres

5

Tôi đang gặp vấn đề chính xác tương tự với việc hiển thị các trình quét trong QGIS từ PostGIS (xem câu hỏi gần đây của tôi ) Tôi đã tìm thấy bài đăng này hữu ích và tăng nhẹ kết xuất raster được cải thiện sau:

shared_buffers = 5000MB work_mem = 100MB bảo trì_work_mem = 100MB

Tuy nhiên, với điều đó đã nói, tôi hoàn toàn đồng ý rằng hiệu suất của các trình raster PostGIS trong QGIS là không tốt. Tôi đang xử lý 608 geotiff nén có tải lớn như VRT nhưng về cơ bản là không sử dụng được trong PostGIS. Cố gắng tăng hiệu suất của máy chủ dbase, nhưng ngoài ra tôi không thể quá hữu ích. Tôi cũng có thể phải dựa vào hệ thống tệp để phục vụ các trình quét trong tổ chức của mình.


Cảm ơn bình luận của bạn, Cliff. Tôi đã áp dụng một số thay đổi của bạn và sẽ báo cáo bất kỳ cải tiến hiệu suất lớn nào. Nhìn chung, tôi phải nói rằng hiệu suất của QGIS gây thất vọng khi hiển thị các trình quét của PostGIS và các bảng thuộc tính tải / truy vấn. Hiệu suất raster trong PostGIS cũng gây thất vọng. Tôi không có vấn đề nào với cơ sở dữ liệu địa lý tệp, vì vậy tôi tự hỏi điều gì là sai?
mbcaradima

1
Tình cảm của tôi chính xác. Tôi đã dành cả tuần để cố gắng thực hiện điều này và đơn giản là không thể chạy nó. Tôi hiện đang thử nghiệm VM (Ubuntu Server) của mình với 10 bộ xử lý và 10GB ram. Nếu điều đó vẫn chậm chạp, tôi phải làm điều gì đó sai. Tôi cũng bối rối tại sao các lớp WMS trong QGIS về cơ bản không thể sử dụng được do tốc độ kết xuất chậm của chúng. Chúng ta nên kết nối nhiều hơn về điều này vì cả hai chúng ta đều ở trên cùng một chiếc thuyền.
Vách đá

Nếu chúng tải tuyệt vời như một VRT, tại sao bạn không dừng lại ở đó? Những gì bạn đang mong đợi từ cuộc hành trình raster tuyệt vời này?
Paul Ramsey

Tôi đoán câu trả lời của tôi cho vấn đề này, Paul, chính xác là những gì OP đã nói trong bài tiếp theo: "Tuy nhiên, tại thời điểm đó tôi đặt câu hỏi tại sao tôi sẽ chạy QGIS + PostGIS cho tất cả các nhu cầu về GIS của mình, đặc biệt là khi tệp ESRIGDB cho phép các thuộc tính raster, bộ dữ liệu khảm và các hoạt động raster khác được tạo điều kiện bởi cơ sở dữ liệu địa lý. Vì vậy, có thể tôi thực sự đang thiếu một cái gì đó hoặc QGIS và PostGIS không đáp ứng nhu cầu về GIS của tôi. Tôi thấy điều đó thật khó tin. "
Vách đá

1
Hơn nữa, tôi sẽ nói rằng khoảng 70% phân tích mà tôi thực hiện là trên các raster và khoảng 40% dữ liệu tôi muốn cung cấp cho tổ chức của mình thông qua QGIS là dữ liệu raster. Thật hợp lý khi có tất cả dữ liệu raster và vector trong một cơ sở dữ liệu để người dùng có thể thiết lập một kết nối và có quyền truy cập vào toàn bộ cơ sở dữ liệu của tổ chức chúng tôi. Thay vào đó, tôi sẽ phải tạo tín dụng cho dbase và tín dụng cho chia sẻ tệp. Thay phiên, tôi nghiêm túc xem xét việc loại bỏ QGIS và xây dựng một ứng dụng web với Geoserver (ps: luôn sẵn sàng cộng tác về vấn đề này với bất kỳ ai quan tâm).
Vách đá

4

Không chắc đó là trường hợp của bạn, nhưng tôi phát hiện ra -Ikhông nên sử dụng cùng với dữ liệu nối thêm -a.

Tôi đã nhập nhiều tệp TIF vào DB và -Ithực sự tạo lại chỉ mục và thực hiện analysetrên bảng cho mỗi tệp, mất thêm 10 lần thời gian.

-Ichỉ nên được sử dụng khi tạo bảng, với -ptùy chọn.

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.