2010-01-23 35 views
91

Tôi đang bắt đầu một dự án sở thích (phi doanh thu) bằng Ruby on Rails. Tôi đã thực hiện một số lượng phát triển hợp lý trong Rails bằng cách sử dụng Postgresql, và tôi có thể tạo ra một giả lập khá tốt về lược đồ chuẩn hóa. Tuy nhiên, Mongrodb trông bóng bẩy và mới. Điều gì tốt hơn cho việc thử một cái gì đó mới hơn là một dự án sở thích?Mongodb: Những điều cần biết trước khi sử dụng?

Hãy nghĩ lại khi bạn bắt đầu sử dụng Mongodb. Bạn đã học được những kỹ thuật gì sau đó khiến bạn nói, "Nếu tôi chỉ biết rằng khi tôi bắt đầu!" Bạn đã phát hiện ra những plug-in nào mà bạn đã sử dụng ngay từ đầu, nếu chỉ bạn đã biết? Bạn muốn đánh dấu tài liệu tham khảo nào?

Trả lời

63

Tôi chắc chắn sẽ là người thứ hai đề xuất của MongoMapper nếu bạn đang sử dụng MongoDB với Rails. Tôi sẽ cảnh báo bạn, tuy nhiên, có (cho đến nay) không có tài liệu nào khác ngoài một vài bài đăng trên blog. Nếu bạn không thoải mái đào sâu vào mã nguồn để xem mọi thứ hoạt động như thế nào, có lẽ nó không dành cho bạn.

Nếu bạn đang làm việc bên ngoài Rails, tôi khuyên bạn nên tránh xa MongoMapper. Bởi vì nó làm việc MongoDB thành một cái gì đó tương tự như những gì chúng ta mong đợi từ một ORM dựa trên SQL, nó không thực sự cung cấp cho bạn một ý tưởng tốt về sức mạnh của và suy nghĩ khác đằng sau MongoDB. Hãy dành một chút thời gian để chơi với trình điều khiển ruby ​​cấp thấp hơn, và ngay cả trong bảng điều khiển javascript.

Điều khác tôi muốn giới thiệu, đặc biệt là kể từ khi bạn đề cập đến việc biết cách bình thường hóa lược đồ, là không phải là để nghĩ về MongoDB làm cơ sở dữ liệu ngay bây giờ. Cách bạn tổ chức dữ liệu của mình trong MongoDB rất khác với cơ sở dữ liệu quan hệ. Hãy cố gắng nghĩ về nó nhiều hơn như một nơi để lưu trữ và truy xuất băm Ruby. Bạn có thể làm một số thứ quan hệ với MongoDB, nhưng tôi khuyên bạn chỉ nên gắn bó với các tài liệu độc lập trong khi bạn đang cố gắng quấn quanh NoSQL.

Đối với những liên kết bạn nên xem xét, tôi khuyên bạn nên đọc qua tất cả mọi thứ bạn có thể trên trang MongoDB. Tài liệu của họ rất tốt. Đặc biệt, hãy xem advanced queries, multikey indexesMapReduce để có ý tưởng về một số lợi thế và điểm mạnh độc đáo của cơ sở dữ liệu NoSQL.

2

Bạn chắc chắn nên xem xét các nhà hoạch định mongo-mapper: http://github.com/jnunemaker/mongomapper Nhưng tôi cũng khuyên bạn nên chơi một chút với trình điều khiển Ruby Mongo thuần túy để xem cách Mongo-mapper hoạt động dưới mui xe. Nó không phải là rất khó để đưa một số dữ liệu vào một cơ sở dữ liệu Mongo bằng cách sử dụng Ruby.

Tôi đoán bạn đã tìm thấy Hướng dẫn Ruby Mongo. Trong trường hợp bạn không làm như vậy, đây là liên kết: http://www.mongodb.org/display/DOCS/Ruby+Tutorial

+0

Tin hay không, điều đó không có trong các liên kết mà tôi đã xếp hàng để đọc và có vẻ như là tốt nhất. Cảm ơn. –

3

Đây là một người mới bắt đầu lớn/giới thiệu về MongoDB podcast từ NET Rocks -

http://www.dotnetrocks.com/default.aspx?ShowNum=507

Mike Dirolf được intereviewed ... ông làm việc về dự án MongoDB. Oh, và chất lượng âm thanh tuyệt vời.

Mike Dirolf là kỹ sư phần mềm tại 10gen, nơi anh làm việc trong dự án MongoDB. Ông chủ yếu làm việc trên các trình điều khiển máy khách cho Python và Ruby, nhưng cũng phải mất thời gian để nói về MongoDB - ông đã trình bày tại EuroPython, Strange Loop Conf, RubyEnRails, RuPy và RubyConf cũng như tại các nhóm họp mặt tại thành phố New York, London, Washington DC và San Francisco.

