2010-12-13 33 views
24

Tôi đã có một ứng dụng hoàn toàn làm việc với PostgreSql. Sau khi đọc về Mongodb, tôi đã quan tâm để xem cách ứng dụng sẽ làm việc với nó. Sau một vài tuần, tôi di chuyển toàn bộ hệ thống sang Mongodb.Mongodb và PostgreSql suy nghĩ

Tôi thích một vài thứ với Mongodb. Tuy nhiên, tôi tìm thấy một số truy vấn tôi đã làm trong PostgreSql, tôi không thể làm hiệu quả trong Mongodb. Đặc biệt, khi tôi phải tham gia một vài bảng để tính toán một số logic. Ví dụ: this.

Hơn nữa, tôi đang sử dụng Ruby on Rails 3 và ODM được gọi là Mongoid. Mongoid vẫn đang trong phiên bản beta. Tài liệu là tốt, nhưng một lần nữa, đôi khi tôi thấy ODM rất hạn chế so với những gì Active Record được cung cấp với các hệ thống cơ sở dữ liệu truyền thống (SQL).

Thậm chí cho đến ngày này, tôi cảm thấy thoải mái khi làm việc với PostgreSql hơn Mongodb. Chỉ vì tôi có thể tham gia các bảng và làm bất cứ điều gì với dữ liệu.

Tôi đã tạo hai loại bản sao lưu. Một với PostgreSql và cái kia với Mongodb. Một số người nói rằng, một số ứng dụng phù hợp hơn với một hoặc một loại db khác. Tôi có nên tiếp tục với Mongodb và cuối cùng hy vọng cho RoR ODM (Mongoid) của nó hoàn toàn trưởng thành, hay tôi nên xem xét sử dụng PostgreSql?

Một vài câu hỏi khác: 1) Cái nào phù hợp hơn để phát triển trang web mạng xã hội tương tự như Facebook. 2) Loại nào phù hợp hơn với loại trang web chuẩn 4 trang (Trang chủ, Sản phẩm, Giới thiệu, Liên hệ)

+0

