2010-09-18 74 views
59

EDIT: Tôi đã sử dụng Postgres với PostGIS trong một vài tháng và tôi hài lòng.GIS: PostGIS/PostgreSQL so với MySql so với SQL Server?

Tôi cần phân tích một vài triệu bản ghi mã hóa địa lý, mỗi bản ghi sẽ có vĩ độ và kinh độ. Những bản ghi này bao gồm dữ liệu của ít nhất ba loại khác nhau và tôi sẽ cố gắng xem liệu mỗi bộ ảnh hưởng đến bộ kia hay không.

Cơ sở dữ liệu nào là tốt nhất cho kho dữ liệu cơ bản cho tất cả dữ liệu này? Đây là mong muốn của tôi:

  • Tôi quen thuộc với DBMS. Tôi yếu nhất với PostgreSQL, nhưng tôi sẵn sàng tìm hiểu xem mọi thứ khác có kiểm tra hay không.
  • Nó hoạt động tốt với các truy vấn GIS. Tìm kiếm của Google cho thấy PostgreSQL + PostGIS có thể là mạnh nhất? Ít nhất có rất nhiều sản phẩm dường như sử dụng nó. MySql's Spatial Extensions có vẻ tương đối tối thiểu?
  • Chi phí thấp. Mặc dù giới hạn 10 GB DB trong SQL Server Express 2008 R2, tôi không chắc chắn tôi muốn sống với điều này và các hạn chế khác của phiên bản miễn phí.
  • Không đối kháng với Microsoft .NET Framework. Nhờ Connector/Net 6.3.4, MySql hoạt động tốt các chương trình C# và .NET Framework 4. Nó hỗ trợ đầy đủ Khuôn khổ Entity của .NET 4. Tôi không thể tìm thấy bất kỳ tương đương PostgreSQL phi thương mại nào, mặc dù tôi không phản đối việc trả $ 180 cho dấu chấm chấm của Devart cho PostgreSQL Professional Edition.
  • Tương thích với R. Có vẻ như tất cả 3 trong số này có thể nói chuyện với R bằng ODBC, vì vậy có thể không có vấn đề gì.

Tôi đã thực hiện một số phát triển bằng MySql, nhưng tôi có thể thay đổi nếu cần.

+1

PostGIS sẽ là người trưởng thành nhất trong số các tùy chọn. –

+2

PostGIS là giải pháp GIS trưởng thành nhất. Và nếu bạn đang sử dụng R, bạn thậm chí có thể sử dụng PL/R để viết các thủ tục lưu sẵn trong R. Các phần mở rộng không gian của MySQL khá mỏng và không đáng thử, khả năng của SQL Server GIS khá mới và có vẻ hơi hạn chế nhưng tôi có chưa có kinh nghiệm với nó. – Wolph

+7

Câu hỏi tuyệt vời và quan trọng. Ý kiến ​​dựa trên các sự kiện có giá trị. Không nên đóng cửa. – ErichBSchulz

Trả lời

47

Nếu bạn quan tâm so sánh kỹ lưỡng, tôi khuyên bạn nên "Cross Compare SQL Server 2008 Spatial, PostgreSQL/PostGIS 1.3-1.4, MySQL 5-6" và/hoặc "Compare SQL Server 2008 R2, Oracle 11G R2, PostgreSQL/PostGIS 1.5 Spatial Features" bởi Boston GIS.

Xét điểm của bạn:

  • Tôi quen thuộc với các DBMS: thiết lập một cơ sở dữ liệu PostGIS trên Windows được dễ dàng, sử dụng quản lý PgAdmin3 là thẳng về phía trước quá
  • Nó tốt với Truy vấn GIS: PostGIS chắc chắn là mạnh nhất trong ba, chỉ Oracle Spatial sẽ có thể so sánh nhưng bị loại nếu bạn xem xét chi phí là
  • Chi phí thấp: +1 cho PostGIS f hoặc chắc chắn
  • Không đối kháng với Microsoft.NET Framework: Bạn nên ít nhất có thể kết nối thông qua ODBC (see Postgres wiki)
  • Tương thích với R: không phải là một vấn đề với một trong ba