26

Tôi đang ở giai đoạn gần giống với bạn. Bắt đầu một dự án mới với MongoDB. Tôi có khoảng 7 tuần kinh nghiệm.Đây là những gì tôi đã tìm thấy rất hữu ích:

Sử dụng Mongoid thay vì Mongomapper

http://mongoid.org/

Các tài liệu là tuyệt vời. Nghiêm túc, tuyệt vời. Nó sẽ đưa bạn khoảng 15 phút đọc tất cả các tài liệu và bạn sẽ có một ý tưởng rất chính xác về những gì bạn có thể làm và không thể làm với Mongoid.

Ngày mai, ứng cử viên phát hành cho phiên bản chính mới của mongoid sẽ được phát hành. Nó sẽ mang lại rất nhiều thứ hữu ích.

Tôi đang sử dụng Rails 3. Để cài đặt các phiên bản phát triển thêm video này vào tập tin đá quý của bạn:

đá quý 'mongoid', "~> 2.0.0.beta"

beta hiện tại là 20, nhưng như tôi đã nói, ngày mai có ứng cử viên phát hành.

Ngoài ra tôi cũng sugest bạn tham gia nhóm google. Nó có lưu lượng truy cập thấp và mọi người rất sẵn lòng trả lời bất kỳ câu hỏi nào. Ví dụ tôi đã cho họ xem thiết kế DB Model đầu tiên của tôi và họ đã cho tôi nhiều cách để cải thiện điều đó. Người tạo ra Mongoid cũng trả lời các câu hỏi của bạn.

Bằng hai từ: Cộng đồng tuyệt vời.

Có plugin này cho phép bạn sử dụng Machinist với Mongo:

https://github.com/nmerouze/machinist_mongo

trình khá tốt.

gem 'machinist_mongo', :require => 'machinist/mongoid', 
:git => 'http://github.com/nmerouze/machinist_mongo.git', 
:branch => 'machinist2' 

Bạn có thể sử dụng Forgery with Machinist. Kết hợp tuyệt vời.

https://github.com/sevenwire/forgery

Điều khác tôi muốn nói. Tôi đến từ một thế giới cơ sở dữ liệu quan hệ, do đó, điều này nghe có vẻ rất lạ khi bắt đầu: Bạn có thể lưu các tệp trong cơ sở dữ liệu mongo.

Thực tế, nó có thể nhanh hơn việc quản lý chúng như chúng ta thường làm. Điều này là do sự hỗ trợ của mongo đối với sharding. Sharding nghĩa là bạn có thể sử dụng một cụm máy tính để phục vụ Cơ sở dữ liệu Mongo. Nó liền mạch. Master-slave. Vì vậy, bạn có thể phục vụ tệp từ nhiều máy tính, mỗi tệp gửi một phần. Nó vảy rất tốt :)

Điều này được thực hiện bằng cách sử dụng GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid hỗ trợ cấu hình chính-phụ.

Hỏi tôi xem bạn có cần thêm thông tin không.

Edit:

Ngoài ra: http://railscasts.com/episodes/238-mongoid

8

1. Query không trường hợp nhạy cảm của nó

eq

"_id": "1da259c70fe3392c3b000002", 
"name": "Dany" 

array('name' => 'dany') :: results 0 
array('name' => 'Dany') :: results 1 

2.Bài chèn ID:

$coll->insert($user, true); 
echo (string) $user['_id']; 

3. _id là một đối tượng MongoId

Tìm theo id:

$p->findOne(array('_id' => new MongoId($UID )), array('proj')); 

Hiện _id:

$coll['_id'] = (string) $coll['_id']; 

Cũng _id là chỉ duy nhất trên mỗi bộ sưu tập , có thể khác trên máy chủ khác

4. MongoDB có hỗ trợ cho LIMIT, OFFSET, ORDER

đối với một số sắp xếp trước, bạn có thể sử dụng Khung tổng hợp.

5. Trong SQL là SQL injection trong MongoDB là mảng tiêm

Vì vậy, khi viết một số sử dụng dữ liệu (string) hoặc kiểm tra is_array

$req = (string) $range['name']; 

6. HDD DOS

kích thước _POST mặc định là 8MB trong PHP, IN Mongo có giới hạn cho mỗi tài liệu 16MB. Vì vậy, hãy tưởng tượng Một số người dùng giả mạo eq USER_AGENT STRING trong kịch bản phân tích của bạn và sau đó gửi 16MB cho mỗi lần chèn.

7. Có một số vấn đề trong quá khứ với MongoDb nhưng ngay bây giờ 3.0 là khá tuyệt vời và ổn định.

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