Hệ thống GIS tốt nhất cho ứng dụng web hiệu suất cao - PostGIS vs MongoDB


36

Tôi đang làm việc trên một ứng dụng web / di động dựa trên dữ liệu vị trí. Vì tôi đã quen thuộc với MongoDB, tôi thấy việc lập chỉ mục không gian địa lý của mongo khá phù hợp với nhu cầu của tôi. Vì tôi chủ yếu xử lý các điểm vị trí đơn giản / ngắn, lập chỉ mục Mongo 2d là tốt cho tôi.

Trên đường đi, tôi đã chọn PostGIS, vì cách ổn định / trưởng thành của nó. Và bộ tính năng tuyệt vời của nó. Nhưng mối quan tâm chính của tôi là hiệu suất do dữ liệu của tôi phụ thuộc nhiều vào vị trí (chủ yếu là 70 - 80% các cuộc gọi db xử lý vị trí).

Tôi thích mongo vì nó được sử dụng bởi các ứng dụng web hiệu suất cao như đã có. Nhưng tôi đã thấy PostGIS chủ yếu được sử dụng trong các dự án của chính phủ / doanh nghiệp (chủ yếu là các ứng dụng không phải web / di động). Vì vậy, bây giờ tôi có chút bối rối để chọn đúng db db cho ứng dụng web / di động của mình? Có bất cứ đề nghị?


2
tạo chỉ mục không gian với postgres / postgis và bạn sẽ thấy hiệu suất tốt. Nhưng nếu bạn hạnh phúc hơn với MongoDB thì hãy tiếp tục với điều đó.
Mapperz

Câu trả lời:


36

Nếu tải ghi của bạn (luồng dữ liệu đến) có khả năng phát triển không giới hạn (nếu thành công của dự án web của bạn sẽ khiến số lượng ghi tăng lên tăng trưởng) thì hãy đi với Mongo, bởi vì sẽ rất khó để kiến ​​trúc sư theo cách của bạn viết nút cổ chai trong PostGIS / PostgreSQL khi bạn phát triển vượt quá khả năng của một máy chủ cao cấp duy nhất (điều này được ghi nhận là rất lớn).

Bạn có thể kiến ​​trúc các giải pháp PostGIS / PostgreSQL tốt cho tải đọc nặng (sao chép chính / phụ) và cho các kích thước dữ liệu lớn (phân vùng bảng) nhưng tải rất khó. Bạn đã đặt ra trường hợp chống lại Mongo và cho PostGIS, đây là bộ tính năng lớn hơn nhiều và sự trưởng thành mã của PostGIS, vì vậy hãy cân bằng với các mối quan tâm khác.


3
Ồ, và hãy nhớ, "MongoDB là quy mô web". xtran normal.com/watch/6995033/mongo-db-is-web-scale
Paul Ramsey

vâng tôi biết điều đó .. nó thực sự rất buồn cười (và đánh thẳng vào đầu nếu bạn chỉ muốn tự mình ưa thích công nghệ mới nhất) :)
RameshVel

1
Chà, bạn luôn có thể "webscale" bằng cách tắt fsync = tắt;)
Ragi Yaser Burhum

1
PostgresXC hiện có thể cung cấp một hệ thống ghi song song với đầy đủ các đảm bảo giao dịch và thực hiện truy vấn đa nút. Thắt lưng và treo, OLAP và OLTP, đáng xem xét. Và nó hỗ trợ PostGIS.
Paul Ramsey

Nhưng nếu bạn chọn PostgresXC / XL, bạn sẽ cần phải tự duy trì gói. Nó chính thức chỉ có sẵn cho Fedora / Redhat, những người yêu thích Ubuntu phải dành thời gian biên dịch mọi thứ bằng tay.
Ravi Kumar

21

Tôi đã sử dụng PostGIS được một vài năm và chỉ gần đây mới bắt đầu điều tra làm thế nào tôi có thể sử dụng MongoDB để xử lý các trường hợp sử dụng nhất định. Tôi đã xử lý dữ liệu điểm có các trường thưa thớt - như dữ liệu OSM với số lượng thẻ khác nhau trên mỗi bản ghi và vì MongoDB không có lược đồ, nên nó rất phù hợp với điều này. Tôi đã tải một mẫu dữ liệu này vào một thể hiện của mỗi DB và đây là những gì tôi tìm thấy.