Hôm nay, năm 2015, với [PostgreSQL 9.4 phiên bản ổn định với hỗ trợ JSON] (http://www.postgresql.org/docs/9.4/static/datatype-json.html), ** MongDB không hấp dẫn **: xem [điểm chuẩn] (https://github.com/EnterpriseDB/pg_nosql_benchmark) và [** xác nhận **] (http://developer.olery.com/blog/goodbye-mongodb-hello-postgresql/) . Xem thêm thông tin tại [@Jameel Grand answer] (http://stackoverflow.com/a/28756884/287948) –

Trả lời

49

Bạn đã đổ một RDBMS đầy đủ tính năng, được thử nghiệm nhiều thập kỷ cho một tính năng trẻ, chất lượng beta -trong cửa hàng tài liệu với sự hỗ trợ của cộng đồng ít. Trừ khi bạn đã chạy hàng chục ngàn đô la một tháng trong các máy chủ và nghĩ MongoDB phù hợp hơn với bản chất dữ liệu của bạn, bạn có thể lãng phí rất nhiều thời gian cho lợi ích tiêu cực. MongoDB rất thú vị với đồ chơi, và tôi đã xây dựng một vài ứng dụng sử dụng nó vì lý do đó, nhưng nó gần như không bao giờ là một lựa chọn tốt hơn so với Postgres/MySQL/SQL Server/etc. cho các ứng dụng sản xuất.

+0

Tôi đồng ý với quan điểm của bạn rằng RDBMS đã tồn tại trong nhiều thập kỷ và tất cả những lợi ích có thể xảy ra. Một điều khiến tôi nghĩ là vậy. Nếu RDBMS là tốt như nó được, tại sao nó có vẻ như một số ít các trang web phổ biến trực tuyến sử dụng nó (http://www.mongodb.org/display/DOCS/Production+Deployments), khi họ có thể được gắn bó với họ ban đầu sql db thực hiện? Tôi không nghĩ MongoDb là 'chất lượng beta' từ nơi nó đứng. Nếu không, tại sao danh sách dài các triển khai sản xuất? –

+10

Đó là chất lượng beta và danh sách các triển khai là gây hiểu nhầm. Hầu hết các công ty được liệt kê đã sử dụng MongoDB cho một dự án phụ, họ không chạy các dịch vụ chính của họ trên đó. Đọc các ý kiến ​​bên cạnh mỗi tên công ty - một người sử dụng nó để theo dõi một biểu mẫu web, một người khác sử dụng nó cho một ứng dụng báo cáo nội bộ, v.v. Một trong số ít thực sự sử dụng MongoDB cho dịch vụ chính của họ là Foursquare và quay lại để cắn chúng với những ngày thời gian chết mà sẽ không xảy ra nếu họ đang sử dụng một RDBMS. –

+1

Cảm ơn bạn đã quay lại Dan. Đọc thêm vào danh sách triển khai. Nó thực sự, gây hiểu lầm. Hầu hết trong số họ tích hợp MongoDB một phần và không hoàn toàn .. Vì lý do gì? Có hai loại DB, điều đó không chỉ tạo ra nhiều nỗ lực hơn cho công việc? Thứ hai, ứng dụng của tôi dường như đang hoạt động mà không có bất kỳ vấn đề lớn nào chạy trên MongoDB. Vẫn còn trên sân khấu phát triển mặc dù. Chưa chạy thử nghiệm nào trong sản xuất. Tôi có nên suy nghĩ về việc chuyển đổi trở lại RDBMS trước khi tôi gặp phải những vấn đề lớn hơn trong tương lai với MongoDB, vì điều đó vẫn còn mới và tất cả? –

13

Hãy quote những gì bạn đã viết và xem những gì nó cho chúng ta biết:

"I like a few things with Mongodb. However, I found certain queries I was 
doing in PostgreSql, I couldn't do efficiently in Mongodb. Especially, 
when I had to join several tables to calculate some logic." 

"I found the ODM to be very limiting compared to what Active Record offered 
with traditional (SQL) database systems." 

"I feel more comfortable working with PostgreSql than Mongodb. Only because 
I can join tables and do anything with the data." 

Dựa trên những gì bạn đã nói có vẻ với tôi như bạn nên gắn bó với PostgreSQL. Giữ một mắt trên MongoDB và sử dụng nó nếu và khi nó là thích hợp. Nhưng với những gì bạn đã nói, có vẻ như PG là phù hợp hơn với bạn hiện tại.

Chia sẻ và thưởng thức.

2

tôi đã không sử dụng MongoDB nêu ra, và có thể không bao giờ nhận được vòng để nó như tôi đã không tìm thấy bất cứ điều gì tôi không thể làm với Postgres, nhưng chỉ để trích dẫn PostgreSQL 9.2 release notes:

Với PostgreSQL 9.2, các kết quả truy vấn có thể được trả về dưới dạng các kiểu dữ liệu JSON. Kết hợp với Javascript PL/V8 mới và cơ sở dữ liệu PL/V8 tiện ích mở rộng lập trình và cửa hàng khóa-giá trị tùy chọn HStore, người dùng giờ đây có thể sử dụng PostgreSQL như cơ sở dữ liệu tài liệu "NoSQL", trong khi giữ lại độ tin cậy, tính linh hoạt và hiệu suất của PostgreSQL .

Vì vậy, có vẻ như trong các phiên bản Postgres mới, bạn có thể tận dụng tối đa cả hai thế giới. Tôi đã không sử dụng này được nêu ra, hoặc là một chút của một fan hâm mộ của PostgreSQL (danh sách tài liệu/gửi thư tuyệt vời) Tôi sẽ không ngần ngại sử dụng nó cho hầu hết mọi thứ liên quan đến RDBMS.

1

Chúng tôi cũng có nghiên cứu về điều tương tự tốt hơn. PostGres hoặc MongoDb. nhưng với tất cả các sự kiện và số liệu trong tay, chúng tôi thấy rằng PostGres là tốt hơn để sử dụng hơn MongoDb. trong MongoDb, bên cạnh ăn bộ nhớ và CPU, nó cũng chiếm một lượng lớn không gian đĩa. Nó tăng 2x kích thước đĩa trên một khoảng thời gian nhất định.

2

Trước hết postgres là RDBMS và MongoDB là NoSQL.
nhưng công nghệ NoSQL độc lập không đáp ứng các tiêu chuẩn ACID vì chúng hy sinh các bảo vệ dữ liệu quan trọng có lợi cho hiệu suất thông lượng cao cho các ứng dụng không có cấu trúc.

Postgres 9.4 cung cấp khả năng NoSQL cùng với hỗ trợ giao dịch đầy đủ, lưu trữ tài liệu JSON với các ràng buộc trên dữ liệu trường.

do đó bạn sẽ nhận được tất cả ưu điểm của cả hai RDBMS và NoSQL

check it out cho bài viết chi tiết http://www.aptuz.com/blog/is-postgres-nosql-database-better-than-mongodb/

Để trải nghiệm hiệu suất NoSQL Postgres' cho chính mình. Tải xuống pg_nosql_benchmark tại GitHub. đây là liên kết https://github.com/EnterpriseDB/pg_nosql_benchmark

0

Trải nghiệm của tôi với Postgres và Mongo sau khi làm việc với cả cơ sở dữ liệu trong các dự án của tôi.

Postgres (RDBMS)

Postgres được khuyến khích nếu các ứng dụng tương lai của bạn có một giản đồ phức tạp mà cần rất nhiều tham gia hoặc tất cả các dữ liệu có quan hệ hoặc nếu chúng tôi có viết nặng. Postgres là mã nguồn mở, nhanh hơn, phù hợp với ACID và sử dụng ít bộ nhớ hơn trên đĩa, và tất cả đều có hiệu suất tốt cho việc lưu trữ JSON và bao gồm khả năng tuần tự hóa đầy đủ các giao dịch với 3 mức cô lập giao dịch.

Lợi thế lớn nhất khi ở lại với Postgres là chúng tôi có cả hai thế giới tốt nhất. Chúng ta có thể lưu trữ dữ liệu vào JSONB với các ràng buộc, nhất quán và tốc độ. Mặt khác, chúng ta có thể sử dụng tất cả các tính năng SQL cho các loại dữ liệu khác. Động cơ cơ bản là rất ổn định và đối phó tốt với một phạm vi tốt của khối lượng dữ liệu. Nó cũng chạy trên sự lựa chọn của bạn về phần cứng và hệ điều hành. Postgres cung cấp khả năng NoSQL cùng với hỗ trợ giao dịch đầy đủ, lưu trữ các tài liệu JSON với các ràng buộc trên dữ liệu trường.

ràng buộc chung đối với Postgres

Scaling Postgres ngang là khó khăn hơn đáng kể, nhưng doable.

Hoạt động đọc nhanh không thể hoàn toàn đạt được với Postgres.

NO dữ liệu SQL Căn cứ

Mongo DB (Wired Tiger)

MongoDB có thể đánh bại Postgres trong kích thước của “quy mô ngang”. Lưu trữ JSON là những gì Mongo được tối ưu hóa để làm. Mongo lưu trữ dữ liệu của nó trong một định dạng nhị phân gọi là BSONb, chỉ là một biểu diễn nhị phân của một siêu của JSON. MongoDB lưu trữ các đối tượng chính xác như chúng được thiết kế.Theo MongoDB, đối với các ứng dụng viết chuyên sâu, Mongo cho biết công cụ mới (Wired Tiger) mang đến cho người dùng khả năng ghi lên tới 10 lần (tôi nên thử), với việc giảm 80% dung lượng lưu trữ, giúp giảm chi phí lưu trữ , sử dụng phần cứng tốt hơn.

hạn chế chung của MongoDB

Việc sử dụng một sơ đồ công cụ lưu trữ ít dẫn đến các vấn đề của schemas ngầm. Các lược đồ này không được xác định bởi công cụ lưu trữ của chúng tôi mà thay vào đó được xác định dựa trên hành vi và kỳ vọng của ứng dụng.

Các công nghệ NoSQL độc lập không đáp ứng các tiêu chuẩn ACID vì chúng hy sinh các bảo vệ dữ liệu quan trọng có lợi cho hiệu suất thông lượng cao cho các ứng dụng không có cấu trúc. Không khó áp dụng ACID trên cơ sở dữ liệu NoSQL nhưng nó sẽ làm cho cơ sở dữ liệu chậm và không linh hoạt ở một mức độ nào đó. “Hầu hết các hạn chế NoSQL được tối ưu hóa trong các phiên bản và bản phát hành mới hơn đã vượt qua các hạn chế trước đó của nó đến một mức độ lớn”.

  1. Điều gì sẽ phù hợp hơn để phát triển một trang web mạng xã hội tương tự như Facebook? Facebook hiện đang sử dụng kết hợp các cơ sở dữ liệu như Hive và Cassandra.
  2. Điều nào phù hợp hơn với loại trang web chuẩn 4 trang (Trang chủ, Sản phẩm, Giới thiệu, Liên hệ) Một lần nữa nó phụ thuộc vào cách bạn muốn lưu trữ và xử lý dữ liệu của mình. nhưng bất kỳ cơ sở dữ liệu SQL hoặc NOSQL nào sẽ thực hiện công việc.
Các vấn đề liên quan