Định dạng lưu trữ không gian nhanh nhất?


8

Tôi tự hỏi phương pháp lưu trữ nào sẽ dẫn đến việc đọc nhanh nhất các vectơ bản đồ để kết xuất. SHP? Bài viết? SQLite? (Chúng không thay đổi thường xuyên và tôi không cần các hàm không gian cho các vectơ này).


1
Bạn đang nói bao nhiêu tính năng?
Roger D.

2
Câu hỏi của bạn dường như ngụ ý rằng nút cổ chai là quá trình đọc dữ liệu. Kinh nghiệm của tôi là tải thực tế nằm trong chính quá trình kết xuất, ít nhất là với MapServer. Đó là, tôi không thấy rằng việc sử dụng shapefiles hoặc cơ sở dữ liệu không gian sẽ tạo ra sự khác biệt lớn.
dariapra

@Roger - Tôi không chắc. Đây là Bản đồ của Hoa Kỳ sử dụng độ phân giải cao nhất (tiểu bang, quận, đường, sông). Tôi đã nhận được dữ liệu từ Naturalearthdata.com
Nate

@Nate, đó là trường hợp, tại sao ghi chú đọc trong OSM hoặc Google cho bản đồ của bạn? Sau đó phủ lên trên chúng? Để làm cho toàn bộ Hoa Kỳ sống mọi lúc là một quá trình lớn. Sau đó, bạn cần xem xét hiệu suất mạng, hiệu suất đĩa-io, CPU. Có rất nhiều điều có thể và sẽ ảnh hưởng đến hiệu suất.
DEWright

Câu trả lời:


12

Kiểm tra tốc độ

Có một số thử nghiệm rất nhanh về shapefiles so với cơ sở dữ liệu (PostGIS) cho MapServer trong bản trình bày này (từ 2007).

Tóm tắt:

  • Đối với bộ dữ liệu gồm 3 triệu tính năng đang chạy yêu cầu cho 30 tính năng, sau đó một PostGIS khác nhanh hơn shapefile (mặc dù điều này có thể đã thay đổi bằng cách sửa chỉ mục shapefile)
  • Đối với bộ dữ liệu 10.000 tính năng, shapefile nhanh hơn một chút.
  • Đối với các yêu cầu đồng thời, shapfile đã nhanh hơn

Và thời gian chi tiết, cũng có thể giúp quyết định xem định dạng lưu trữ có phải là một yếu tố quan trọng hay không.

                       PostGIS   Shapefile 
Start mapserv process  15ms      15ms
Load mapfile           3ms       3ms
Connect to DB          14ms      n/a
Query                  20ms      n/a
Fetch                  7ms       n/a
Draw                   11ms      28ms
Write Image            8ms       8ms
Network Delay          3ms       3ms

Luôn sử dụng FastCGI trong MapServer nếu sử dụng cơ sở dữ liệu, vì các kết nối cơ sở dữ liệu có thể được sử dụng lại, nếu không, một kết nối mới phải được tạo theo mỗi yêu cầu.

Triển khai cho người đọc Shapefile

Tốc độ đọc một shapefile (và dữ liệu từ cơ sở dữ liệu) phụ thuộc vào việc triển khai mã hóa cụ thể.

Mã nguồn cho MapServer mở một shapefile có thể được nhìn thấy ở đây . Theo dõi các bình luận, bạn có thể thấy tầm quan trọng của việc có một chỉ mục. Thông thường bạn chỉ có thể đọc một tệp theo một hướng để có được một bản ghi, nhưng với một chỉ mục bạn có thể đọc theo hai hướng.

345   /*    Read the .shx file to get the offsets to each record in             */
346   /*    the .shp file.   

Một ví dụ khác về việc mở một shapefile có thể được nhìn thấy trong nguồn Python cho PyShp . Một lần nữa bạn có thể thấy cách một chỉ mục được sử dụng để tìm các hình cụ thể trực tiếp.

Các yếu tố khác để Condsider

Các giới hạn của định dạng DBF (giới hạn về kích thước trường, không hỗ trợ null, giới hạn lưu trữ văn bản), cũng cần được xem xét khi quyết định có sử dụng cơ sở dữ liệu hay không.

Cơ sở dữ liệu cũng cung cấp các phương tiện bảo mật dữ liệu, dễ dàng tham gia và tạo các chế độ xem, ghi nhật ký và nhiều tính năng khác mà bạn sẽ không nhận được với một tệp độc lập.


10

Trái với những gì dariapra nói, kinh nghiệm của tôi trong việc phát triển Maperitive cho tôi biết rằng nút thắt lớn nhất là trong việc tải dữ liệu thực tế trước khi kết xuất. Tất cả phụ thuộc rất nhiều vào mức độ lớn của bộ dữ liệu được lưu trữ và mức độ lớn của bộ dữ liệu bạn đang cố gắng hiển thị trong một lần. Nếu bạn có thể tải tất cả vào bộ nhớ, thì shapefiles có lẽ tốt hơn so với sử dụng công cụ cơ sở dữ liệu.


4
+1 để chỉ ra rằng hình thức của nút cổ chai là vấn đề và cung cấp thông tin từ kinh nghiệm thực tế. Đồ tốt.
whuber

Đâu là nút cổ chai có vẻ là một câu hỏi thú vị và cởi mở phụ thuộc vào một số biến, có lẽ loại khối lượng công việc là một điều quan trọng. Tôi nhớ rằng một khi tôi đã lập chỉ mục một số shapefile với shapetree để có được kết xuất nhanh hơn một số lớp vectơ với MapServer và tôi không đạt được hiệu suất đáng kể.
dariapra

2
@dariapra Đúng vậy, nó phụ thuộc rất nhiều vào trường hợp sử dụng. Nếu anh ta có thể tải tất cả dữ liệu trong một lần, thì chỉ mục không gian là không thực sự cần thiết, nhưng tải dữ liệu từ một shapefile sẽ nhanh hơn nhiều so với thực hiện các truy vấn SQL. Mặt khác, nếu có một lượng dữ liệu khổng lồ cần được lọc, tôi sẽ đặt cược vào cơ sở dữ liệu chứ không phải shapefiles.
Igor Brejc

4

Chương trình nào bạn sẽ sử dụng để kết xuất? Điều này có thể ảnh hưởng đến kết quả. Dù sao, có một shapefile với chỉ số không gian (ví dụ: http://mapserver.org/utilities/shptree.html ) thường được sử dụng là kỹ thuật nhanh nhất. Ngoài ra: nó phụ thuộc vào ứng dụng của bạn, nhưng lưu trữ kết quả được hiển thị của bạn thường hữu ích hơn nhiều để cải thiện hiệu suất.


Cảm ơn bạn. Hiện tại tôi đang sử dụng MapGuide (vẫn là loại khám phá các tùy chọn của chúng tôi) và tôi đã xem xét Mapserver.
Nate

2

Shapefile sẽ là cách nhanh nhất và có lẽ là đặt cược tốt nhất của bạn. Có chi phí hoạt động cho bất kỳ cơ sở dữ liệu SQL nào, sau đó có quản lý trả về các tập kết quả lớn (chuyển đổi từ kiểu dữ liệu cơ sở dữ liệu sang kiểu dữ liệu gốc cũng sẽ làm mọi thứ chậm lại).

Hãy thử sử dụng gói nguồn mở từ maptools.org để đọc. Các công cụ ArcGIS, mặc dù mục đích được xây dựng, nhưng có một chút chi phí để bắt đầu và rất tốn kém.

Hi vọng điêu nay co ich

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.