Viện Công Nghệ Thông Tin Và Truyền Thông
ĐẠI HỌC BÁCH KHOA HÀ NỘI
Luận Văn Thạc Sĩ
TRIỂN KHAI THỬ NGHIỆM CÁC KỸ THUẬT BẢO MẬT
THÔNG TIN TRÊN HỆ CSDL NOSQL MONGODB
Nguyen Thanh Long
Ha Noi, 2023
ii
MỤC LỤC
LỜI CẢM ƠN ................................................................................................ i
LỜI CAM ĐOAN ......................................................................................... ii
KÝ HIỆU, CHỮ VIẾT TẮT ....................................................................... vi
LỜI NÓI ĐẦU .............................................................................................. 1
CHƯƠNG 1. TỔNG QUAN VỀ CSDL NOSQL VÀ HỆ QUẢN TRỊ
CSDL MONGODB ....................................................................................... 2
1.1. Giới thiệu CSDL NOSQL .................................................................. 2
1.1.1. Đặc điểm NoSQL ............................................................................ 2
1.1.2. Các mơ hình của NoSQL ................................................................... 3
a) Mơ hình dữ liệu tổng hợp ..................................................................... 3
b) Mơ hình dữ liệu phân tán ..................................................................... 3
1.1.3. Ưu và nhược điểm của hệ quản trị cơ sở dữ liệu NoSQL .................... 4
a) Ưu điểm ............................................................................................... 4
b) Nhược điểm .......................................................................................... 5
1.1.4. Phân loại NoSQL............................................................................... 5
a) Key-value stores ................................................................................... 5
b) Document Databases ............................................................................ 6
d) Graph Databases .................................................................................. 8
1.1.5. So sánh hệ quản trị cơ sở dữ liệu NoSQL và SQL ............................. 9
1.1.6. Ứng dụng của NoSQL hiện nay ....................................................... 10
1.2. Giới thiệu về hệ quản trị CSDL MongoDB ..................................... 11
1.2.1. Khái niệm ..................................................................................... 11
1.2.2. So sánh MongoDB với cơ sở dữ liệu quan hệ ................................ 13
1.2.3. Quản lý cơ sở dữ liệu MongoDB .................................................. 14
CHƯƠNG 2. AN TỒN VÀ BẢO MẬT THƠNG TIN ĐỐI VỚI CSDL
NOSQL VÀ HỆ QUẢN TRỊ CSDL MONGODB..................................... 27
iii
2.1. Các hiểm họa mất an tồn thơng tin trong cơ sở dữ liệu NoSQL .. 27
2.1.1. Lạm dụng các đặc quyền vượt mức và các đặc quyền khơng cịn
được dùng
27
2.1.2. Lạm dụng đặc quyền............................................................................ 28
2.1.3. Tấn công SQL Injection ........................................................................... 28
2.1.4. Mã độc.................................................................................................. 29
2.1.5. Lợi dụng vết kiểm toán yếu ................................................................. 29
2.1.6. Lợi dụng sự sơ hở để khai thác phương tiện lưu trữ ........................... 30
2.1.7. Khai thác các CSDL có điểm yếu và bị lỗi cấu hình ........................... 30
2.1.8. Rị rỉ các dữ liệu nhạy cảm khơng được quản lý ................................. 30
2.1.9. Tấn công từ chối dịch vụ...................................................................... 31
2.1.10. Vấn đề đào tạo và chuyên gia an ninh mạng còn hạn chế ................ 31
2.2. Các giải pháp an tồn và bảo mật thơng tin trong MongoDB........ 31
2.2.1. Các giải pháp mã hóa CSDL .................................................................... 31
2.2.2. Giải pháp mã hóa đường truyền .................................................. 35
2.2.3. Giải pháp xác thực ....................................................................... 38
2.2.3. Ủy quyền và kiểm soát truy cập .................................................... 44
CHƯƠNG 3. TRIỂN KHAI THỬ NGHIỆM VÀ ỨNG DỤNG .................. 48
3.1. Mô tả thực nghiệm............................................................................ 48
3.1.1. Mô tả cơ sở dữ liệu ....................................................................... 48
3.1.2. Mô tả hoạt động của cơ sở dữ liệu ............................................... 49
3.2. Mơ hình hệ thống cơ sở dữ liệu và giải pháp an toàn cho cơ sở dữ
liệu 50
3.2.1. Các thành phần của hệ thống CSDL ........................................... 50
3.1. Mơ hình an tồn cho CSDL ................................................................... 50
3.2.2. Các giải pháp an toàn và bảo mật cho hệ thống cơ sở dữ liệu ..... 50
3.3. Triển khai thử nghiệm ..................................................................... 52
3.3.1. Tạo cơ sở dữ liệu .......................................................................... 52
iv
3.3.2. Cấu hình xác thực người dùng .................................................... 55
3.3.3. Cấu hình kiểm sốt truy cập ......................................................... 57
3.3.4. Cấu hình mã hóa mật khẩu .......................................................... 59
3.3.5. Cấu hình bảo mật đường truyền .................................................. 60
3.3.6. Triển khai tường lửa .................................................................... 66
KẾT LUẬN .................................................................................................. 78
TÀI LIỆU THAM KHẢO ............................................................................ 79
v
KÝ HIỆU, CHỮ VIẾT TẮT
Từ viết tắt
Tiếng anh
AES
Advanced Encryption Standard
API
Application Programming Interface
BSON
Binary Object Notation
CLI
Command Line Interface
CMS
Content Management System
CPU
Central Processing Unit
Bộ xử lý trung tâm
FGAC
Fine Grained Access Control
Cơ chế kiểm soát min
HTTP
HyperText Transfer Protocol
NoSQL
Non – Relational
SSL
Secure Socket Layer
SQL
Structured Query Language
RMBMS
TLS
Tiếng Việt
Tiêu chuẩn mã hóa tiên
tiến
Giao diện lập trình ứng
dụng
Chuỗi mã hóa nhị phân
giống JSON
Giao diện dòng lệnh
Hệ thống quản trị nội
dung
Giao thức truyền tải
siêu văn bản
Cơ sở dữ liệu không
quan hệ
Tầng ổ bảo mật
Ngơn ngữ truy vấn
mang tính cấu trúc
Relational Database Danagement
Hệ thống quản lý cơ sở
System
dữ liệu quan hệ
Transport Layer Security
Giao thức bảo mật tầng
giao vận
1
LỜI NÓI ĐẦU
Cơ sở dữ liệu quan hệ đã thống trị ngành công nghiệp phần mềm trong
một thời gian dài khi đã cung cấp cơ chế để lưu trữ dữ liệu liên tục, đồng thời
kiểm soát, giao dịch, giao diện được chuẩn hóa và được tích hợp vào các hệ
thống dữ liệu ứng dụng, báo cáo. Tuy nhiên, trong vài năm qua chúng ta đã
thấy sự gia tăng của một loại cơ sở dữ liệu mới, đó là cơ sở dữ liệu NoSQL,
các cơ sở dữ liệu dạng này cho phép lưu trữ các dữ liệu phức tạp, phân tán lớn.
NoSQL có nghĩa là khơng chỉ SQL, ngụ ý rằng khi thiết kế một giải
pháp phần mềm hoặc sản phẩm, có nhiều hơn một cơ chế lưu trữ có thể được
sử dụng dựa trên các nhu cầu. NoSQL khơng có một định nghĩa rõ ràng mà
chúng ta có thể hiểu là mơ hình cơ sở dữ liệu mới có các đặc điểm như: Khơng
sử dụng các mơ hình quan hệ, chạy tốt trên các cụm(server), chủ yếu là mã
nguồn mở, xây dựng cho web thế kỷ 21, tối thiểu hóa lược đồ.
Tuy nhiên, hiện nay có rất nhiều hiểm họa tấn cơng vào các CSDL
NoSQL. Vì vậy việc đảm bảo ATTT cho các CSDL này là một vấn đề hết sức
quan trọng. Xuất phát từ thực tiễn trên, đồ án này thực hiện đề tài “ Tìm hiểu
và triển khai thử nghiệm các kỹ thuật mã hóa trên CSDL NoSQL”.
2
CHƯƠNG 1. TỔNG QUAN VỀ CSDL NOSQL VÀ HỆ QUẢN TRỊ
CSDL MONGODB
1.1. Giới thiệu CSDL NOSQL
NoSQL là Non – Relational: tạm dịch là phi quan hệ. NoSQL là cơ sở
dữ liệu không quan hệ, ràng buộc giữa các Collection (hay cịn gọi là các
table trong cơ sở dữ liệu bình thường). Tức là giữa các Collection sẽ khơng có
khóa chính hay khóa ngoại như trong cơ sở dữ liệu bình thường. Việc này sẽ
giảm bớt rối khi cơ sở dữ liệu chúng ta có nhiều bảng. NoSQL đặc biệt nhấn
mạnh đến mơ hình lưu trữ cặp giá trị - khóa và hệ thống lưu trữ phân tán.
1.1.1. Đặc điểm NoSQL
Tính nhất quán lỏng lẻo (Looser consistency) : NoSQL tổ chức lưu trữ
và truy xuất dữ liệu theo cơ chế “thoáng hơn trong đảm bảo tính nhất quán
của dữ liệu” so với mơ hình dữ liệu quan hệ truyền thống nhằm cải thiện hiệu
suất, đảm bảo dữ liệu luôn được đáp ứng tốt hơn
Tính nhất quán ngầu nhiên (Eventual consistency): NoSQL khơng u
cầu phải đảm bảo tính nhất qn của dữ dữ liệu ngay tức thì mà sẽ hiện thực
tính nhất quán của dữ liệu theo cơ chế lan truyền. Ví dụ: Khi bạn đổi đổi
avartar trên Facebook thì hình ảnh trên trang cá nhân của bạn được đổi tức thì,
cịn trong danh sách bạn bè và trên trang chủ chưa được cập nhật ngay.
Lưu trữ phân phối (Distributed storage): hay cịn gọi là lưu trữ phân tán là
thay vì dữ liệu được lưu trữ trên một máy chủ duy nhất thì hệ thống sẽ lưu dữ
liệu trên nhiều máy khác nhau.
Khả năng mở rộng theo chiều ngang (Horizontal scalable): với các hệ
quản trị cơ sở dữ liệu quan hệ , khi mà dữ liệu quá lớn phương pháp tăng khả
năng lưu trữ là sẽ phải mở rộng (nâng cấp máy chủ), cịn đối với NoSQL thì
chỉ cần bổ sung thêm máy chủ khác vì hệ thống hỗ trợ lưu trữ phân tán trên
nhiều máy.
3
1.1.2. Các mơ hình của NoSQL
a) Mơ hình dữ liệu tổng hợp
Mơ hình cơ sở dữ liệu quan hệ là rất khác nhau so với các loại cấu trúc
dữ liệu mà các nhà phát triển ứng dụng sử dụng. Sử dụng các cấu trúc dữ liệu
đã được mơ hình hóa bởi các nhà phát triển để giải quyết vấn đề, lĩnh vực khác
nhau đã làm tăng chuyển động đi từ mơ hình quan hệ và hướng tới mơ hình
tổng hợp (hầu hết trong số này được đề cập đến trong cuốn sách Domain
Driven Design của Eric Evans). Một số mô hình là tổng hợp của các đơn vị dữ
liệu mà có sự tương tác với từng phần trong đó với nhau. Các đơn vị dữ liệu
với cơ sở dữ liệu như là “key-value”, “document”và “column-family”.
Tổng hợp để dễ dàng hơn trong việc quản lý dữ liệu lưu trữ trên các
cụm. Và các đơn vị dữ liệu bây giờ có thể lưu trữ trên bất kỳ máy tính nào và
khi lấy ra từ cơ sở dữ liệu chúng ta sẽ được tất cả các dữ liệu có liên quan cùng
với nó. Cơ sở dữ liệu tổng hợp làm việc tốt nhất khi hầu hết các dữ liệu được
thực hiện trên cùng một tổng hợp, ví dụ như khi cần có được một đơn đặt hàng
và tất cả các chi tiết của nó, nó sẽ tốt hơn khi lưu trữ thơng tin theo một đối
tượng tổng hợp.
b) Mơ hình dữ liệu phân tán
Cơ sở dữ liệu theo định hướng tổng hợp thực hiện phân phối các dữ liệu
dễ dàng hơn, vì các cơ chế phân phối có để di chuyển tổng hợp và khơng phải
lo lắng về dữ liệu có liên quan, như tất cả các dữ liệu liên quan được chứa
trong tổng hợp. Có hai kiểu phân phối dữ liệu:
- Sharding: sharding phân phối dữ liệu khác nhau trên nhiều máy chủ, do
đó mỗi máy chủ đóng vai trị như là nguồn duy nhất cho một tập hợp
con của dữ liệu.
- Replication: replication sao chép dữ liệu trên nhiều máy chủ, vì vậy mỗi
bit dữ liệu có thể được tìm thấy ở nhiều nơi. Replication có hai hình thức:
4
- Master-slave: làm cho một nút có quyền hạn như là bản sao để xử lý ghi
trong khi slave đồng bộ với master và có thể xử lý đọc.
- Peer-to-peer: cho phép ghi vào bất kỳ nút nào mà các nút phối hợp đồng
bộ các bản sao của dữ liệu
Master-slave làm giảm sự xung đột khi có thực hiện cập nhật còn peer-topeer tránh tải tất cả viết lên một máy chủ duy nhất nên khi có lỗi chỉ xảy ra tại một
điểm duy nhất. Một hệ thống có thể sử dụng một trong hai hoặc cả hai kỹ thuật trên.
1.1.3. Ưu và nhược điểm của hệ quản trị cơ sở dữ liệu NoSQL
a) Ưu điểm
NoSQL Là mã nguồn mở: khơng phải mất chi phí và có xu hướng tin
cậy, an ninh và nhanh hơn để triển khai so với các hệ quản trị cơ sở dữ liệu
độc quyền.
Linh hoạt trong việc mở rộng và phát triển: Về phía cơng ty quản lý thì
giúp dễ dàng mở rộng máy chủ khi dữ liệu càng ngày càng lớn hoặc lượng
truy cập, tải dữ liệu quá lớn, thay vì thuê một máy chủ lớn hơn để thế máy
chủ trước thì cơng ty chỉ cần thuê thêm một máy chủ khác. Về phía người lập
trình thì giúp dễ dàng thêm Collection (Bảng) hoặc cặp dữ liệu (Cột). Dễ dàng
trong việc thống kê, truy vấn nhanh.
Áp dụng được cơng nghệ điện tốn đám mây: dễ dàng mở rộng phạm vi
được theo yêu cầu có sử dụng một dịch vụ như là Amazon EC2. Giống nhưtất cả
cơng nghệ đám mây, EC2 dựa vào ảo hóa. Liên kết yếu của ảo hóa là sự thực
thi của I/O, với bộ nhớ và CPU các các kết nối mạnh. NoSQL lưu trữ dữ liệu
thường được mở rộng phạm vi theo chiều ngang tận dụng được sự cung cấp
mềm dẻo của đám mây. Giúp mở rộng dữ liệu dễ dàng hơn.
Được các hãng lớn sử dụng như Amazon, BBC, Facebook và Google.
Làm nền tảng, cơ sở cho các công ty lớn áp dụng cũng như có sự tin cậy cao
về hệ quản trị NoSQL.
5
b) Nhược điểm
Hỗ trợ không đồng đều cho các doanh nghiệp. Các doanh nghiệp vừa
được sự hỗ trợ tốt nhất từ nhà cung cấp RMBMS (vì được phát triển trước
NoSQL một thời gian khá dài) còn các doanh nghiệp nhỏ thì thường sử dụng
các mã nguồn mở thì khơng được sự hỗ trợ tốt nhất.
Chưa được sử dụng rộng rãi vì NoSQL vẫn chưa nhận được sự tin cậyvới
nhiều doanh nghiệp, một phần dữ liệu đã được xây dựng từ lâu, nên việc
chuyển đổi cũng là vấn đề khó với nhiều doanh nghiệp và chưa được hỗ trợ tốt
về chức năng cũng như sự ổn định như RMBMS.
Còn mới lạ với một số lập trình viên. Chưa được sử dụng để đào tạo rộng
rãi. Chưa có tool hỗ trợ giao diện tương tác cũng như các phương thức tốtnhất.
Dẫn đến hạn chế về tri thức nghiệp vụ.
Chia sẻ dữ liệu chưa theo một tiêu chuẩn chung. Mỗi cơ sở dữ liệu
NoSQL có các giao diện lập trình ứng dụng API riêng của mình. Sự thiếu hụt
các tiêu chuẩn có nghĩa là nó khơng có khả năng để chuyển một cách đơn
giản từ một nhà cung cấp này sang một nhà cung cấp khác.
1.1.4. Phân loại NoSQL
Hiện tại có nhiều loại cơ sở dữ liệu NoSQL. Các loại cơ sở dữ liệu này
không giống nhau về các lưu trữ và chúng được chia thành những nhóm sau:
a) Key-value stores
Ý tưởng chính của kiểu NoSQL là sử dụng bảng băm (hash-table), nơi
có một khóa duy nhất và một con trỏ chỉ đến mục dữ liệu cụ thể. Các mơ hình
key/value thì đơn giản và dễ thực hiện nhất. Nhưng nó sẽ khơng hiệu quả khi
bạn chỉ truy vấn hay update đến một phần dữ liệu trong phần giá trị.
Các cơ sở dữ liệu tiêu biểu cho Key-value stores là: Riak, Redis,
MemCache, Project Voldemort, CouchBase.
6
Ứng dụng: Do tốc độ truy xuất nhanh, key-value stores thường được dùng
để làm cache cho ứng dụng (Tiêu biểu là Redis và MemCache). Ngồi ra, nó cịn
được sử dụng để lưu thông tin trong sessions, profiles/preferencer của user.
b) Document Databases
Cơ sở dữ liệu Document được lấy cảm hứng từ Lotus Noted và tương tự
như key-value stores. Mơ hình này về cơ bản là phiên bản cơ sử dữ liệu
document bao gồm tập hợp document. Nhưng chứa bên trong document là tập
hợp key-value. Những document này được lưu ở định dạng JSON. Trong
document có nhiều cặp key-value và các cặp key-value này được phép lồng
vào nhau. Mỗi document sẽ có 1 key. Kiểu cơ sở dữ liệu document này hỗ trợ
truy vấn hiệu quả hơn.
Hình 1.1. Ví dụ về Document Database
7
Các cơ sở dữ liệu tiêu biểu cho cơ sở dữ liệu Document: CouchDB
(JSON), MongoDB (BSON, RavenDB, TerraStone, OrientDB,.
Ứng dụng: Do nhanh và linh động, document database thường đóng vài
trị làm database cho các ứng dụng prototype, big data, e-commerce, CMS.
Ngồi ra, ta cịn dùng nó để lưu log hoặc history.
c) Column Family Stores
Cơ sở dữ liệu được tạo ra để lưu và xử lý một lượng dữ liệu lớn trên
nhiều server. Cơ sở dữ liệu column-family lưu trữ dữ liệu trong nhiều cột
trong mỗi dòng cho từng dòng. Column families là một nhóm các dữ liệu liên
quan được truy cập với nhau.
Hình 1. 2 Ví dụ với Column Family
Các cơ sở dữ liệu tiêu biểu cho Column Family Stores là: Cassandra
(Phát triển bởi Facebook), HyperTable, Apache Hbase, BigTable (của
Google), v.v.
Ứng dụng: Column-Family Stores được sử dụng khi ta cần ghi một số
lượng lớn dữ liệu, big data. Nó cịn được ứng dụng trong một số CMS và ứng
dụng e-commerce.
8
d) Graph Databases
Graph Databases là database sử dụng cấu trúc graph để lưu trữ dữ liệu,
nó khác so với cơ sở dữ liệu quan hệ lưu dữ liệu dưới dạng table, hay NoSQL
lưu dữ liệu dưới dạng document key value.
Hình 1.3. Ví dụ với Graph Databases
Các bản ghi dữ liệu trong graph database được gọi là Nodes, các node
được kết nối với nhau bằng các quan hệ Relationships. Nodes và
Relationships đều có thể có các thuộc tính. Các Nodes có thể phân thành các
group để dễ quản lý nhờ vào Label.
Các cơ sở dữ liệu tiêu biểu cho Graph Databases là: Neo4J, Sones,
AllegroGraph, Core Data, DEX, FlockDB, InfoGrid, OpenLink Virtuoso, v.v.
Ứng dụng: Khi cần truy vấn các mối quan hệ, graph database truy vấn
nhanh và dễ hơn nhiều so với database. Nó được dùng trong các hệ thống:
mạng nơ ron, chuyển tiền bạc, mạng xã hội (tìm bạn bè), giới thiệu sản phẩm
(dựa theo sở thích/lịch sử mua sắm của người dùng), v.v.
9
1.1.5. So sánh hệ quản trị cơ sở dữ liệu NoSQL và SQL
Tiêu chí đánh giá
RDBMs
NoSql
Có nhiều điểm yếu kém.
Thực hiện khá tốt.
Đánh chỉ mục lượng
lớn dữ liệu, phân
trang hoặc phân phối
luồng
dữ liệu media
Key/Value,
Mơ hình dữ liệu
based
Table
Column–
Tabular,
Document-based, Graphbased data-stores.
Khơng nhất thiết phần
Yêu cầu phần cứng Yêu cầu phần cứng máy
cho dữ liệu lớn
chủ cao.
cứng phải cao, có thể mở
rộng máy chủ ở nhiều nơi
với tài nguyên phần
cứng thấp.
Thông qua chuỗi kết nối
Cách lấy dữ liệu
(tên máy chủ, tên cơ sở
từ client.
dữ liệu, tên tài khoản và
mật khẩu).
Kém
Hiệu suất
hơn
SQL
Relational giữa các bảng
Khả năng mở rộng
Hạn chế về lượng
Thông
qua
API
(Application
Programming Interface).
Cực tốt
Bỏ qua SQL
Bỏ qua các ràng buộc dữ
liệu
Hỗ trợ lượng lớn cho các
node
10
Phù hợp với cơng nghệ
điện tốn đám mây
Hiệu suất đọc ghi
Khơng
Có.
Kém do thiết kế để đảm
Tốt với mơ hình xử lý lô
bảo sự vào/ra liên tục
và những tối ưu về đọc-
của dữ liệu
ghi dữ liệu.
Không
Thay đổi số node
trong hệ thống
cần
phải
Phải shutdown cả hệ
shutdown cả hệ thống.
thống. Việc thay đổi số
Việc thay đổi số node
node phức tạp.
đơn giản, không ảnh
hưởng đến hệ thống.
Hỗ trợ lập trình hướng
đối tượng
Kém
Tốt
Bảng 1 1. So sánh SQL và NoSQL
1.1.6. Ứng dụng của NoSQL hiện nay
Ngày nay, với sự phát triển của các ứng dụng Big Data mạng xã hội,
yêu cầu đòi hỏi xử lý một lượng dữ liệu vơ cùng lớn, tăng lên nhanh chóng
hàng ngày. Vì vậy mà NoSQL trở thành một cơ sở dữ liệu khơng thể thiếu để
giải quyết những bài tốn như vậy.
Hình 1.4: Ứng dụng của NoSQL
Ví dụ như Facebook sử dụng NoSQL kết hợp với RDBMS để lưu trữ
hàng tỷ bài viết và bình luận đáp ứng hơn 1 tỷ thành viên sử dụng dịch vụ mà
vẫn luôn hoạt động ổn định, tính sẵn sàng cao và khả năng phân tán dữ liệu vô
11
tận. Điều đó cho thấy rằng NoSQL là một tư tưởng lưu trữ mới đáng để thời
gian và công sức nghiên cứu.
1.2. Giới thiệu về hệ quản trị CSDL MongoDB
1.2.1. Khái niệm
MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở, dùng để thiết
kế cơ sở dữ liệu, giúp dễ dàng phát triển và mở rộng, cung cấp hiệu suất cao,
tính sẵn sàng cao.
Cấu trúc của Mongodb bao gồm các cặp “thuộc tính” – “giá trị”,
MongoDB document tương tự như đối tượng JSON. Giá trị của thuộc tính bao
gồm các thuộc tính giá trị cụ thể (số, chữ, ..), document, mảng, mảng các đối
tượng.
- Cơ sở dữ liệu (Database):
Database là một ô chứa dữ liệu ở mức vật lý(physical), mỗi database sẽ
có nhiều collection và được thiết lập lưu trữ ở một mơi trong máy chủ máy
tính. Một máy chủ MongoDB thường có thể tạo nhiều cơ sở dữ liệu.
- Tập hợp (Collection):
Collection trong MongoDB là nhóm các tài liệu(document), nó tương
đương với một bảng(table) trong CSDL, nên thông thường mỗi collection sẽ
thuộc về một database duy nhất. Tuy nhiên nó có một sự khác biệt đó là nó
khơng có ràng buộc Relationship như các CSDL khác nên việc truy xuất dữ
liệu rất nhanh, chính vì thế mỗi colletion có thể chứa nhiều thể loại khác nhau
khơng giống như table trong hệ quản trị myspl là các field cố định
- Tài liệu (Document):
Document trong MongoDB có cấu trúc tương tự như kiểu dữ liệu
JSON,nghĩa là sẽ có các cặp (key => giá trị) nên nó có tính năng động rất lớn.
Document ta có thể hiểu nó giống như các record dữ liệu trong MYSQL, tuy
12
nhiên nó có sự khác biệt là các cặp(key=> value) có thể khơng giống nhau ở
mỗi document.
Để rõ hơn chúng ta sẽ so sánh MongoDB và một hệ quản trị CSDL.
RDBMS
MongoDB
Database
Database
Table
Collection
Tuple/ Row
Document
Column
Field
Table Join
Embedded Document
Primary
Primary key(mặc định là_id)
Bảng 1.2. So sánh MongoDB và một hệ quản trị CSDL
Ví dụ dưới đây là một cấu trúc CSDL của học viên lớp H24 trong
MongoDB:
Hình 1.5: Cấu trúc một CSDL MongoDB
MongoDB chạy trên hầu hết các nền tảng và hỗ trợ kiến trúc 64-bit để
13
sử dụng sản xuất và cả hai 64-bit và 32-bit kiến trúc để thử nghiệm
Các hệ điều hành hổ trợ
Mongodb
Mongodb Enterprise
Amazon Linux
Hỗ trợ
Hỗ trợ
Debian 7.1
Hỗ trợ
Hỗ trợ
RedHat / CentOS 6.2+
Hỗ trợ
Hỗ trợ
SUSE 11
Hỗ trợ
Hỗ trợ
Ubuntu LTS 12.04
Hỗ trợ
Hỗ trợ
Ubuntu LTS 14.04
Hỗ trợ
Hỗ trợ
Windows Server 2012
Hỗ trợ
Hỗ trợ
Mac OSX 10.6+
Hỗ trợ
RedHat / CentOS 5.5+
Hỗ trợ
RedHat / CentOS 5.7+
Hỗ trợ
Hỗ trợ
Windows Server 2008 R2
Hỗ trợ
Hỗ trợ
Bảng 1.3. Các hệ điều hành hỗ trợ
1.2.2. So sánh MongoDB với cơ sở dữ liệu quan hệ
- So sánh các lệnh sử dụng trong MongoDB khác và MySQL
Lệnh
MySQL
MongoDB
Tạo
Creat
Insert
Tìm kiếm
Select
Find
Cập nhật
Update
Update
Xóa
Delete
Remove
Bảng
Table
Collection
Hàng
Row
Document
Bảng 1.4.Lệnh sử dụng cho MongoDB
- So sánh các tính năng khác
14
• MongoDB sinh ra để tăng tốc độ truy xuất dữ liệu, phù hợp cho các
ứng dụng cần tốc độ phản hồi nhanh(realtime như facebook chẳng
hạn). Còn các tác nghiệp cần tính tồn vẹn dữ liệu (trong banking)
thì Nosql khơng đáp ứng được u cầu thay vì đó cần sử dụng
MySQL.
• MongoDB khơng có tính ràng buộc, vì vậy cần sự cẩn thận khi thao
tác trên các collection có quan hệ dữ liệu với nhau.
• MongoDB đẩy trách nghiệm thao tác Database cho tầng ứng dụng
nên sẽ tốn tài nguyên (tài ngun bây giờ khơng cịn là vấn đề q
lớn nữa).
• MongoDb có thể mở trộng theo chiều ngang (scale out) phương
pháp tăng cường khả năng lưu trữ và xử lý là dùng nhiều máy tính
phân tán. MongoDb mở rộng theo chiều dọc (scale up) tăng cấu
hình server.
• MongoDb dùng nhiều máy tính phân tán để lưu trữ dữ liệu nên chi
phí sẽ rẻ hơn Mysql. Mysql sử dụng những máy chủ có cấu hình
cao, độc quyền nên sẽ đắt đỏ hơn.
1.2.3. Quản lý cơ sở dữ liệu MongoDB
- Tạo Database:
Lệnh use trong MongoDB: Lệnh use DATABASE _ NAME trong
MongoDB được sử dụng để tạo cơ sở dữ liệu. Lệnh này sẽ tạo một cơ sở dữ
liệu mới, nếu nó chưa tồn tại, nếu khơng thì lệnh này sẽ trả về cơ sở dữ liệu
đang tồn tại. Cú pháp như sau:
use DATABASE_NAME
15
Ví dụ: Nếu muốn tạo một cơ sở dữ liệu là mydb, sử dụng lệnh như sau:
>use mydb
switched to db mydb
Để kiểm tra cơ sở dữ liệu đã chọn hiện tại, bạn sử dụng lệnh “show dbs”:
>show dbs
local
0.78125GB
test
0.23012GB
Cơ sở dữ liệu đã được tạo ra khơng có trong danh sách này. Để hiển thị
nó, cần chèn ít nhất một Collection vào trong đó
Sau đó kiểm tra lại cơ sở dữ liệu bằng lệnh “show dbs”
>db.movie.insert({"name":"tutorials point"})
>show dbs
local
mydb
test
0.78125GB
0.23012GB
0.23012GB
- Xóa Database trong MongoDB:
Lệnh db.dropDatabase( ) trong MongoDB được sử dụng
để xóa một cơ
sở dữ liệu đang tồn tại. Cú pháp cơ bản của lệnh dropDatabase( ) là như sau:
db.dropDatabase()
Lệnh này sẽ xóa cơ sở dữ liệu đã chọn. Nếu bạn không chọn bất kỳ cơ sở
dữ liệu nào thì nó sẽ xóa cơ sở dữ liệu mặc định test. Ví dụ : Đầu tiên bạn
kiểm tra danh sách các cơ sở dữ liệu có sẵn bởi sử dụng lệnh “show dbs”
>show dbs
local
mydb
0.78125GB
0.23012GB
16
test
0.23012GB
>
Nếu bạn muốn xóa cơ sở dữ liệu mới mydb, lệnh dropDatabase( ) sẽ là
như sau:
>use mydb
switched to db mydb
>db.dropDatabase()
>{ "dropped" : "mydb", "ok" : 1 }
>
Bây giờ, thử kiểm tra danh sách các cơ sở dữ liệu
>show dbs
local
0.78125GB
test
0.23012GB
>
- Tạo Collection trong MongoDB:
Phương thức db.createCollection(name,options) trong MongoDB được sử
dụng để tạo Collection. Cú pháp:
db.createCollection(name, options)
Trong lệnh trên name là tên của Collection, Options là một Document và
được sử dụng để xác định cấu hình cho Collection:
Tham số
Kiểu
Miêu tả
Name
Document
(Tùy ý) Xác định các tùy chọn về
kích cỡ bộ nhớ và việc lập chỉ mục
Bảng 1.5. Bảng tham số, kiểu và miêu tả
17
Tham số options tùy ý, vì thế chỉ cần đặt tên của Collection. Dưới đây là
danh sách các tùy chọn bạn có thể sử dụng :
Trường
Kiểu
Miêu tả
Capped
Boolean
(Tùy ý) Nếu true, kích hoạt một
Capped
Collection.
Đây
là
một
Collection có kích cỡ cố định mà tự
động ghi đè các entry cũ nhất khi nó
tiếp cận kích cỡ tối đa. Nếu bạn xác
định là true, thì bạn cũng cần xác định
tham số size
autoindexID
Boolean
(Tùy ý). Nếu true, tự động tạo chỉ mục
trên trường_id. Giá trị mặc định là false
Số
Size
(Tùy ý). Xác định kích cỡ tối đa(giá
trị byte) cho một Capped Collection.
Nếu tham số capped là true, thì bạn
cũng cần xác định trường này
Số
Max
(Tùy ý). Xác định số Document tối
đa được phép trong một Capped
Collection
Bảng 1.6. Bảng trường, kiểu và miêu tả
Trong khi thực hiện việc chèn dữ liệu vào Document, đầu tiên MongoDB
kiểm tra trường size của Capped Collection, sau đó mới kiểm tra trường max.
Ví dụ: Cú pháp cơ bản của phương thức createCollection( ) mà không có các
options như sau:
>use test
switched to db test
>db.createCollection("mycollection")
18
{ "ok" : 1 }
>
Bạn có thể kiểm tra Collections bằng câu lệnh:
>show collections
mycollection
system.indexes
- Xóa Collection trong MongoDB:
Phương thức db.collection.drop( ) trong MongoDB được sử dụng để xóa
một collection cơ sở dữ liệu. Cú pháp:
db.COLLECTION_NAME.drop()
Ví dụ: đầu tiên kiểm tra các collections bên trong:
>use mydb
switched to db mydb
>show collections
mycol
mycollection
system.indexes
tutorialspoint
>
Bây giờ xóa 1 collection:
>db.mycollection.drop()
true
>
Sau đó kiểm tra các cơ sở dữ liệu Collections bên trong:
>show collections
19
mycol
system.indexes
tutorialspoint
>
- Chèn Document trong MongoDB:
Để chèn dữ liệu vào Collection trong MongoDB, bạn cần sử dụng phương
thức insert( ) hoặc save( ). Cú pháp:
>db.COLLECTION_NAME.insert(document)
Ví dụ:
>db.mycol.insert({
_id: ObjectId(7df78ad8902c),
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'tutorials point',
url: '',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
Ở đây, mycol là tên Collection, đã được tạo trong phần trên. Nếu
collection này chưa tồn tại trong cơ sở dữ liệu, thì MongoDB sẽ tạo Collection
này và chèn Document nào trong đó. Trong document được chèn, nếu chúng
ta khơng xác định tham số_id, thì MongoDB gán một ObjectID duy nhất cho
document này. _ID là một số thập lục phân duy nhất, dài 12 byte cho mỗi
Document trong một Collection. 12 byte được phân chia như sau (đã được mô
tả trong các phần trước).
20
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3
bytes incrementer)
Để chèn nhiều document trong một truy vấn đơn, bạn có thể truyền một
mảng các document trong lệnh insert( ). Ví dụ:
>db.post.insert([
{
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'tutorials point',
url: '',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
title: 'NoSQL Database',
description: 'NoSQL database doesn't have tables',
by: 'tutorials point',
url: '',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 20,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2013,11,10,2,35),
like: 0