Sử dụng MongoDB trong Rails app
Bài đăng này đã không được cập nhật trong 7 năm
MongoDb là một NoSQL engine được giới thiệu từ năm 2009. Trong MongoDB thì chúng ta không phải làm việc và bảng và các dòng như trong SQL nữa, thay vào đó là collections và documents. Nó được thiết kế để xử lý với khối lượng dữ liệu lớn, mềm dẻo, dễ dàng mở rộng và hiệu quả.
Installation MongoDB
Ở bài này mình sẽ giới thiệu trên Ubuntu nhé.
- Nếu bạn dùng Ubuntu 16.04 thì tham khảo link này https://www.howtoforge.com/tutorial/install-mongodb-on-ubuntu-16.04/
- Còn với Ubuntu 14: https://www.howtoforge.com/tutorial/install-mongodb-on-ubuntu-14.04/
Mặc định thì Service của mongoDB sẽ start sau khi cài đặt xong. Để kiểm tra thì bạn sử dụng câu lệnh
sudo service mongod status
Nếu bạn thấy dòng chữ Active: active (running) là okie đấy.
Tương tự sudo service mongod stop
để tắt, sudo service mongod restart
nếu bạn muốn khởi động lại.
Sử dụng MongoDB thay cho SQLite mặc định của Rails
Để đi vào cụ thể các sử dụng MongoDB trong rails app như thế nào thì mình sẽ tạo một app demo để các bạn thấy rõ. Và trong app này minh sẽ không dùng database ralationship nữa nên sẽ bỏ tất cả ActiveRecord đi với option --skip-active-record
rails new demo --skip-active-record
để sử dụng được mongoDB trong rails thì cần một gem đó là Mongoid, đây là một ODM (Object Document Mapper) Framework cho MongoDB.
bạn mở Gemfile ra vào thêm gem này vào nhé.
gem "mongoid", git: 'git://github.com/mongoid/mongoid.git'
Sau đó trong terminal gõ lệnh bundle
để install. Để sử dụng như relational BD SQLite thì bạn cần phải thêm một file config nữa.
rails g mongoid:config
Bạn sẽ thấy một file config được tạo ra ở config/mongoid.yml. Không cần phải thay đổi gì cả defaul những gì nó tạo ra cũng đủ dùng rồi.
Giờ tạo một scaffold book với các properites title, author, price để làm việc nào.
rails g scaffold book title author price
Khi bạn mở file book.rb trong app/models/book.rb bãn sẽ thấy khác hoàn toàn so với việc sử dụng DB relational
class Book
include Mongoid::Document
field :title, type: String
field :author, type: String
field :price, type: String
end
Không còn phải extend lại ActiveRecord nữa, từ nay bạn cũng chẳng cần đến các file migration mỗi khi cần thay đổi structure của DB nữa. Nếu bạn muốn thêm một trường mới, đơn giản chỉ khai báo vào trong model thôi thêm vào view để tương tác với trường đó. giờ bạn hãy chạy rails s
xem thế nào
Khi vào link local:3000/books
bạn sẽ vẫn thấy giao diện quen thuộc và bạn có thể create, edit, destroy một book.
Trong DB relational thì mỗi row được tạo ra id sẽ được auto tự động tăn lên. Với MongoDB thì mỗi row của table sẽ ưng với một hash và ID định danh cho mỗi object thì gồm cả chữ lẫn số. Đây là một Object ID luôn có 12bytes.
Collections & Documents
Trong NoSQL thì mỗi Collections được coi như một bảng và mỗi document tương ứng vơi 1 row trong DB relational vậy.
Bạn có thể vào MongoDB interface dễ thao tác tường tự nhưu mysql terminal vậy. Trong file mongoid.yml có chứa database name bạn sẽ dùng tên này để access vào mongo terminal. Database name của mình là demo_development vì thế để vào terminal cuả nó thì ta gõ lệnh sau:
mongo demo_development
.
Để thấy được toàn bộ collecitons thì bạn sẽ sử dùng
> show collections
books
để tìm một record thì bạn sẽ sử dụng command sau: db.collection_name.find()
>db.books.find()
{ "_id" : ObjectId("590017f163703a5733000000"), "title" : "Nhung tam long cao ca ", "author" : "edmondo de amicis", "price" : "50" }
{ "_id" : ObjectId("59001c5a63703a5733000001"), "title" : "Bo Gia(god father)", "author" : " Mario Puzo ", "price" : "89" }
> db.books.find({"price": "89"})
{ "_id" : ObjectId("59001c5a63703a5733000001"), "title" : "Bo Gia(god father)", "author" : " Mario Puzo ", "price" : "89" }
Nếu trong find() không có condition gì thì sẽ query ra toàn bộ, nếu có điều kiện như ở câu query thứ 2 thì sẽ select ra nhưng record phù hợp .
Conclusion
Qua Bài viết này minh đã giới thiệu cái khung của cách sử dụng NoSQL trong Rails app thay vì dùng các SQLite hay MySQL. để tìm hiều thêm về MongoDB thì bạn có thể vào link docs này : https://docs.mongodb.com/ để xem các function và cách sử dụng nhé. Thanks!
All rights reserved