2012-06-20 25 views
7

Tôi có thể sử dụng MongoDB và PostgreSQL trong một ứng dụng đường ray không? Cụ thể là cuối cùng tôi sẽ muốn sử dụng cái gì đó như MongoHQ. Cho đến nay tôi đã thất bại trong việc làm việc này trong thử nghiệm. Và nó liên quan đến tôi rằng tài liệu MongoDB cụ thể nói rằng tôi phải vô hiệu hóa ActiveRecord. Lời khuyên nào sẽ được đánh giá cao.MongoDB với PostgreSQL trong một ứng dụng Rails

Trả lời

10

Bạn không cần phải tắt ActiveRecord để sử dụng MongoDB. Kiểm tra Mongoid và chỉ cần thêm đá quý cộng với bất kỳ mô hình nào bên cạnh bất kỳ mô hình ActiveRecord hiện tại nào của bạn. Bạn nên lưu ý rằng MongoHQ chỉ là một dịch vụ lưu trữ cho MongoDB và có thể được sử dụng cùng với bất kỳ Mapper tài liệu đối tượng (ODM).

Để biết thêm chi tiết, hãy kiểm tra http://mongoid.org/en/mongoid/docs/installation.html. Chỉ cần bỏ qua bước 'Thoát khỏi Ghi Hoạt động' tùy chọn.

+1

Nếu bạn đọc tài liệu Mongoid nơi nó đề cập đến việc loại bỏ ActiveRecord, báo trước cụ thể là 'Bạn không cần ActiveRecord trừ khi bạn đang cố gắng sử dụng Mongo hòa hợp với cơ sở dữ liệu SQL.' – Stennie

+0

@Stennie Chính xác. Vì vậy, nếu bạn muốn sử dụng chúng song song chỉ cần không 'ActiveRecord'. –

+0

Tôi đã thực sự bị mắc kẹt trên MongoMapper và không có nhiều thành công. Và nó nằm trong tài liệu MongoDb, nơi họ hướng dẫn bạn loại bỏ ActiveRecord [http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started] Tôi sẽ chơi với mongoid và xem liệu tôi có có may mắn hơn. Tôi không hiểu nhận xét cuối cùng này về "chỉ không ActiveRecord" ... –

0

Trên một trang web khách hàng gần đây, tôi đã làm việc với một hệ thống sản xuất hợp nhất dữ liệu MySQL và MongoDB với một ứng dụng Java đơn lẻ. Thành thật mà nói, đó là một cơn ác mộng. Để kết nối dữ liệu giữa hai cơ sở dữ liệu yêu cầu cấu trúc dữ liệu Java phức tạp và nhiều mã, đó thực sự là cơ sở dữ liệu làm tốt nhất.

Một trường hợp sử dụng cho hai hệ thống cơ sở dữ liệu là có dữ liệu giao dịch thuần túy trong cơ sở dữ liệu SQL và tổng hợp dữ liệu vào MongoDB để báo cáo v.v ... Thực tế đây là kế hoạch ban đầu của khách hàng, nhưng cách cơ sở dữ liệu trở nên liên quan đến dữ liệu giao dịch.

Hệ thống đã trở nên khó khăn để duy trì kế hoạch được loại bỏ và được thay thế bằng giải pháp chỉ MongoDB (sử dụng Meteor.js).

Postgres có hỗ trợ tuyệt vời cho tài liệu JSON thông qua kiểu dữ liệu jsonb của nó và được hỗ trợ đầy đủ trong Rails 4.2, ngoài hộp. Tôi cũng đã làm việc với điều này và tôi thấy nó dễ dàng, và tôi muốn giới thiệu phương pháp này.

Điều này cho phép một sự pha trộn dễ dàng của SQL và các giao dịch NoSQL, ví dụ:

select id, blast_results::json#>'{"BlastOutput2","report","results","search","hits"}' 
from blast_caches 
where id in 
(select primer_left_blast_cache_id 
from primer3_output_pairs where id in (185423,185422,185421,185420,185419)) 

Nó không cung cấp các tính năng đầy đủ MongoDB thao tác dữ liệu, nhưng có lẽ là đủ cho hầu hết các nhu cầu này.

Một số liên kết hữu ích ở đây:
http://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails
https://dockyard.com/blog/2014/05/27/avoid-rails-when-generating-json-responses-with-postgresql

Ngoài ra còn có báo cáo rằng nó có thể làm tốt hơn MongoDB trên json:
http://www.slideshare.net/EnterpriseDB/the-nosql-way-in-postgres

Một lựa chọn khác sẽ được di chuyển ứng dụng Rails của bạn hoàn toàn để MongoDB và Rails có hỗ trợ rất tốt cho MongoDB.

Tôi sẽ không khuyên bạn nên chạy hai cơ sở dữ liệu, dựa trên quan sát cá nhân về cách nó có thể xấu.

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