+2

Heh - Oracle Spatial là một giấy phép trị giá 1 triệu đô la, cuối cùng tôi nghe thấy –

+0

Cảm ơn bạn. Các liên kết comparo thứ 2 là hữu ích. Tôi chỉ tìm thấy đầu tiên trước đó bởi vì tôi đã có MySql trong thuật ngữ tìm kiếm của mình. Vì vậy, có vẻ như đó là PostgreSQL cho tôi! –

+30

Chỉ muốn nói, gần 1,5 năm sau, Postgres + PostGIS hoàn toàn là câu trả lời đúng. –

16

Chắc chắn là PostGis. Đây là lý do tại sao.

  1. Postgres vượt trội so với MySQL về hiệu suất. Server có nhiều khả năng chịu lỗi hơn, đã vượt ra khỏi các công cụ hộp để cân bằng tải, lưu trữ và tối ưu hóa.
  2. PostGIS đang trở thành một tiêu chuẩn trong các ứng dụng GIS.
  3. Hoàn toàn miễn phí.
+0

# 2 chắc chắn là đúng cho phần mềm GIS nguồn mở và ngăn xếp nguồn mở, nhưng tôi không chắc chắn nếu nó là đúng cho các ứng dụng GIS thương mại mặc dù. – winwaed

0

Chỉ cần một lưu ý rằng MySQL có cuối cùng được thêm vào trong logic GIS thích hợp.

http://dev.mysql.com/doc/refman/5.6/en/functions-for-testing-spatial-relations-between-geometric-objects.html

Nhưng tôi không thể bình luận về chi phí hoặc thực hiện ở giai đoạn này

+0

có vẻ như thay vì sử dụng một thư viện không gian, chẳng hạn như GEOS, tất cả logic không gian nằm trong 'sql/item_geofunc.cc' –

+0

@MikeT. Đúng vậy, tôi biết, bởi vì tôi là một trong những người thử nghiệm beta. Chức năng không gian của MySQL là một cách rất dài từ Posgis và đã không thực sự tiến triển kể từ khi Oracle tiếp quản. Kẻ giết người thực sự đối với tôi là không có nhóm ST_Union (geom) .... bởi một số chức năng kiểu thuộc tính. Chỉ có ST_Union (geom1, geom2). Không hỗ trợ chuyển đổi từ SRID này sang SRID khác. Và danh sách được tiếp tục. –

0

PostGIS là tốt nhất bởi vì nó đang trở thành một tiêu chuẩn trong các ứng dụng GIS trong những ngày và PostGIS là miễn phí. Nó vượt trội so với MySQL trong hiệu suất

+0

Bất kỳ điểm chuẩn nào ở đâu đó? – j0k

53

Tôi đã làm việc với cả ba cơ sở dữ liệu và thực hiện di chuyển giữa chúng, vì vậy hy vọng tôi vẫn có thể thêm thứ gì đó vào bài đăng cũ. Mười năm trước, tôi đã được giao nhiệm vụ đặt một đối tượng không gian lớn - 450 triệu không gian - tập dữ liệu từ GML vào cơ sở dữ liệu không gian. Tôi quyết định thử MySQL và Postgis, vào thời điểm đó không có không gian trong SQL Server và chúng tôi đã có một môi trường khởi động nhỏ, vì vậy MySQL có vẻ phù hợp. Sau đó tôi đã tham gia vào MySQL, tôi đã tham dự/nói chuyện tại một vài hội nghị và tham gia rất nhiều vào thử nghiệm beta về các chức năng tương thích với GIS trong MySQL mà cuối cùng đã được phát hành với phiên bản 5.5. Tôi sau đó đã được tham gia với việc di chuyển dữ liệu không gian của chúng tôi để Postgis và dữ liệu công ty của chúng tôi (với các yếu tố không gian) cho SQL Server. Đây là những phát hiện của tôi.

MySQL

