MySQL và PostgreSQL dành cho ứng dụng web [đã đóng]


122

Tôi đang làm việc trên một ứng dụng web sử dụng Python (Django) và muốn biết liệu MySQL hay PostgreSQL sẽ phù hợp hơn khi triển khai cho sản xuất.

Trong một podcast, Joel nói rằng anh ấy gặp một số vấn đề với MySQL và dữ liệu không nhất quán.

Tôi muốn biết liệu ai đó có bất kỳ vấn đề như vậy không. Ngoài ra khi nói đến hiệu suất có thể dễ dàng điều chỉnh?

Câu trả lời:


127

Một lưu ý cho độc giả trong tương lai: Văn bản dưới đây được chỉnh sửa lần cuối vào tháng 8 năm 2008. Đó là gần 11 năm kể từ lần chỉnh sửa này. Phần mềm có thể thay đổi nhanh chóng giữa các phiên bản, vì vậy trước khi bạn chọn một DBMS dựa trên lời khuyên bên dưới, hãy thực hiện một số nghiên cứu để xem liệu nó có còn chính xác hay không. Kiểm tra các câu trả lời mới hơn bên dưới.


Tốt hơn?

MySQL thường được cung cấp bởi các máy chủ web.

PostgreSQL là một sản phẩm trưởng thành hơn nhiều.

cuộc thảo luận này giải quyết câu hỏi "tốt hơn" của bạn

Rõ ràng, theo trang web này , MySQL nhanh khi mức truy cập đồng thời thấp và khi có nhiều lượt đọc hơn là ghi. Mặt khác, nó cho thấy khả năng mở rộng thấp khi tải và tỷ lệ ghi / đọc ngày càng tăng. PostgreSQL tương đối chậm ở mức đồng thời thấp, nhưng cân bằng tốt với mức tải ngày càng tăng, đồng thời cung cấp đủ sự cách ly giữa các truy cập đồng thời để tránh bị chậm ở tỷ lệ ghi / đọc cao. Nó tiếp tục liên kết đến một số so sánh hiệu suất, bởi vì những thứ này rất ... nhạy cảm với các điều kiện.

Vì vậy, nếu yếu tố quyết định của bạn là, " cái nào nhanh hơn? " Thì câu trả lời là "nó phụ thuộc vào. Nếu nó thực sự quan trọng, hãy kiểm tra ứng dụng của bạn với cả hai. " Và nếu bạn thực sự, thực sự quan tâm, bạn sẽ nhận được hai DBA (một người chuyên trong mỗi cơ sở dữ liệu) và yêu cầu họ điều chỉnh các lỗi trong cơ sở dữ liệu, rồi chọn. Thật đáng ngạc nhiên khi các DBA tốt lại đắt như thế nào ; và chúng đáng giá từng xu .

Khi nó quan trọng.

Mà nó có thể không, vì vậy chỉ cần chọn bất kỳ cơ sở dữ liệu nào bạn thích và sử dụng nó; có thể mua được hiệu suất tốt hơn với nhiều RAM và CPU hơn, thiết kế cơ sở dữ liệu phù hợp hơn và các thủ thuật thủ tục được lưu trữ thông minh, v.v. và điều chỉnh chuyên biệt từ các DBA đắt tiền.


Joel cũng nói trong podcast đó rằng bình luận sẽ quay lại với anh ấy vì mọi người sẽ nói rằng MySQL là một thứ tào lao - Joel không thể lấy lại được một counthàng nào. Số nhiều của giai thoại không phải là dữ liệu. Anh ấy nói :

MySQL là cơ sở dữ liệu duy nhất mà tôi từng lập trình trong sự nghiệp của mình gặp vấn đề về tính toàn vẹn dữ liệu, nơi bạn thực hiện các truy vấn và bạn nhận được câu trả lời vô nghĩa, điều đó không chính xác.

và anh ấy cũng nói:

Đó chỉ là một giai thoại. Và đó thực sự là một trong những điều khiến tôi thất vọng về việc viết blog hay chỉ Internet nói chung. [...] Có một xu hướng kỳ lạ là biến những giai thoại thành sự thật và tôi thực sự là một blogger, tôi bắt đầu cảm thấy có chút tội lỗi về điều này


