You are on page 1of 42

Tìm hiểu về cơ sở dữ liệu

MongoDB
Phạm Thành Nam

Phạm Văn Thật

Đỗ Quốc Hợp
Nội dung chính:

 Tổng quan về MongoDB.


 So sánh MongoDB với các cơ sở dữ liệu RDBMS.
 Thực hiện truy vấn trên MongoDB.
 NoSQL injection.
Tổng quan về MongoDB..

 Là một trong những hệ quản lí CSDL mạnh mẽ nhất của NoSQL. Được
phát triển bởi 10gen vào năm 2007 , và phát hành mã nguồn mở
vào năm 2009.
 Sử dụng mô hình dữ liệu hướng tài liệu (Document-oriented
Database).
 Ra đời như là một mảnh vá cho những khuyết điểm và thiếu sót cũng
như hạn chế của mô hình cơ sở dữ liệu RDMLS về tốc độ, tính năng,
khả năng mở rộng, memory cache…
 MongoDB được sử dụng bởi nhiều hãng lớn như MTV Networks,
Adobe, Google, Cisco, Ebay, Facebook ….
Document-oriented Database

 Là một kiểu database mà ở đó dữ liệu được tổ chức một cách tự do


không theo một lược đồ nào cả (Schema-free).
• Mỗi bản ghi không cần phải có cấu trúc cố định, các bản ghi khác nhau
có thể có nhiều cột khác nhau.
• Loại dữ liệu trong mỗi cột giửa các bản ghi cũng có thể khác nhau.
• Mỗi cột có thể có nhiều hơn một giá trị (array).
• Các bản ghi có thể có cấu trúc lồng nhau (trong một bản ghi có thể
chứa nhiều bản ghi khác.
Dữ liệu được đóng gói thành từng document, document có thể lưu dưới dạng JSON,
XML…
Tổng quan về MongoDB.

 Mongo DB đã khắc phục được


một trong những hạn chế lớn nhất
của hệ cơ sở dữ liệu truyền thống là
khả năng mở rộng.
 Thử nghiệm cho thấy tốc độ insert
của MongoDB nhanh gấp 100 lần
so với MySQL.

Important Features of MongoDB


Sharding

Đọc/Ghi: MongoDb phân tán dữ liệu trên


các Shards của Cluster. Việc đọc ghi sử
dụng Sharding có thể dễ dàng được
scaled horizontally.
Lưu trữ(Storage Capacity): Shardings
phân tán dữ liệu trên các Shard của
Cluster. Việc này giúp cho dữ liệu sẽ
được phân bố đều trên cụm máy cài
Sharding
Tính sẵn sàng(High Availability):
MongoDB có thể đọc ghi dữ liệu dễ dàng
thậm chí ngay cả khi một hoặc nhiều
Shard không sẵn sàng. Khi một hoặc
nhiều Shard không sẵn sàng, MongoDB
vẫn dễ dàng đọc ghi trên nhưng Share
sẵn sàng
Replica Set
Tổng quan về MongoDB.

 Ưu điểm:  Nhược điểm:


• Không có các tính chất rang buộc như
• Hiệu năng cao.
RDBMS nên dễ bị làm sai dữ liệu.
• Dữ liệu linh hoạt. • Sử dụng nhiều bộ nhớ: Do dữ liệu lưu dưới
dạng key-value, các collection chỉ khác
• Là Rich Querry Language.
nhau về value do đó key sẽ lặp lại(Trong
• Khả năng mở rộng. RDBMS thì ta chỉ cần lưu một bản ghi, còn
các bản ghi khác tham chiếu tới nó.) .
Tổng quan về MongoDB.

Chúng ta nên sử dụng MongoDB


trong các hệ thống:
 Hệ thống real-time yêu càu phản
hồi nhanh.
 Các hệ thống bigdata với yêu cầu
truy vấn nhanh.
 Các hệ thống có tần suất
write/insert lớn.
 Sử dụng làm search engine.
So sánh MongoDB với các cơ sở dữ
liệu RDBMS.
Tham số RDBMS MongoDB
Type Xây dựng từ các bảng. Xây dựng từ tài liệu với
cặp khóa-giá trị.
Schema Lược đồ xác định trước. Lược đồ động.
Khả năng mở rộng Có thể mở rộng theo Có thể mở rộng theo
chiều dọc chiều ngang.
Phù hợp cho Môi trường truy vấn phức Không phù hợp cho truy
tạp. vấn phức tạp
Lưu trữ dữ liệu phân cấp. Không thích hợp Thích hợp vì sử dụng dữ
liệu Json.
Được sử dụng tốt nhất Giải quyết các vấn đề về Giải quyết các vấn đề về
cho ACID. tính khả dụng của dữ liệu.
Tầm quan trọng Nó lên được sử dụng khi Khi mà tốc nhanh quan
hiệu lực dữ liệu là quan trọng hơn là dữ liệu chính
trọng. xác
So sánh MongoDB với các cơ sở
dữ liệu RDBMS.
Tham số RDBMS MongoDB
Lựa chọn tốt nhát Khi bạn cần hỗ trợ truy Khi bạn cần mở rộng quy
vấn động mô dựa trên yêu cầu dự
án.
Hiệu năng Muốn hoạt động tốt và Hoạt động nhanh hơn
nhanh thì việc thiết kế là SQL.
cực kì quan trong.
Kết luận Sử dụng khi dự án đã có Phù hợp với những dự án
yêu cầu rõ rang, quan hệ yêu cầu dữ liệu không
logic đã được xác định liên quan, khó xác định,
trước. đơn giản và mềm dẻo khi
đang phát triển.
So sánh MongoDB với các cơ sở
dữ liệu RDBMS.

Bảng quy chiếu các thành phần của nhóm RDBMS với hệ quản trị CSDL MongoDB.
So sánh MongoDB với các cơ sở dữ
liệu RDBMS.
Cách hoạt động

 MongoDB hoạt động dưới một tiến trình ngầm service, luôn mở một
cổng (Cổng mặc định là 27017) để lắng nghe các yêu cầu truy vấn,
thao tác từ các ứng dụng gửi vào sau đó mới tiến hành xử lý
 Mỗi một bản ghi của MongoDB được tự động gắn thêm một field có
tên “_id” thuộc kiểu dữ liệu ObjectId mà nó quy định để xác định
được tính duy nhất của bản ghi này so với bản ghi khác, cũng như
phục vụ các thao tác tìm kiếm và truy vấn thông tin về sau. Trường
dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc độ truy
vấn thông tin đạt hiệu suất cao nhất.
Cách hoạt động

 Mỗi khi có một truy vấn dữ liệu, bản ghi được cache (ghi đệm) lên bộ
nhớ Ram, để phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không
cần phải đọc từ ổ cứng.
 Khi có yêu cầu thêm/sửa/xóa bản ghi, để đảm bảo hiệu suất của ứng
dụng mặc định MongoDB sẽ chưa cập nhật xuống ổ cứng ngay, mà
sau 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ
RAM xuống ổ cứng.
Truy vấn dữ liệu

 Để truy vấn, query dữ liệu trong MongoDB ta dùng method find()


Truy vấn dữ liệu
 Nếu bạn chỉ muốn lấy một document / bản ghi duy nhất thì thay
method find() bằng method findOne()
Truy vấn dữ liệu
 Nếu bạn muốn hiển thị kết quả
dưới dạng json format thì
dùng thêm lệnh pretty() ở
phía sau lệnh find()
Truy vấn theo điều hiện, mệnh đề
WHERE
Insert document trong MongoDB
 Để insert document vào MongoDB ta dùng lệnh:
insert():db.COLLECTION_NAME.insert(document)
Update document trong MongoDB

 Để update document trong MongoDB ta dùng method update():


Update document trong MongoDB

 VD: db.player.update({'name':'neymar'},{$set: {'country':'spain'}})


Xóa document trong MongoDB

 Để document trong MongoDB ta dùng method


remove():db.COLLECTION_NAME.remove(DELLETION_CRITTERIA,
justOne)
 Trong đó:
• DELLETION_CRITTERIA: là điều kiện xóa (các bản ghi nào sẽ bị xóa)
• justOne: Nếu có giá trị bằng 1 hoặc true thì chỉ có nhiều nhất 1 bản ghi bị
xóa (trường này tùy chọn, nếu không có thì sẽ xóa tất cả các bản ghi
thỏa mãn DELLETION_CRITTERIA)
Xóa document trong MongoDB

 VD: db.player.remove({'name':'neymar'})
NoSQL injection
PHP Array Injection
PHP Array Injection
-Test:

-Code PHP :

-Mongo query look like:


PHP Array Injection
-Payload input:

-PHP translation this input :

-mongo query :
PHP Array Injection
-Result:
NOSQL OR INJECTION
-Source code:

-Test valid user:


NOSQL OR INJECTION
-Payload :

-Mongo query :

-Compare SQL
NOSQL JAVASCRIPT INJECTION
Attacking MongoDB
Bypass Authorization
Bypass Authorization
Injection SSJS code
Blind SSJS injetcion-Timebased
Demo
Cảm ơn thầy và
các bạn đã lắng
nghe

You might also like