1). Sự cố ổn định. Trong quá trình 5 năm, chúng tôi đã có một số vấn đề về cơ sở dữ liệu bị hỏng, chỉ có thể được khắc phục bằng cách chạy myismachk trên tệp chỉ mục, quá trình này có thể mất hơn 24 giờ trên bảng hàng 450 triệu.

2). Cho đến gần đây chỉ có các bảng MyISAM hỗ trợ kiểu dữ liệu không gian. Điều này có nghĩa là nếu bạn muốn hỗ trợ giao dịch, bạn đã hết may mắn. Loại bảng InnoDB hiện hỗ trợ các loại không gian, nhưng không hỗ trợ các chỉ mục trên chúng, với các kích thước điển hình của các tập dữ liệu không gian, không hữu ích lắm. Xem http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html Kinh nghiệm của tôi từ việc đi đến hội nghị là không gian đã được rất nhiều suy nghĩ - chúng tôi đã thực hiện sao chép, phân vùng, vv, nhưng nó không hoạt động với không gian. EDIT: Trong upcoming 5.7.5 release InnoDB cuối cùng sẽ hỗ trợ các chỉ mục trên cột không gian, có nghĩa là ACID, khóa ngoài và chỉ mục không gian cuối cùng sẽ có sẵn trong cùng một công cụ.

3). Các chức năng không gian là vô cùng hạn chế so với cả Postgis và SQL Server không gian. Hiện vẫn còn không có chức năng ST_Union sẽ tác động đến toàn bộ một lĩnh vực hình học, một trong những thắc mắc tôi chạy thường xuyên nhất, ví dụ, bạn không thể viết:

select attribute, ST_Union(geom) from some_table group by some_attribute 

mà là rất hữu ích trong một bối cảnh GIS. Select ST_Union(geom1, const_geom) from some_table, tức là, một trong những hình học là một hình học liên tục mã hóa cứng là một chút hạn chế trong so sánh.

4). Không hỗ trợ cho rasters. Việc có thể thực hiện phân tích kết hợp vectơ kết hợp trong một db là chức năng GIS rất hữu ích.

5). Không hỗ trợ chuyển đổi từ hệ thống tham chiếu không gian này sang hệ thống tham chiếu không gian khác.

6). Kể từ khi mua lại bởi Oracle, không gian đã thực sự được đưa vào giữ.

Nói chung, công bằng với MySQL, nó hỗ trợ trang web của chúng tôi, WMS và xử lý không gian chung trong nhiều năm và dễ thiết lập. Nhược điểm, dữ liệu tham nhũng là một vấn đề, và bằng cách buộc phải sử dụng các bảng MyISAM bạn đang từ bỏ rất nhiều lợi ích của một RDBMS.

PostGIS

Với những vấn đề chúng tôi đã có với MySQL, chúng tôi cuối cùng chuyển đổi sang PostGIS. Các điểm chính của trải nghiệm này đã được.

1). Cực kỳ ổn định. Không có dữ liệu tham nhũng trong 5 năm và bây giờ chúng tôi có khoảng 25 hộp Postgres/GIS trên centos máy ảo, theo mức độ tải khác nhau.

2). Tốc độ phát triển nhanh - raster, tô pô, hỗ trợ 3D là những ví dụ gần đây về điều này.

3). Cộng đồng rất tích cực. Kênh irc và danh sách gửi thư của Postgis là những tài nguyên tuyệt vời. Hướng dẫn tham khảo Postgis cũng rất tuyệt vời. http://postgis.net/docs/manual-2.0/

4). Chơi rất tốt với các ứng dụng khác, dưới ô OSGeo, chẳng hạn như GeoServer và GDAL.

5). Thủ tục được lưu trữ có thể được viết bằng nhiều ngôn ngữ, ngoài plpgsql mặc định, chẳng hạn như Python hoặc R.

5). Postgres là một RDBMS tuân thủ rất chuẩn, đầy đủ tính năng, nhằm duy trì các tiêu chuẩn ANSI.

6). Hỗ trợ các chức năng cửa sổ và truy vấn đệ quy - không phải trong MySQL, nhưng trong SQL Server. Điều này đã làm cho việc viết các truy vấn không gian phức tạp hơn rõ ràng hơn.