15
Và một điểm khác là, nếu bạn sử dụng một khuôn khổ, bạn có thể trừu tượng mã của mình khỏi cơ sở dữ liệu, vì vậy bạn có thể chuyển đổi dễ dàng.
Don Jones

"cái nào nhanh hơn?" . Phụ thuộc những gì bạn muốn, Nếu bạn muốn ACID Cơ sở dữ liệu phù hợp, sau đó đọc này: randombugs.com/linux/mysql-postgresql-benchmarks.html
Sacx

47
Cũng đáng lưu ý. MySQL thuộc sở hữu của Oracle. Do đó, nó sẽ không được phép cạnh tranh với các sản phẩm trả phí của họ.
unixman83

15

Chỉ cần làm lạnh trong nhiều tháng sau đó.

Khả năng địa lý của hai cơ sở dữ liệu rất rất khác nhau. PostgreSQL có phần mở rộng PostGIS đặc biệt. Chức năng địa lý của MySQL thực tế bằng không so với.

Nếu dịch vụ web của bạn có thành phần vị trí, hãy chọn PostgreSQL.


14

Tôi chưa sử dụng Django, nhưng tôi đã sử dụng cả MySQL và PostgreSQL. Nếu bạn chỉ sử dụng cơ sở dữ liệu của mình như một phần phụ trợ cho Django, thì điều đó không quan trọng lắm, vì nó sẽ loại bỏ hầu hết sự khác biệt. PostgreSQL có khả năng mở rộng hơn một chút vì nó không đạt được tốc độ nhanh như MySQL khi kích thước dữ liệu / số lượng khách hàng tăng lên.

Sự khác biệt thực sự đến nếu bạn đang làm một hệ thống mới. Sau đó, tôi khuyên bạn nên sử dụng PostgreSQL, bởi vì nó có nhiều tính năng hơn làm cho lớp DB của bạn có thể tùy chỉnh nhiều hơn, để bạn có thể tinh chỉnh nó theo bất kỳ yêu cầu nào bạn có thể có.


7

Mặc dù nó hơi lỗi thời, nhưng sẽ rất đáng để đọc trang MySQL Gotchas . Nhiều mục được liệt kê ở đó vẫn đúng, theo sự hiểu biết của tôi.

Tôi sử dụng PostgreSQL.


6

Tôi sử dụng rộng rãi cả hai. Lựa chọn của tôi cho một dự án cụ thể bao gồm:

  • Cấp phép - Bạn sẽ phân phối ứng dụng của mình (IANAL)
  • Cơ sở hạ tầng và cơ sở tri thức hiện có
  • Bất kỳ loại nước sốt đặc biệt nào bạn cũng phải có.

Bởi nước sốt đặc biệt, tôi muốn nói những thứ như:

  • Nhân rộng dễ dàng / rẻ = MySQL
  • Các vấn đề về tập dữ liệu lớn với kết quả nhỏ = PostgreSQL. Sử dụng các tiện ích mở rộng ngôn ngữ và có các hoạt động dữ liệu rất hiệu quả. (PL / Python, PL / TCL, PL / Perl, v.v.)
  • Giao diện với Thư viện thống kê R = PostgreSQL PL / R có sẵn trong debian / ubuntu

3
Postgres cũng có khả năng sao chép dễ dàng / rẻ tiền. Nó chỉ là không được tích hợp sẵn , bởi vì có nửa tá để lựa chọn, mỗi cái đều có những phần tốt và xấu riêng. Vì vậy, bạn có thể chọn một bản sao tầm thường cho MySQL hoặc một trong nhiều bản sao cho PostgreSQL. Lựa chọn của bạn.
Randal Schwartz

6
PostgreSQL 9.0+ tích hợp sẵn bản sao WAL nhị phân rất dễ cài đặt.
Sean

1

Chà, tôi không nghĩ bạn nên sử dụng một thương hiệu cơ sở dữ liệu khác trong bất kỳ quá trình phát triển nào trước đây (xây dựng, dàn dựng, sản phẩm) vì điều đó sẽ quay lại với bạn.