Tôi nhận thấy rằng để lưu trữ và truy xuất dữ liệu điểm đơn giản, Mongo hoạt động tốt. Các truy vấn không gian địa lý hộp giới hạn dường như hoạt động tốt, và tôi thấy rằng hiệu suất tổng thể là rất tốt. Nó cũng rất dễ cài đặt và bắt đầu, mặc dù tôi đã thấy rằng công cụ mongoimport không cho phép tôi xác định trường tọa độ 2D hỗn hợp trong tệp TSV hoặc CSV. Vì việc viết một tập lệnh tạo JSON khá dễ dàng, điều này không thành vấn đề. Hạn chế lớn của nó tại thời điểm này là hầu như không có gì khác trong lĩnh vực không gian địa lý có thể đọc dữ liệu từ nó. Dường như có một plugin nguồn dữ liệu Mapnik thử nghiệm tại https://github.com/springmeyer/mapnik-mongo , nhưng đó là tất cả những gì tôi có thể tìm thấy.

Mặt khác, PostGIS mất nhiều thời gian hơn để thiết lập (ít nhất là đối với tôi), nhưng như đã đề cập ở trên, nó cung cấp nhiều tính năng hơn ngay lập tức. Ngoài việc cung cấp khả năng phân tích không gian tinh vi hơn nhiều, nó còn được hỗ trợ bởi rất nhiều ứng dụng và thư viện khác; Maperver, Mapnik, QGis, GDAL, v.v. Đối với tôi, PostGIS không chỉ là một hệ thống GIS thực sự, hơn là một hệ thống lưu trữ và truy xuất đơn giản.

Về hiệu suất, tôi thấy rằng tôi có thể truy xuất dữ liệu rất nhanh từ cả hai hệ thống. Tuy nhiên, có vẻ như PostGIS được hưởng lợi nhiều hơn từ sự hiện diện của các chỉ mục. MongoDB đã nhanh hơn một chút khi trả lại toàn bộ dữ liệu được đặt cho tôi (2 triệu bản ghi) cùng một lúc và chậm hơn một chút khi trả về truy vấn sử dụng chỉ mục - lần đầu tiên. Tôi không chắc chắn chính xác về cơ chế mà nó sử dụng cho bộ nhớ đệm, nhưng tôi có thể thấy rằng nếu tôi lặp lại một truy vấn trong MongoDB, kết quả sẽ quay lại nhanh hơn nhiều lần thứ 2. Tôi thấy một cái gì đó tương tự trong PostGIS, nhưng không cùng mức độ. Tôi cũng lưu ý rằng việc sử dụng bộ nhớ trên máy của tôi dường như cao hơn nhiều khi chạy MongoDB so với PostGIS.

Vì vậy, kết luận của tôi là tôi sẽ không loại bỏ PostGIS làm hệ thống lưu trữ và phân tích không gian địa lý mặc định của mình, nhưng đối với một số loại dự án (cụ thể là bản đồ web hiển thị các hình ảnh và / hoặc dữ liệu điểm) tôi có thể xem xét sử dụng MongoDB là cửa hàng dữ liệu của tôi.

Roger


1
Tôi hoàn toàn đồng ý với bạn .. mongo là tùy chọn rất tốt xử lý dữ liệu Geo cơ bản. hiện đang thực hiện các truy vấn hộp hình cầu và giới hạn đơn giản hơn và nó đang hoạt động tốt .. Một điều nữa tôi muốn thêm là Solr lucene cũng cung cấp các hàm địa lý cơ bản như mongo và cũng khá nhanh khi sử dụng với các truy vấn mặt. hiện tại đang sử dụng kết hợp cả mongo & Solr ..
RameshVel

@RameshVel bạn có thể nói gì thêm về solr lucene không?
rkm

@rashad, bạn có thể cài đặt elaticsearch (chỉ cần tải xuống, giải nén và thực hiện) và chơi với các truy vấn Geo DSL. Nó khá cơ bản, nhưng nếu bạn muốn tìm kiếm / khía cạnh cũng như địa lý, bạn có thể sử dụng nó.
Ravi Kumar

3

Về việc sử dụng bộ nhớ với Mongo, đáng để chỉ ra rằng Mongo hoàn toàn dựa vào bộ đệm của tệp hệ điều hành để lấy các chỉ mục và dữ liệu của nó vào bộ nhớ - không có khái niệm nào về 'bộ đệm chỉ mục / bộ đệm chỉ mục', vì vậy bạn sẽ thấy nó thử (hoặc thay vào đó, HĐH sẽ sử dụng) tất cả RAM có sẵn cho đến khi tất cả các tệp dữ liệu của bạn được lưu vào bộ đệm.

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.