Máy chủ SQL.

Tôi chỉ sử dụng chức năng không gian SQL Server 2008 và nhiều phiền toái trong bản phát hành đó - thiếu hỗ trợ chuyển đổi từ CRS này sang CRS khác, cần thêm tham số của riêng bạn vào chỉ mục không gian - hiện có đã được giải quyết.

1). Vì các đối tượng không gian trong SQL Server về cơ bản là các đối tượng CLR, cú pháp cảm thấy ngược lại. Thay vì ST_Area (geom) bạn viết geom.STArea() và điều này trở nên rõ ràng hơn khi bạn kết nối các hàm với nhau. Việc giảm dấu gạch dưới trong các tên hàm chỉ đơn thuần là một sự khó chịu nhỏ.

2). Tôi đã có một số đa giác không hợp lệ đã được chấp nhận bởi SQL Server, và thiếu một chức năng ST_MakeValid có thể làm cho một chút đau đớn.

3). Chỉ dành cho Windows. Nói chung, các sản phẩm của Microsoft (như các sản phẩm ESRI) được thiết kế để hoạt động rất tốt với nhau, nhưng không phải lúc nào cũng có sự tuân thủ và tương thích của tiêu chuẩn như các mục tiêu chính. Nếu bạn đang chạy một cửa sổ chỉ có cửa hàng, đây không phải là một vấn đề.

CẬP NHẬT: đã phát một chút với SQL Server 2012, tôi có thể nói rằng nó đã được cải thiện đáng kể. Bây giờ có một hàm xác nhận hình học tốt, có hỗ trợ tốt cho kiểu dữ liệu Địa lý, bao gồm đối tượng GLOBE FULL, cho phép biểu diễn các đối tượng chiếm nhiều hơn một bán cầu và hỗ trợ cho Compound Curves and Circular Strings. và vòng kết nối) trong số những thứ khác. Việc chuyển đổi các tọa độ từ một CRS này sang một CRS khác vẫn cần được thực hiện trong các thư viện của bên thứ 3, mặc dù đây không phải là một nút hiển thị trong hầu hết các ứng dụng.Tôi đã không sử dụng SQL Server với bộ dữ liệu đủ lớn để so sánh một trên một với Postgis/MySQL, nhưng từ những gì tôi đã thấy các chức năng hoạt động chính xác, và trong khi không khá đầy đủ tính năng như Postgis, nó là một cải thiện các dịch vụ của MySQL.

Xin lỗi vì câu trả lời dài như vậy, tôi hy vọng một số nỗi đau và niềm vui mà tôi đã trải qua trong nhiều năm có thể giúp ích cho ai đó.

+0

Tôi có một bảng có chứa vĩ độ và kinh độ trong kiểu dữ liệu địa lý và một cột chứa datetime của điểm.Chúng tôi muốn tìm các bản ghi với một phạm vi ngày và nhỏ hơn 1000m hoặc cắt bất kỳ điểm nào hay không? Hiệu suất nào tốt hơn nếu chúng ta có 99 triệu bản ghi trong bảng? Xin đề nghị tôi .. Tôi đang tìm kiếm điều này từ 7 ngày qua và đã thử nghiệm trên PostGIS và SQL Server và tôi đã tạo ra một chỉ mục không gian. Nhìn của nó giống như máy chủ SQL là tốt hơn so với PostGIS nhưng tôi không bao giờ có từ trên MYSQL vì vậy không biết làm thế nào để so sánh với MYSQL.Please cho tôi biết đó là tốt hơn? –

+0

@SandeepKumar. Nó có lẽ là tốt hơn nếu bạn hỏi một câu hỏi mới phác thảo những gì bạn đã thử cho đến nay, làm thế nào là hiệu suất, những chỉ số bạn có, vv Có quá nhiều ẩn số để đưa ra một câu trả lời tốt. Postgres có hỗ trợ tốt cho các truy vấn phạm vi ngày. MySQL, nói chung, không phải là tuyệt vời cho không gian, nhưng có thể là ok cho các truy vấn như trên. –

Các vấn đề liên quan