Theo cách tôi hiểu thì PostgreSQL là một triển khai cơ sở dữ liệu 'đúng' hơn trong khi mySQl ít đúng hơn (ít tuân thủ hơn) nhưng nhanh hơn.

Vì vậy, nếu bạn đang viết khá nhiều một ứng dụng CRUD thì mySQL là cách để đi. Nếu bạn yêu cầu một số tính năng nhất định trong cơ sở dữ liệu của mình (nếu bạn không chắc chắn thì không) thì bạn có thể muốn xem xét postgreSQL.


1

Nếu bạn đang viết một ứng dụng có thể được phân phối khá nhiều trên các máy chủ khác nhau, MySQL có trọng lượng lớn hơn PostgreSQL vì tính di động. Rất khó tìm thấy PostgreSQL trên các máy chủ web kém chất lượng, mặc dù có một số ít. Về mặt hầu hết, PostgreSQL chậm hơn MySQL, đặc biệt là khi nói đến việc tinh chỉnh cuối cùng. Nói chung, tôi muốn nói rằng hãy thử PostgreSQL trong một khoảng thời gian ngắn, theo cách đó bạn không hoàn toàn tránh nó, và sau đó đưa ra phán xét.


1
Tôi đồng ý với bạn rằng các máy chủ web chất lượng thấp hơn sẽ đưa ra lựa chọn thay vì ném MySQL vào mặt chúng ta. Tuy nhiên, khi sử dụng dịch vụ lưu trữ chia sẻ, bạn vẫn có lợi cho chúng. Vì vậy, lựa chọn DBM không quan trọng bằng.
unixman83

0

Cảm ơn bạn. Tôi đã sử dụng Django với MySQL và nó ổn. Chọn cơ sở dữ liệu của bạn về các tính năng bạn cần. Khó so sánh MySQL và Postgres. Tốt hơn để so sánh Postgress với SQl Server.


0

@WolfmanDragon

PostgreSQL có hỗ trợ (nhỏ) cho các đối tượng, nhưng về bản chất, nó là một cơ sở dữ liệu quan hệ. Từ trang giới thiệu của nó :

PostgreSQL là một mạnh mẽ, mã nguồn mở quan hệ hệ thống cơ sở dữ liệu .


2
Hệ thống quản lý cơ sở dữ liệu quan hệ đối tượng Hệ thống quản lý cơ sở dữ liệu quan hệ ISA. Nếu bạn đọc kỹ hơn về tài liệu PostgSQL, bạn sẽ thấy rằng PostgSql là một ORDBMS. Có lẽ bạn đang nhầm lẫn giữa ORDBMS với ODBMS chẳng hạn như tính khách quan / DB.
WolfmanDragon 13/10/08

-1

MySQL là một hệ quản trị cơ sở dữ liệu quan hệ trong khi PostgreSQL là một đối tượng -relational hệ thống quản lý cơ sở dữ liệu . PostgreSQL rất phù hợp với các nhà phát triển C ++ hoặc Java, vì nó cho phép chúng ta kiểm soát nhiều hơn cách các truy vấn được viết. ORDBMS cũng cung cấp cho chúng ta các Đối tượng và Loại do Người dùng Xác định. Bản thân các truy vấn SQL gần với tiêu chuẩn ISO hơn MySQL.
Bạn có cần ORDBMS hay RDBMS không? Điều đó sẽ trả lời câu hỏi của bạn tốt hơn.


Đó là một sự đơn giản hóa quá mức; chỉ vì bạn không cần ORDBMS không nhất thiết có nghĩa là bạn phải sử dụng MySQL. Có những khác biệt đáng kể hơn, không?
Don Jones

1
Bạn nói đúng. Tôi đang cố gắng không giống như một người thúc đẩy PostgreSQL. Tôi không thấy lý do thực sự nào để sử dụng bất kỳ thứ gì khác ngoài PostgreSQL trừ khi thiết kế yêu cầu cơ sở dữ liệu đối tượng thực sự. Tôi thấy không có điểm nào trong MySQL ngoài việc nhiều người đã quen thuộc với nó.
WolfmanDragon
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.