Mongodb: Những điều cần biết trước khi sử dụng? [đóng cửa]


93

Tôi đang bắt đầu một dự án sở thích (phi doanh thu) bằng cách sử dụng Ruby on Rails. Tôi đã thực hiện một lượng lớn quá trình phát triển trong Rails bằng cách sử dụng Postgresql và tôi có thể tạo ra một bản mô phỏng khá tốt của lược đồ chuẩn hóa. Tuy nhiên, Mongrodb trông sáng bóng và mới. Còn gì tốt hơn khi thử một thứ gì đó mới hơn là một dự án theo sở thích?

Hãy nhớ lại thời điểm bạn bắt đầu sử dụng Mongodb. Những kỹ thuật nào sau này bạn học được khiến bạn phải thốt lên: "Giá như tôi biết điều đó khi tôi bắt đầu!" Bạn đã phát hiện ra những plug-in nào mà bạn sẽ sử dụng ngay từ đầu, giá như bạn biết? Bạn muốn đánh dấu những tài liệu tham khảo nào?

Câu trả lời:


63

Tôi chắc chắn sẽ đề xuất MongoMapper thứ hai nếu bạn đang sử dụng MongoDB với Rails. Tuy nhiên, tôi sẽ cảnh báo bạn rằng không 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 khi đào sâu vào mã nguồn để xem mọi thứ hoạt động như thế nào, có lẽ nó vẫn chưa 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ó đang làm việc MongoDB thành một thứ gì đó tương tự như những gì chúng ta mong đợi từ ORM được SQL hỗ trợ, nó không thực sự cung cấp cho bạn một ý tưởng tốt về sức mạnh và tư duy khác biệt đằ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à thậm chí trong bảng điều khiển javascript.

Điều khác mà tôi khuyên bạn, đặc biệt là vì bạn đã đề cập đến việc biết cách chuẩn hóa một lược đồ, là đừng nghĩ về MongoDB như một 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ách bạn tổ chức dữ liệu trong cơ sở dữ liệu quan hệ. Hãy thử nghĩ về nó nhiều hơn như một nơi lưu trữ và truy xuất các hàm băm của Ruby. Bạn có thể thực hiện một số việc liên quan với MongoDB, nhưng tôi khuyên bạn chỉ nên sử dụng các tài liệu độc lập trong khi bạn đang cố gắng xoay sở với NoSQL.

Về những liên kết bạn nên xem, tôi thực sự khuyên bạn nên đọc qua 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 xét các truy vấn nâng cao , chỉ mục đa khóaMapReduce để có ý tưởng về một số lợi thế và sức mạnh độc đáo của cơ sở dữ liệu NoSQL.


26

Tôi đang ở gần cùng giai đoạn 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 thấy rất hữu ích:

Sử dụng Mongoid thay vì Mongomapper

http://mongoid.org/

Tài liệu là tuyệt vời. Nghiêm túc, xuất sắc. Bạn sẽ mất khoảng 15 phút để đọc tất cả tài liệu và bạn sẽ có một ý tưởng 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 mongoid chính mới sẽ được phát hành. Nó sẽ mang lại rất nhiều điều hữu ích.

Tôi đang sử dụng Rails 3. Để cài đặt phiên bản phát triển, hãy thêm nó vào tệp gem của bạn:

gem 'mongoid', "~> 2.0.0.beta"

Bản beta hiện tại là 20, nhưng như tôi đã nói, ngày mai sẽ có bản phát hành.

Ngoài ra, tôi muốn bạn cũng 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ế Mô hình DB đầu tiên của mình và họ đã cho tôi nhiều cách để cải thiện điều đó. Người tạo Mongoid cũng trả lời câu hỏi của bạn.

Trong 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

Hoạt động 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

Một điều nữa tôi muốn nói. Tôi đến từ thế giới cơ sở dữ liệu quan hệ, vì vậy điều này nghe có vẻ thực sự kỳ lạ ngay từ đầu: Bạn có thể lưu tệp trong cơ sở dữ liệu mongo.

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

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

Mongoid hỗ trợ cấu hình master-slave đó.

Hỏi tôi nếu bạn cần thêm thông tin.

Biên tập:

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


8

1. Truy vấn không phân biệt chữ hoa chữ thường

eq

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

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

2. ID chèn lần cuối:

$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 thị _id:

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

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

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

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

5. Trong SQL là Sql injection trong MongoDB là Array injection

Vì vậy, khi viết một số dữ liệu, hãy sử dụng (chuỗi) 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, TRONG Mongo có giới hạn cho mỗi tài liệu là 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 tập lệnh 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 hiện tại phiên bản 3.0 khá tuyệt vời và ổn định.


3

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

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

Mike Dirolf được xem xét ... anh ấy làm việc trong dự án MongoDb. Ồ, 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 ấy làm việc trong dự án MongoDB. Anh ấy chủ yếu làm việc trên các trình điều khiển khách hàng cho Python và Ruby, nhưng cũng dành thời gian để nói về MongoDB - anh ấy đã trình bày tại EuroPython, Strange Loop Conf, RubyEnRails, RuPy và RubyConf cũng như tại các nhóm gặp gỡ ở Thành phố New York, London, Washington DC và San Francisco.


2

Bạn chắc chắn nên xem qua mongo-mapper của máy ép trái cây: 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 mongo-mapper hoạt động như thế nào. Không khó để đưa một số dữ liệu vào cơ sở dữ liệu Mongo bằng Ruby.

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


Tin hay không thì tùy, đó không phải là liên kết tôi đã xếp hàng để đọc, và nó có vẻ là một liên kết hay. Cảm ơn.
Wayne Conrad
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.