1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu về mongodb và thử nghiệm

68 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu về mongodb và thử nghiệm
Tác giả Tô Bá Quyền
Người hướng dẫn TS. Phan Anh Phong
Trường học Trường Đại Học Vinh
Chuyên ngành Công Nghệ Thông Tin
Thể loại báo cáo đồ án tốt nghiệp
Năm xuất bản 2014
Thành phố Nghệ An
Định dạng
Số trang 68
Dung lượng 1,41 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: GIỚI THIỆU VỀ CƠ SỞ DỮ LIỆU QUAN HỆ (7)
    • 1.1. Một số khái niệm cơ bản (7)
    • 1.2. Cơ sở dữ liệu quan hệ (8)
    • 1.3. Ƣu điểm và nhƣợc điểm của CSDL quan hệ (0)
  • CHƯƠNG 2: CƠ SỞ DỮ LIỆU NOSQL (10)
    • 2.1. Đặt vấn đề (10)
    • 2.2. Các tiếp cận biểu diễn dữ liệu trong NoSQL (10)
  • CHƯƠNG 3: HỆ QUẢN TRỊ MONGODB (16)
    • 3.1. Giới thiệu (16)
    • 3.2. JSON (16)
    • 3.3. BSON (17)
    • 3.4. Văn bản (document) (18)
    • 3.5. Giá trị Null trong MongoDB (19)
    • 3.6. Mô hình dữ liệu (20)
    • 3.7. Tổ chức chỉ mục (21)
    • 3.8. Mô hình nhúng một – một (22)
    • 3.9. Mô hình nhúng một - nhiều (23)
    • 3.10. Mô hình tham chiếu một – nhiều (25)
    • 3.11. Mô hình tham chiếu nhiều – nhiều (26)
    • 3.12. Lựa chọn nhúng hay tham chiếu khi xây dựng CSDL trong MongoDB ? (28)
    • 3.13. Cài đặt và sử dụng MongoDB (29)
    • 3.14. Mối tương quan logic trong MongoDB (36)
    • 3.15. Ví dụ (37)
    • 3.16. Một số truy vấn (39)
  • CHƯƠNG 4: KẾT NỐI VỚI CƠ SỞ DỮ LIỆU MONGODB (40)
    • 4.1. Môi Trường .NET (40)
    • 4.2. Môi trường java (42)
  • CHƯƠNG 5: MỘT SỐ THỬ NGHIỆM VỚI MONGODB (48)
    • 5. Thảo luận về hiệu năng của MongoDB và MS SQL Server 2008 (48)
    • 6. Xây dựng BLOG với cơ sở dữ liệu lưu trữ MongoDB (54)
  • KẾT LUẬN (67)
  • TÀI LIỆU THAM KHẢO (0)

Nội dung

GIỚI THIỆU VỀ CƠ SỞ DỮ LIỆU QUAN HỆ

Một số khái niệm cơ bản

Dữ liệu (Data) là những thông tin đã có và được ghi nhận lại, có thể được lưu trữ dưới dạng thủ công hoặc sử dụng công nghệ máy tính Nó gồm các dạng như tập tin, văn bản, hình ảnh hay âm thanh, là nguồn dữ liệu đa dạng phục vụ cho các mục đích khác nhau Con người tiếp nhận và xử lý dữ liệu để trích xuất thông tin hữu ích, giúp đưa ra quyết định chính xác Trong cơ sở dữ liệu, dữ liệu là tập hợp các thông tin có cấu trúc, mô tả một đối tượng hoặc sự kiện trong thế giới thực, như cơ sở dữ liệu về sách cung cấp các thông tin về tên sách, năm xuất bản, tác giả, giúp quản lý và tra cứu dễ dàng.

Thông tin là những dữ liệu đã được xử lý và mang ý nghĩa cho người sử dụng, phản ánh kiến thức và hiểu biết của con người về một đối tượng Nó giúp con người thu nhận và phân tích dữ liệu để hiểu rõ hơn về thế giới xung quanh, từ đó đưa ra các quyết định chính xác hơn Trong quá trình xử lý dữ liệu thành thông tin, chúng ta có thể tận dụng các công cụ và kỹ thuật để nâng cao hiệu quả và độ chính xác của quá trình phân tích, đáp ứng yêu cầu về tối ưu hóa công việc và nâng cao kiến thức.

Giá trị NULL được sử dụng để biểu thị những dữ liệu chưa được xác định hoặc không có giá trị cụ thể, mặc dù chúng có thể tồn tại trong cơ sở dữ liệu Tuy nhiên, giá trị NULL không mang ý nghĩa thực tế trong quá trình phân tích hoặc thực hiện các phép tính, dẫn đến việc cần xử lý đặc biệt để đảm bảo độ chính xác của kết quả Việc hiểu rõ khái niệm này giúp tối ưu quá trình quản lý dữ liệu và tránh các lỗi trong phân tích.

Ví dụ như những người không biết cha mẹ mình là ai thì giá trị cha mẹ sẽ được để là NULL mặc dù họ vẫn tồn tại

- Dữ liệu bán cấu trúc

Dữ liệu bán cấu trúc là loại dữ liệu có cấu trúc nhưng chưa hoàn toàn rõ ràng về mặt ý nghĩa, khiến người dùng gặp khó khăn trong việc hiểu các thông tin biểu diễn Nó không theo các quy tắc của cơ sở dữ liệu quan hệ nhưng vẫn chứa các trường riêng biệt bên trong Các trang web thường là ví dụ điển hình của dữ liệu bán cấu trúc, bao gồm các thẻ với dữ liệu có cấu trúc bên trong giúp phân biệt các loại thông tin khác nhau trong nội dung số.

- Tính nhất quán của dữ liệu trong CSDL

ACID là viết tắt của các yếu tố Quan trọng bao gồm Tính nguyên tố (Atomicity), Tính nhất quán (Consistency), Tính tách biệt (Isolation) và Tính bền vững (Durability), đại diện cho sự toàn vẹn của dữ liệu trong cơ sở dữ liệu Các đặc tính này đảm bảo rằng mọi giao dịch đều giữ cho dữ liệu luôn chính xác và đáng tin cậy; thiếu bất kỳ yếu tố nào cũng có thể làm giảm tính toàn vẹn của cơ sở dữ liệu Ví dụ, trong giao dịch rút tiền ngân hàng, các tính chất nhất quán giúp đảm bảo rằng tiền rút khỏi tài khoản không gây ra sai sót hoặc mất mát dữ liệu.

Nhất quán yếu là phương pháp đồng bộ dữ liệu không theo thời gian thực, đảm bảo tính nhất quán ngay sau mỗi phép ghi Khi dữ liệu được chỉnh sửa trên một máy chủ, nó sẽ không được cập nhật ngay lập tức trên các máy chủ khác, mà chỉ đồng bộ sau một khoảng thời gian nhất định, thường là 60 phút hoặc 1 ngày Phương pháp nhất quán yếu giúp nâng cao hiệu suất hệ thống, nhưng không phù hợp cho các giao dịch đòi hỏi tính nhất quán cao.

Web 2.0 là một xu hướng mới trong thiết kế vè phát triển web hiện nay mà mục đích của nó nhằm mang đến những thuận tiện trong quá trình chia sẻ dữ liệu Web 2.0 có vai trò nền tảng, cập nhật không ngừng Dễ dàng phát triển và có thể chạy trên mọi thiết bị.

Cơ sở dữ liệu quan hệ

Hiện nay, cơ sở dữ liệu quan hệ là loại phổ biến nhất, sử dụng mô hình quan hệ để mô tả dữ liệu qua các bảng và trường, giúp tối ưu hóa lưu trữ và giảm thiểu dư thừa dữ liệu Các hệ quản trị cơ sở dữ liệu quan hệ sử dụng SQL để truy vấn thông tin nhanh chóng và chính xác, đảm bảo tính nhất quán và toàn vẹn dữ liệu trong toàn bộ hệ thống.

Cơ sở dữ liệu quan hệ được tạo ra để giải quyết các bài toán thực tế bằng cách mô phỏng và trừu tượng hóa dữ liệu thành các mô hình quản lý và khai thác hiệu quả Tùy theo yêu cầu sử dụng, mỗi người có cách phân tích và thiết kế riêng phù hợp Hệ thống cơ sở dữ liệu quan hệ cung cấp khả năng trừu tượng hóa dữ liệu qua ba lớp: lớp vật lý, lớp logic và lớp bên ngoài, nhằm đảm bảo sự phân biệt rõ ràng giữa các tầng này Việc phân chia này tạo ra hai tầng độc lập: độc lập dữ liệu vật lý và độc lập dữ liệu logic, giúp nâng cao tính linh hoạt và tối ưu hóa quá trình quản lý dữ liệu.

Kiến trúc của cơ sở dữ liệu quan hệ

Ví dụ về lưu trữ dữ liệu sách vào CSDL, ta cần phân tích các thông tin quan trọng như tên sách, tên tác giả, nhà xuất bản, năm xuất bản và giá bán Những dữ liệu này giúp quản lý sách hiệu quả, hỗ trợ tra cứu nhanh chóng và chính xác Việc xác định các phần dữ liệu rõ ràng này đảm bảo tính nhất quán và dễ dàng trong việc nhập liệu cũng như truy xuất thông tin về sách trong hệ thống quản lý cơ sở dữ liệu.

1.3 Ƣu điểm và nhƣợc điểm của CSDL quan hệ

CSDL quan hệ giúp giảm thiểu sự trùng lặp của dữ liệu, đảm bảo tính nhất quán và toàn vẹn của thông tin Nó cho phép thay đổi cấu trúc dữ liệu một cách linh hoạt mà không ảnh hưởng đến các chương trình ứng dụng Ngoài ra, hệ thống CSDL quan hệ hỗ trợ nhiều người dùng cùng truy cập đồng thời, mỗi người dùng có thể sử dụng các khung nhìn khác nhau phù hợp với nhu cầu công việc của mình.

Hiện nay, sự phát triển của Web 2.0 đã đưa đến sự ra đời của các mạng xã hội như Facebook, blog, đồng thời lượng dữ liệu và lượt truy cập toàn cầu cũng tăng đột biến với hàng triệu người dùng cùng lúc Hàng tỷ nội dung liên tục được tạo ra và cập nhật, khiến các cơ sở dữ liệu quan hệ bắt đầu bộc lộ nhiều điểm yếu như khó khăn trong việc đánh chỉ mục lượng dữ liệu lớn, phân trang và phân phối luồng dữ liệu media như phim, ảnh, nhạc Để giải quyết các vấn đề này, cần nâng cấp phần cứng và áp dụng các giải pháp phân tán dữ liệu, nhưng việc mở rộng cơ sở dữ liệu quan hệ còn gặp nhiều khó khăn về tính nhất quán, chi phí phát triển và bảo trì Chính vì vậy, cần phát triển một hệ quản trị cơ sở dữ liệu mới nhằm đáp ứng các yêu cầu về khả năng mở rộng, hiệu suất và dễ bảo trì trong kỷ nguyên số hiện nay.

Để đáp ứng yêu cầu của thế hệ database kế tiếp, cần đa dạng hóa mô hình dữ liệu, trong đó cơ sở dữ liệu mới phải không ràng buộc, có khả năng mở rộng ngang để xử lý lượng dữ liệu lớn, đồng thời sử dụng ít tài nguyên phần cứng hơn Loại cơ sở dữ liệu này được gọi là NoSQL, phù hợp với các hệ thống cần linh hoạt và hiệu quả trong quản lý dữ liệu quy mô lớn.

Ƣu điểm và nhƣợc điểm của CSDL quan hệ

Những nhược điểm của cơ sở dữ liệu quan hệ đã khiến người ta nhận thấy cần phát triển hệ quản trị cơ sở dữ liệu mới Để xử lý lượng dữ liệu lớn và tăng tốc độ truy xuất, chúng ta phải chấp nhận giảm tính ràng buộc và dư thừa dữ liệu, dẫn đến việc không cần sử dụng mô hình quan hệ nữa Điều này đã thúc đẩy sự phát triển của các hệ thống cơ sở dữ liệu Non-Relational, đặc biệt là các hướng tiếp cận trong lĩnh vực NoSQL.

2.2 Các tiếp cận biểu diễn dữ liệu trong NoSQL Đã có rất nhiều cơ sở dữ liệu được phát triển với nhiều hướng khác nhau để đáp ứng nhu cầu sử dụng Hiện nay có khoản 150 loại cơ sở dữ liệu NoSQL và chia làm nhiều loại Có bốn hướng phát triển chính hiện nay đó là hướng khóa-giá trị, hướng văn bản, hướng cột dữ liệu mở rộng và hướng đồ thị Mỗi hướng phát triển lại có một cách biểu diễn đối tƣợng khác nhau

Ví dụ trong cơ sở dữ liệu quan hệ ta mô tả một đối tƣợng học sinh cùng các thuộc tính của đối tƣợng này nhƣ sau:

HS01 Nguyễn Văn A 51k1 Đại Học Vinh Thì trong các cơ sở dữ liệu NoSQL sẽ đƣợc mô tả nhƣ sau:

2.2.1 Cơ sở dữ liệu dựa trên cặp khóa-giá trị Đây là một dạng cơ sở dữ liệu phi quan hệ đơn giản với cặp giá trị key-value Nó đơn giản nhất vì những phương thức của nó đơn giản, nhưng việc triển khai thực tế có thể khá phức tạp

Các đối tượng được lưu trữ với một khóa duy nhất làm đại diện, và tất cả các thuộc tính của chúng sẽ được gộp lại thành một giá trị duy nhất Ví dụ, đối tượng học sinh được biểu diễn dưới dạng một dòng, thể hiện thông tin đầy đủ và rõ ràng về từng cá nhân Phương pháp này giúp tối ưu hóa quá trình lưu trữ dữ liệu, giảm thiểu độ phức tạp và nâng cao hiệu quả truy xuất thông tin trong hệ thống quản lý dữ liệu.

Khóa Giá trị HS01 Họ và tên: Nguyễn Văn A Lớp 51K1 Trường đại học Vinh Với 2 đối tƣợng trở lên ta biểu diễn thành nhiều dòng nhƣ sau:

Khóa Giá trị HS01 Họ và tên: Nguyễn Văn A Lớp 51K1 Trường đại học Vinh HS02 Họ và tên: Nguyễn Văn B Lớp 51K2 Trường đại học Vinh

CƠ SỞ DỮ LIỆU NOSQL

Đặt vấn đề

Do những hạn chế của cơ sở dữ liệu quan hệ, đã đến lúc phát triển hệ quản trị cơ sở dữ liệu mới để khắc phục những điểm yếu này Để nâng cao khả năng xử lý lượng dữ liệu lớn với tốc độ nhanh, cần chấp nhận giảm tính ràng buộc và dư thừa dữ liệu, làm cho mô hình quan hệ trở nên không phù hợp Chính vì vậy, các hệ quản trị cơ sở dữ liệu không quan hệ (NoSQL) đã ra đời, phản ánh xu hướng phát triển đa dạng và phù hợp với nhu cầu của dữ liệu lớn ngày nay.

Các tiếp cận biểu diễn dữ liệu trong NoSQL

Hiện nay, đã có khoảng 150 loại cơ sở dữ liệu NoSQL được phát triển để đáp ứng đa dạng nhu cầu sử dụng, chia thành nhiều hướng khác nhau Các hướng phát triển chính gồm có khoá-giá trị, văn bản, cột dữ liệu mở rộng và đồ thị, mỗi loại đều có cách biểu diễn đối tượng riêng biệt để phù hợp với các ứng dụng khác nhau.

Ví dụ trong cơ sở dữ liệu quan hệ ta mô tả một đối tƣợng học sinh cùng các thuộc tính của đối tƣợng này nhƣ sau:

HS01 Nguyễn Văn A 51k1 Đại Học Vinh Thì trong các cơ sở dữ liệu NoSQL sẽ đƣợc mô tả nhƣ sau:

2.2.1 Cơ sở dữ liệu dựa trên cặp khóa-giá trị Đây là một dạng cơ sở dữ liệu phi quan hệ đơn giản với cặp giá trị key-value Nó đơn giản nhất vì những phương thức của nó đơn giản, nhưng việc triển khai thực tế có thể khá phức tạp

Các đối tượng được lưu trữ với một khóa duy nhất làm đại diện, trong đó tất cả các thuộc tính được gộp lại thành một giá trị duy nhất Ví dụ, đối tượng học sinh được biểu diễn dưới dạng một dòng dữ liệu chứa các thông tin chi tiết như tên, tuổi, lớp học, giúp quản lý dữ liệu dễ dàng hơn và tối ưu hóa quy trình truy xuất thông tin Việc sử dụng phương pháp này giúp tăng hiệu quả trong việc tổ chức và xử lý dữ liệu, phù hợp cho các hệ thống lưu trữ thông tin lớn và phức tạp.

Khóa Giá trị HS01 Họ và tên: Nguyễn Văn A Lớp 51K1 Trường đại học Vinh Với 2 đối tƣợng trở lên ta biểu diễn thành nhiều dòng nhƣ sau:

Khóa Giá trị HS01 Họ và tên: Nguyễn Văn A Lớp 51K1 Trường đại học Vinh HS02 Họ và tên: Nguyễn Văn B Lớp 51K2 Trường đại học Vinh

Các khóa được lưu trên một mảng băm và trỏ đến vùng dữ liệu Cấu trúc của mảng này đƣợc biểu diễn nhƣ sau:

HS01 Họ và tên: Nguyễn Văn A Lớp 51K1 Trường đại học Vinh HS02 Họ và tên: Nguyễn Văn B Lớp 51K2 Trường đại học Vinh

Một số sản phần cơ sở dữ liệu theo hướng này là DynamoDB, Azure Table Storage, Redis

2.2.2 Cơ sở dữ liệu hướng văn bản (document store)

Cơ sở dữ liệu hướng văn bản sử dụng định dạng BSON để lưu trữ dữ liệu hiệu quả Mỗi đối tượng được lưu dưới dạng một văn bản duy nhất, giúp tối ưu hóa truy xuất và quản lý dữ liệu Các thuộc tính của đối tượng được lưu thành các trường riêng biệt, với cặp khóa và giá trị rõ ràng, hỗ trợ cấu trúc dữ liệu linh hoạt và dễ dàng mở rộng.

Ví dụ biểu diễn 1 đối tượng học sinh dưới dạng văn bản trong NoSQL:

{ _id: ObjectID(), MaHS: "HS01", hovaten:"Nguyễn Văn A", lop:"51K1", truong: "Đại Học Vinh"

} Trong đó đối tƣợng học sinh đƣợc biểu diễn bằng văn bản đƣợc đặt trong cặp dấu

"{}" Các thuộc tính được biểu diễn thành các cặp khóa-giá trị tương ứng như khóa

"hovaten" với giá trị "Nguyễn Văn An"

Với 2 đối tƣợng trở lên thì các đối tƣợng đƣợc ngăn cách với nhau bằng dấu „,‟ và chúng đƣợc biểu diễn nhƣ sau:

{ _id: ObjectID(), MaHS: "HS01", hovaten:"Nguyễn Văn A", lop:"51K1", truong: "Đại Học Vinh"

}, { _id: ObjectID(), MaHS: "HS02", hovaten:"Nguyễn Văn B", lop:"51K2", truong: "Đại Học Vinh"

Với cơ sở dữ liệu hướng văn bản ta có thể sử dụng các truy vấn để truy xuất tất cả hay một phần của dữ liệu

Một số sản phầm cơ sở dữ liệu hướng văn bản tiêu biểu là MongoDB, Elasticsearch, Couchbase Server, CouchDB, RavenDB

2.2.3 Cơ sở dữ liệu hướng cột mở rộng

Trong cơ sở dữ liệu hướng cột, đối tượng được biểu diễn thành một dòng duy nhất, giúp tối ưu hóa hiệu suất truy vấn Mỗi dòng chứa một khóa duy nhất để xác định đối tượng, trong khi các thuộc tính của đối tượng được biểu diễn thành các cột riêng biệt, gồm tên và giá trị của thuộc tính đó Phương pháp này giúp tăng khả năng mở rộng và linh hoạt trong việc lưu trữ dữ liệu phức tạp, phù hợp với các hệ thống cần xử lý dữ liệu lớn và linh hoạt về cấu trúc.

Ví dụ 1 đối tượng học sinh được biểu diễn dưới dạng cột như sau: row key Columns

Trong cơ sở dữ liệu hướng cột mở rộng, các cột trong mỗi dòng được tổ chức thành các danh sách riêng biệt, không liên quan trực tiếp đến nhau, mặc dù các dòng có thể chia sẻ các khóa giống nhau Dữ liệu được truy vấn dựa trên khóa, nhưng các mối quan hệ giữa các đối tượng không thể biểu diễn rõ ràng trong mô hình này Ví dụ, khi biểu diễn hai đối tượng học sinh, mỗi đối tượng được xác định bằng row key và các cột tương ứng, nhưng không thể hiện các mối liên hệ phức tạp giữa chúng.

Nguyễn Văn A 51K1 Đại học Vinh

Nguyễn Văn B 51K2 Đại hoc Vinh

Cột là phần nhỏ nhất trong mỗi cơ sở dữ liệu nó chứa 1 tên, 1 giá trị và 1 timestamp:

Tên cột Giá trị Timestamp

- Tên cột phải là nhãn định sẵn hoặc đƣợc đặt bởi ứng dụng, có thể đánh chỉ mục cho cột

- Phần giá trị không nhất thiết phải có giá trị, đôi khi các thông tin lại đƣợc đƣa vào tên cột chứ không phải phần giá trị

- Timestamp là thời điểm thay đổi dữ liệu cuối, nó chấp nhận phần dữ liệu thay đổi cuối cùng

Thông thường các kiểu dữ liệu không được định sẵn mà nó sẽ tự chuyển sang kiểu dữ liệu mà ta insert vào

Các cột trong bảng không được lưu trữ theo thứ tự của giá trị chứa trong chúng mà được sắp xếp dựa trên tên của cột một cách алphabet, giúp tối ưu hóa quá trình truy xuất và quản lý dữ liệu Các khóa của cột cũng được sắp xếp theo thứ tự alphabet để đảm bảo tính nhất quán và dễ dàng trong việc tìm kiếm Ví dụ, đối tượng học sinh được lưu trữ trong file cột theo dạng phân loại rõ ràng, giúp nâng cao hiệu quả xử lý dữ liệu trong quản lý học sinh.

@hocsinh/Truong = "Đại học Vinh"

Supper column là các cột chứa nhiều cột con bên trong, giúp tối ưu hóa cấu trúc dữ liệu Các cột bên trong supper column không bắt buộc phải sắp xếp theo tên, mang lại tính linh hoạt trong quản lý dữ liệu Việc sử dụng supper column giúp dễ dàng tổ chức và truy xuất các dữ liệu phức tạp một cách hiệu quả.

Value1 Value2 Value3 timestamp timestamp timestamp

Supper column dùng để nhóm nhiều cột có mối liên hệ với nhau, hoặc một đặc tính chứ nhiều giá trị

Truong Đại học Vinh Đại học Y Vinh Đại học Thủy Lợi

Hoặc chứa các đối tƣợng khác:

Nguyễn Văn A 51K1 Đại học Vinh

ColumnDB giống như cơ sở dữ liệu quan hệ nhưng lại bị hạn chế về khả năng truy vấn, không có chức năng „join” hay truy vấn thực sự ngoài truy vấn theo khóa Vì „join” yêu cầu truy xuất toàn bộ dữ liệu, điều này làm giảm hiệu năng hệ thống, đặc biệt khi xử lý dữ liệu lớn ColumnDB tối ưu cho truy vấn theo khóa bằng cách sử dụng chỉ mục trên toàn bộ dữ liệu hoặc phần dữ liệu, giúp xác định chính xác node lưu trữ dữ liệu mà không cần quét qua toàn bộ dữ liệu Mặc dù có nhiều hạn chế về mặt chức năng, nhưng ColumnDB nổi bật với khả năng mở rộng cao, phù hợp cho các hệ thống yêu cầu xử lý dữ liệu lớn và hiệu quả.

Những cơ sở dữ liệu tiêu biểu theo hướng này là Cassandra, Hypertable Accumulo, Amazon SimpleDB,

2.2.4 Cơ sở dữ liệu hướng đồ thị

Cơ sở dữ liệu hướng đồ thị biểu diễn các đối tượng bằng các nút (nodes), trong đó các thuộc tính được thể hiện thông qua các trường khóa-giá trị nằm bên trong nút đó Các mối quan hệ giữa các đối tượng được thể hiện bằng các cạnh (edge), mang theo các thông tin khóa-giá trị, và có thể có hướng hoặc không có hướng tùy theo từng trường hợp cụ thể Đây là mô hình dữ liệu linh hoạt, phù hợp để lưu trữ và truy vấn các mối quan hệ phức tạp trong hệ thống thông tin.

Biểu diễn các mối quan hệ giữa học sinh, giáo viên và trường học dưới dạng đồ thị giúp hình dung rõ ràng hơn về cấu trúc dữ liệu Trong mô hình này, các đối tượng như „ĐH Vinh‟, „Nguyễn Văn A‟ và „Nguyễn Văn B‟ được biểu diễn dưới dạng các nút có thuộc tính đi kèm Các mối quan hệ như học sinh thuộc trường nào, hoặc học sinh của ai, được thể hiện qua các cạnh kết nối các nút Trong đó, các cạnh biểu diễn mối quan hệ là yếu tố quan trọng nhất, giúp mô phỏng rõ ràng mối liên kết giữa các đối tượng Phương pháp này mang lại cái nhìn trực quan hơn, hỗ trợ phân tích và xử lý dữ liệu hiệu quả hơn.

Trong mạng lưới, cạnh đóng vai trò là các đường kết nối giữa các nút, thể hiện mối quan hệ giữa hai đối tượng Các thông tin quan trọng thường được lưu trữ trong các cạnh, giúp chúng ta hiểu rõ hơn về mối liên hệ giữa các nút, thuộc tính và các thành phần khác trong mô hình Mô hình này đặc biệt hữu ích khi khảo sát, phân tích các mối quan hệ phức tạp giữa các đối tượng trong hệ thống.

Một số phần mềm cơ sở dữ liệu hướng đồ thị tiêu biểu là : Neo4J, Infinite Graph, Sparksee, TiTan

Vì thời gian nghiên cứu còn hạn chế và khả năng của bản thân còn giới hạn, tôi chưa đề cập đến các cách biểu diễn mối quan hệ giữa các đối tượng bằng NoSQL trong bài viết này Các bạn có thể tham khảo thêm các tài liệu trong phần tài liệu tham khảo để hiểu rõ hơn về chủ đề này.

2.2.5 Ƣu nhƣợc điểm của NoSQL

NoSQL Miền ứng dụng Điểm mạnh Điểm yếu

Khóa-giá trị - Dùng để lưu trữ phiên làm việc, hồ sơ, giỏ hàng

- truy vấn nhanh - dữ liệu lưu trữ không có cấu trúc

Văn bản - Dùng cho các ứng dụng cần đọc nhiều, quản lý nội dung nhƣ Blog, ứng dụng thời gian thực

- mô hình dữ liệu dễ hiểu, chịu tải cao, lập trình thân thiện

- không thể thực hiện các giao dịch phức tạp

Cột mở rộng - Dùng cho ứng dụng quản lý nội dung nhƣ Blog, web, cần lưu dữ liệu lớn

- lưu trữ dữ liệu trên các máy phân tán, truy vấn nhanh

- không thể truy vấn theo cột hay giá trị Đồ thị - Dùng cho dữ liệu không gian, thông tin định tuyến, các bài toán về đường đi

- -Khai thác các thuật toán đồ thị

- phải duyệt qua toàn bộ đồ thị khi truy vấn.

HỆ QUẢN TRỊ MONGODB

Giới thiệu

MongoDB là một cơ sở dữ liệu NoSQL mã nguồn mở hướng văn bản, có hiệu năng và tính mở rộng cao

Khác với các cơ sở dữ liệu quan hệ dựa trên cấu trúc bảng, MongoDB lưu trữ dữ liệu dưới dạng văn bản JSON với mô hình động BSON, giúp việc tích hợp dữ liệu cho các ứng dụng trở nên dễ dàng và linh hoạt hơn Mục tiêu của MongoDB là kết hợp ưu điểm của mô hình khóa-giá trị, như tốc độ và khả năng mở rộng cao, với tính năng phong phú của mô hình dữ liệu quan hệ, mang lại sự tiện lợi và hiệu quả cho các nhà phát triển.

MongoDB đƣợc sử dụng tốt nhất với những ứng dụng cần truy vấn động, cần tốc độ nhanh có lƣợng dữ liệu lớn

JSON

JSON là định dạng dữ liệu sử dụng cú pháp JavaScript để mô tả đối tượng dưới dạng văn bản nhỏ gọn, dễ hiểu và dễ xử lý Nhiều ngôn ngữ lập trình hiện nay đều có khả năng hiểu và làm việc với cấu trúc JSON, giúp việc trao đổi dữ liệu trở nên linh hoạt và hiệu quả hơn JSON ngày càng phổ biến trong lập trình và phát triển phần mềm nhờ tính đơn giản, tối ưu về dung lượng và khả năng tích hợp cao.

Cấu trúc dữ liệu của JSON dựa trên các cặp Key/Value

- Key là một string, phải bắt đầu bằng một ký tự

- Value có thể là chuỗi, số, giá trị boolean hoặc đối tƣợng

JSON là một phần nhỏ của cú pháp JavaScript, dùng để biểu diễn dữ liệu theo cấu trúc dễ hiểu Một JSON Object gồm các cặp Key/Value, bắt đầu bằng dấu “{"” và kết thúc bằng dấu “}”, giúp dễ dàng truyền tải và lưu trữ dữ liệu trong các ứng dụng web hiện đại.

Trong quá trình định nghĩa dữ liệu, key là một chuỗi ký tự theo sau bởi dấu “:”, giúp phân cách với phần giá trị Giá trị có thể là một chuỗi, được đặt trong dấu “”, hoặc là số và boolean, không cần đặt trong dấu “” Đối với các loại dữ liệu phức tạp hơn, cách thể hiện sẽ tùy theo hỗ trợ của ngôn ngữ lập trình Điều này đảm bảo tính rõ ràng và phù hợp khi làm việc với JSON hoặc các định dạng dữ liệu tương tự.

Ví dụ khi mô tả đối tƣợng học sinh bằng bảng trong mô hình quan hệ:

HS01 Nguyễn Văn A 20 51K1 Trong JSON đối tƣợng học sinh đƣợc biểu diễn nhƣ sau:

{ MaHS: "HS01", HoVaTen : "Nguyễn Văn A", Tuoi: 20,

} Để biểu diễn 2 đối tƣợng trở lên, ta dùng một mảng các giá trị đƣợc nằm trong cặp dấu ngoặc vuông [ ] và cách nhau bởi dấu phẩy ","

Ví dụ biểu diễn 2 đối tƣợng học sinh bằng JSON: hocsinh : [

{ MaHS: "HS01", HoVaTen : "Nguyễn Văn A", Tuoi: 20,

}, { MaHS: "HS02", HoVaTen : "Nguyễn Văn B", Tuoi: 20,

Trong ví dụ trên, "hocsinh" là một con trỏ trỏ vào phần tử đầu tiên của danh sách các đối tượng học sinh JSON không lưu trữ con trỏ này, vì JSON chỉ là định dạng dữ liệu mô tả cấu trúc của danh sách Mô hình của danh sách trong JSON thể hiện dưới dạng mảng, giúp quản lý dữ liệu một cách rõ ràng và dễ dàng xử lý Hiểu rõ cách JSON lưu trữ danh sách và cách con trỏ hoạt động là yếu tố quan trọng trong việc lập trình và xử lý dữ liệu hiệu quả.

{MaHS: "HS01", HoVaTen : "Nguyễn Văn A", Tuoi: 20, Lop : "51K1"} hocsinh[0] hocsinh[1] hocsinh[2] hocsinh[3] hocsinh[4] hocsinh[5]

{MaHS: "HS02", HoVaTen : "Nguyễn Văn B", Tuoi: 20, Lop : "51K1"}

Chúng ta lấy họ và tên đối tƣợng thứ 1 của list nhƣ sau: hocsinh[0].HoVaTen Kết quả là : "Nguyễn Văn A"

Lấy tuổi của đối tƣợng thứ 2 trong list: hocsinh[1].Tuoi Kết quả là : "20".

BSON

BSON được phát triển dựa trên JSON và mở rộng để hỗ trợ lưu trữ nhiều loại dữ liệu khác nhau, giúp tăng khả năng linh hoạt và tối ưu hóa hiệu suất trong các ứng dụng lưu trữ dữ liệu Các kiểu dữ liệu hỗ trợ trong BSON bao gồm số nguyên, số thực, chuỗi, ngày tháng, nhúng tài liệu và mảng, giúp dễ dàng xử lý dữ liệu phức tạp mà không cần chuyển đổi định dạng Nhờ đó, BSON trở thành định dạng dữ liệu phù hợp cho các hệ thống cơ sở dữ liệu NoSQL như MongoDB, mang lại hiệu quả trong việc quản lý và truy vấn dữ liệu một cách linh hoạt và nhanh chóng.

5 Binary Data Chuỗi nhị phân

8 Boolead Kiểu đúng sai (true/false)

11 Regular Expression Các ngoại lệ

14 JavaScript(with scope) JavaScript (with scope)

16 Timestamp Ngày tháng kiểu nhị phân

Văn bản (document)

Trong MongoDB, các đối tượng được biểu diễn dưới dạng các văn bản JSON Thuộc tính của đối tượng được thể hiện bằng các cặp khóa-giá trị, trong đó khóa là tên thuộc tính và giá trị là giá trị tương ứng Tập hợp các đối tượng này tạo thành một collection, giúp tổ chức dữ liệu một cách dễ quản lý và linh hoạt.

Ví dụ biểu diễn 1 đối tƣợng học sinh trong cơ sở dữ liệu quan hệ:

HS01 Nguyễn Văn A 20 51K1 Biểu diễn 1 đối tƣợng học sinh bằng văn bản:

MaHS: "HS01", HoVaTen : "Nguyễn Văn A", Tuoi : 30,

Biểu diễn 2 đối tƣợng học sinh bằng văn bản: hocsinh:[{

MaHS: "HS01", HoVaTen : "Nguyễn Văn A", Tuoi : 30,

MaHS: "HS01", HoVaTen : "Nguyễn Văn A", Tuoi : 30,

Trong ví dụ này, "hocsinh" là một khóa chứa giá trị là một mảng gồm hai đối tượng học sinh Các đối tượng này được đặt trong dấu "[]" và phân biệt nhau bằng dấu "," Cấu trúc của mảng theo đúng dạng của JSON (theo mục 3.2), giúp quản lý dữ liệu dễ dàng và rõ ràng hơn.

- Một mảng các documents nhƣ ví dụ trên cũng chỉ là một document, còn một collection là một tập hợp các documents

Trong xử lý dữ liệu văn bản, các cặp khóa - giá trị được lưu trữ và truy xuất theo thứ tự, đảm bảo tính nhất quán trong quá trình xử lý thông tin Vì vậy, những hai văn bản có cùng cặp khóa - giá trị nhưng sắp xếp theo thứ tự khác nhau sẽ được lưu trữ thành các dữ liệu riêng biệt, phản ánh sự khác biệt về thứ tự trong cấu trúc dữ liệu Điều này giúp tối ưu hóa việc tìm kiếm, truy vấn và xử lý dữ liệu trong các hệ thống quản lý thông tin, nâng cao hiệu quả và độ chính xác khi làm việc với dữ liệu văn bản.

Ví dụ trong cơ sở dữ liệu quan hệ không phân biệt thứ tự thuộc tính:

Nguyễn Văn An 30 30 Nguyễn Văn An

Trong MongoDB có phân biệt thứ tự các thuộc tính:

Document2 HoVaTen: "Nguyễn Văn An",

Tuoi:30, HoVaTen: "Nguyễn Văn An"

- Khóa trong văn bản là một string, bắt đầu là một ký tự

- MongoDB phân biệt chữ hoa chữ thường

Trong MongoDB, một văn bản không được chứa các khóa trùng lặp, chỉ chấp nhận một khóa duy nhất cho mỗi văn bản Ví dụ, một văn bản có các khóa giống nhau là không hợp lệ Việc hiểu rõ quy tắc này giúp đảm bảo tính toàn vẹn của dữ liệu và tránh lỗi khi xử lý thông tin trong MongoDB.

{HoVaTen : "Nguyễn Văn An", HoVaTen : "Nguyễn Văn B"}

Giá trị Null trong MongoDB

Trong cơ sở dữ liệu quan hệ, việc thiết kế theo mô hình quan hệ đòi hỏi các bảng phải đảm bảo tất cả các cột của đối tượng đều có giá trị hoặc để null khi không xác định được giá trị Điều này giúp duy trì tính toàn vẹn và nhất quán của dữ liệu, đồng thời hỗ trợ hiệu quả trong việc quản lý và truy vấn dữ liệu Việc đảm bảo rằng mỗi cột đều có giá trị phù hợp là nguyên tắc quan trọng trong thiết kế cơ sở dữ liệu quan hệ để tối ưu hóa hoạt động của hệ thống.

Trong MongoDB, có thể đặt giá trị null cho các thuộc tính, nhưng các thuộc tính có giá trị null vẫn được xem như các khóa thông thường Tuy nhiên, điều này không thực sự cần thiết vì cấu trúc dữ liệu trong MongoDB là linh hoạt và không bắt buộc Nếu một thuộc tính không có giá trị, bạn có thể bỏ qua việc thêm khóa-giá trị đó vào tài liệu Khi truy vấn, những cặp khóa-giá trị không tồn tại sẽ không được hiển thị trong kết quả, giúp tối ưu hóa quá trình tìm kiếm và quản lý dữ liệu.

Mô hình dữ liệu

MongoDB là một cơ sở dữ liệu hướng văn bản, trong đó mỗi cơ sở dữ liệu có thể chứa nhiều collection Mỗi collection gồm các văn bản, mỗi văn bản có một khóa duy nhất gọi là “id”, là một chuỗi ObjectID hoặc có thể đặt giá trị tùy ý như số 0, 1 để dễ quản lý Mặc dù có thể tùy chỉnh, MongoDB vẫn tự động gán ngầm định một ObjectID cho từng văn bản Các văn bản trong MongoDB bao gồm nhiều trường, mỗi trường là một cặp khóa – giá trị để lưu trữ dữ liệu một cách linh hoạt và dễ dàng truy xuất.

Trong MongoDB, các cặp khóa – giá trị trong văn bản được sắp xếp theo thứ tự lưu trữ, giúp đảm bảo tính nhất quán khi xử lý dữ liệu Hai văn bản có cùng các cặp khóa – giá trị nhưng sắp xếp khác nhau sẽ được xem là khác nhau, phản ánh tầm quan trọng của thứ tự trong dữ liệu Bên cạnh đó, các khóa trong một văn bản không được trùng lặp nhau để duy trì tính toàn vẹn dữ liệu MongoDB còn phân biệt chữ hoa và chữ thường, điều này ảnh hưởng đến cách tra cứu và xử lý dữ liệu trong hệ thống.

Cũng nhƣ các hệ quản trị cơ sở dữ liệukhác, MongoDB đƣa ra các khái niệm về mô hình dữ liệu của bản thân nó:

- Value: có thể bao gồm các kiểu dữ liệu cơ bản, kiểu dữ liệu tập hợp

- Key: là tên một thuộc tính

- Field: là một cặp key – value

- Document: Mỗi document chứa một tập các field

- Collection: Mỗi collection lưu trữ một tập các document

- Database: Mỗi database lưu trữ một tập các collection

A MongoDB server hosts multiple databases, each containing one or more collections Collections are groups of documents that, logically, resemble tables in relational databases This structure allows for efficient data organization and retrieval within the MongoDB ecosystem.

Trong các hệ quản trị cơ sở dữ liệu NoSQL, bạn không cần phải định nghĩa trước cấu trúc dữ liệu khi thực hiện các thao tác như insert hay update Mỗi document hoạt động như một đơn vị dữ liệu độc lập, chứa một bản ghi không vượt quá 16MB Bên trong mỗi document là tập hợp các cặp key-value, giúp lưu trữ dữ liệu linh hoạt và dễ dàng mở rộng.

Dưới đây là Mối tương quan giữa RDMB và MongoDB

Mối tương quan giữa RDMB và MongoDB

Cấu trúc dữ liệu của MongoDB

Tổ chức chỉ mục

Tổ chức chỉ mục (index) trong MongoDB cũng đƣợc tổ chức giống với RDMB

Có nhiều cách tổ chức index nhƣng ở đây tôi chỉ giới thiệu về B-Tree

Cấu trúc này mô tả theo kiểu thứ bậc trong tự nhiên, với các nút gốc nằm ở trên cùng của hệ thống phân cấp và các nút lá ở dưới cùng Đây là dạng cấu trúc phổ biến trong nhiều lĩnh vực, giúp dễ dàng phân loại và tổ chức dữ liệu một cách logic Mô tả hình ảnh minh họa rõ ràng sự phân chia giữa các cấp trong cấu trúc phân cấp này, góp phần nâng cao khả năng quản lý và truy cập thông tin hiệu quả.

B-tree là một cấu trúc dạng cây mà dữ liệu đƣợc sắp xếp dạng một cây cân bằng Cây cân bằng có nghĩa là độ dài từ gốc tới lá của mỗi chi nhánh là nhƣ nhau Nó đƣợc tối ƣu hóa cho các hệ thống đọc và ghi dữ liệu lớn

MongoDB luôn có chỉ số index mặc định được tạo ra trên trường id Trường _id luôn là duy nhất và nó không thể bị xóa.

Mô hình nhúng một – một

Trong các mối quan hệ một – một, nếu cần truy vấn cả hai đối tượng cùng lúc, chúng ta có thể nhúng đối tượng này vào đối tượng kia để thực hiện truy vấn một lần duy nhất Đối tượng được nhúng sẽ trở thành một thuộc tính bên trong đối tượng chính, giúp tối ưu hóa hiệu quả tra cứu Ví dụ, mỗi học sinh có một lí lịch cá nhân, và việc nhúng lí lịch này vào hồ sơ học sinh sẽ giúp dễ dàng truy vấn và quản lý dữ liệu hơn.

Sử dụng ánh xạ lan truyền id trong mô hình quan hệ và biểu diễn trong MongoDB:

{ _id: ObjectID(), MaHS: "HS01", HoVaTen: "Nguyễn Văn A", Lop: "51K1",

{ _id: ObjectID(), MaLL: "LL01", Cha: "Nguyễn Văn B", Me: "Lê Thị M"

Khi truy vấn thông tin học sinh, cần thực hiện thêm một truy vấn để lấy hồ sơ lý lịch của học sinh, gây mất thời gian và hiệu quả không cao Để tối ưu hóa, chúng ta có thể nhúng hồ sơ lý lịch vào đối tượng học sinh như một thuộc tính của đối tượng, giúp truy xuất dữ liệu dễ dàng và nhanh chóng hơn Việc này giúp giảm số lượng truy vấn cần thiết, nâng cao hiệu suất hệ thống quản lý học sinh.

{ _id: ObjectID(), MaHS: "HS01", HoVaTen: "Nguyễn Văn A", Lop: "51K1",

Cha: "Nguyễn Văn B", Me: "Lê Thị M"

Khi truy vấn đối tượng học sinh, hệ thống cung cấp đầy đủ thông tin lý lịch của học sinh ngay lập tức mà không cần thực hiện thêm các truy vấn phụ Điều này giúp tối ưu hóa hiệu quả xử lý dữ liệu và nâng cao trải nghiệm người dùng Với khả năng truy xuất dữ liệu nhanh chóng, quản lý thông tin học sinh trở nên dễ dàng và tiện lợi hơn bao giờ hết.

Mô hình nhúng một - nhiều

Trong các mối quan hệ một nhiều, khi nhu cầu truy vấn cả hai bên cùng lúc cao, ta thường nhúng đối tượng phía quan hệ nhiều vào đối tượng phía quan hệ ít để tối ưu hóa hiệu suất truy vấn Các đối tượng được nhúng sẽ tạo thành một mảng và được biểu diễn dưới dạng thuộc tính trong đối tượng bị nhúng, giúp giảm thiểu số lượng truy vấn và nâng cao hiệu quả xử lý dữ liệu.

Ví dụ ta có mối quan hệ cha con nhƣ sau:

Sử dụng ánh xạ lan truyền id trong mô hình quan hệ, biểu diễn bằng Documents trong MongoDB nhƣ sau:

{ _id: ObjectID(), Cha_id: "001", HoVaTen : "Nguyễn Văn A"

{ _id: ObjectID(), Con_id: "002", Cha_id: "001", HoVaTen : "Nguyễn Văn B"

}, { _id: ObjectID(), Con_id: "003", Cha_id: "001", HoVaTen : "Nguyễn Văn C", }

Trong lập trình, khi đối tượng con tham chiếu đến đối tượng cha thông qua khóa “Cha id”, nếu chúng ta thường xuyên truy xuất thông tin của cả hai đối tượng cùng lúc, việc thực hiện hai truy vấn riêng lẻ sẽ gây giảm hiệu suất Để tối ưu hóa, chúng ta có thể nhúng đối tượng con vào trong đối tượng cha, giúp giảm thiểu số lượng truy vấn và nâng cao hiệu quả xử lý dữ liệu Đây là một phương pháp hiệu quả để tránh tình trạng truy vấn lặp đi lặp lại và đảm bảo tốc độ truy xuất dữ liệu nhanh hơn trong hệ thống.

_id: ObjectID(), Cha_id: "001", HoVaTen : "Nguyễn Văn A"

Các đối tượng con được biểu diễn dưới dạng mảng các đối tượng, giúp quản lý dữ liệu một cách dễ dàng và rõ ràng Khi nhúng các đối tượng con vào đối tượng cha, chúng trở thành thuộc tính “Con” của đối tượng cha, tạo thành mô hình nested data hiệu quả Với phương pháp nhúng này, chỉ cần một câu truy vấn duy nhất để lấy thông tin của cả hai đối tượng “cha” và “con”, tối ưu hóa quá trình truy xuất dữ liệu Cách truy vấn giá trị dưới dạng mảng cũng đã được mô tả trong mục 3.2 của tài liệu, giúp người dùng dễ dàng áp dụng trong các dự án thực tế.

Mô hình tham chiếu một – nhiều

Trong các mối quan hệ một nhiều, khi không cần nhúng tất cả các đối tượng với nhau, MongoDB cung cấp phương pháp tham chiếu một nhiều thay vì nhúng toàn bộ đối tượng Phương pháp này sử dụng khóa id của đối tượng để thiết lập mối liên kết, giúp tối ưu hóa hiệu suất và dễ quản lý dữ liệu hơn so với phương pháp lan truyền id trong mô hình quan hệ.

Ví dụ ta có mối quan hệ một - nhiều, một quê quán có nhiều người:

Sử dụng ánh xạ lan truyền id trong mô hình quan hệ, biểu diễn bằng Documents trong MongoDB nhƣ sau:

Xa : "Đồng Văn", Huyen: "Thanh Chương", Tinh: "Nghệ An"

{ _id: ObjectID(), Nguoi_id: "002", QueQuan _id: "001", HoVaTen : "Nguyễn Văn B"

{ _id: ObjectID(), Nguoi_id: "003", QueQuan _id: "001", HoVaTen : "Nguyễn Văn C", }

Trong trường hợp số lượng đối tượng “Nguoi” rất lớn và cần thường xuyên thống kê số lượng người theo quê quán, việc quét toàn bộ dữ liệu trong collection “Nguoi” sẽ tiêu tốn nhiều tài nguyên Để tối ưu hóa hiệu suất, chúng ta có thể áp dụng mô hình tham chiếu một – nhiều, bằng cách chỉ nhúng các khóa của đối tượng “Người” vào trong đối tượng “Quê quán” thay vì nhúng toàn bộ dữ liệu Phương pháp này giúp giảm thiểu tài nguyên sử dụng và nâng cao hiệu quả truy vấn.

Xa : "Đồng Văn", Huyen: "Thanh Chương", Tinh: "Nghệ An"

{ _id: ObjectID(), Nguoi_id: "002", HoVaTen : "Nguyễn Văn B"

}, { _id: ObjectID(), Nguoi_id: "003", HoVaTen : "Nguyễn Văn C", }

Để thống kê số lượng người cùng quê quán, bạn chỉ cần tính tổng số phần tử trong mảng “Nguoi” của đối tượng quê quán mà không cần duyệt toàn bộ danh sách Các giá trị trong mảng tham chiếu một – nhiều được đặt trong dấu “[]” và phân biệt nhau bằng dấu “,”, giúp dễ dàng xử lý và tổng hợp dữ liệu một cách nhanh chóng.

Mô hình tham chiếu nhiều – nhiều

Trong cơ sở dữ liệu quan hệ, để thể hiện mối quan hệ nhiều nhiều, chúng ta cần tạo ra bảng trung gian chứa khóa của các đối tượng liên kết với nhau Còn trong MongoDB, mối quan hệ nhiều - nhiều được thể hiện bằng cách sử dụng tham chiếu nhiều - nhiều, trong đó tập hợp các mảng khóa của một đối tượng trở thành thuộc tính trong đối tượng kia Việc này giúp quản lý mối quan hệ phức tạp một cách hiệu quả trong cả hai loại cơ sở dữ liệu.

Trong hệ thống cơ sở dữ liệu quan hệ, mối quan hệ giữa giáo viên và học sinh được thể hiện như sau: một giáo viên có thể dạy nhiều học sinh, trong khi một học sinh có thể học từ nhiều giáo viên khác nhau Điều này phù hợp với mô hình nhiều-một và nhiều-nhiều, giúp tối ưu hóa quản lý dữ liệu và nâng cao hiệu quả giảng dạy Việc biểu diễn mối quan hệ này trong cơ sở dữ liệu giúp đảm bảo tính toàn vẹn dữ liệu, thuận tiện trong truy vấn và phân tích thông tin.

Sử dụng ánh xạ lan truyền id trong mô hình quan hệ, biểu diễn bằng Documents trong MongoDB nhƣ sau:

_id: ObjectID(), HocSinh_id: " ", HoVaTen: " "

_id: ObjectID(), HocSinh_id: " ", HoVaTen: " "

_id: ObjectID(), HocSinh_id: " ", GiaoVien_id: " "

Tuy nhiên trong MongoDB chúng ta không cần thiết phải tạo một collection

“DayHoc” sử dụng hành tham chiếu nhiều-many bằng cách nhúng các khóa của đối tượng học sinh vào đối tượng giáo viên và ngược lại Phương pháp biểu diễn mối quan hệ nhiều-many trong MongoDB giúp liên kết các dữ liệu một cách linh hoạt và hiệu quả Đây là cách tiếp cận phổ biến để quản lý mối quan hệ phức tạp giữa các thực thể trong cơ sở dữ liệu NoSQL Việc sử dụng tham chiếu nhiều-many trong MongoDB giúp tối ưu hóa truy vấn và đảm bảo tính nhất quán của dữ liệu trong hệ thống của “DayHoc”.

{ _id: ObjectID(), HocSinh_id: " ", HoVaTen: " ", GiaoVien_id:[ " "," ", ]

_id: ObjectID(), GiaoVien_id: " ", HoVaTen: " ", HocSinh_id:[ " "," ", ]

} Ở đây thuộc tính „GiaoVien_id‟ trong đối tượng học sinh lưu trữ toàn bộ các

Trong hệ thống quản lý dữ liệu giáo viên và học sinh, thuộc tính „GiaoVien_id‟ lưu trữ ID của giáo viên đang giảng dạy cho học sinh đó Đồng thời, thuộc tính „HocSinh_id‟ của đối tượng giáo viên còn lưu trữ tất cả các ID của các học sinh mà giáo viên đang phụ trách Cách thể hiện này giúp chúng ta thể hiện mối quan hệ nhiều - nhiều một cách rõ ràng thông qua việc tham chiếu chính, không cần thiết phải tạo thêm collection mới.

Lựa chọn nhúng hay tham chiếu khi xây dựng CSDL trong MongoDB ?

Trong thiết kế lược đồ MongoDB, câu hỏi quan trọng là: “Đối tượng này có cần một collection riêng hay nên nhúng vào trong các đối tượng khác?” Trong cơ sở dữ liệu quan hệ, mỗi thành phần thường trở thành một bảng riêng, nhưng trong MongoDB, việc nhúng các đối tượng vào nhau thường mang lại hiệu quả cao hơn thay vì tạo ra nhiều collection riêng biệt.

Một số tiêu chí để lựa chọn nhúng hay tham chiếu:

- Các đối tượng “lớp thứ nhất” là các đối tượng ở mức cao nhất, có bộ sưu tập của riêng mình

- Các đối tượng miêu tả chi tiết các mục thường được nhúng

- Các đối tƣợng mà theo mô hình đối tƣợng có chứa quan hệ nói chung nên đƣợc nhúng

- Quan hệ nhiều – nhiều thường được tham chiếu

Các bộ sưu tập nhỏ chỉ với một vài đối tượng có thể tồn tại một cách an toàn như các bộ sưu tập riêng lẻ Chúng được lưu trữ nhanh chóng trong bộ nhớ của máy chủ ứng dụng, đảm bảo hiệu quả truy cập và quản lý dữ liệu Việc sử dụng các bộ sưu tập nhỏ giúp tối ưu hóa hiệu suất và tăng tính an toàn trong quá trình xử lý dữ liệu trên hệ thống.

- Các đối tƣợng nhúng khó khăn để tham chiếu hơn là các đối tƣợng mức cao

- Sẽ khó khăn hơn để có một cái nhìn mức hệ thống đối với các đối tƣợng nhúng

- Nếu dữ liệu được nhúng lớn, có thể đạt đến giới hạn kích thước của một đối tượng (16M)

- Nếu hiệu suất là quan trọng, hãy nhúng

Hệ thống Blog yêu cầu mỗi bài viết cần có bộ sưu tập riêng để tổ chức nội dung hiệu quả Tác giả bài viết có thể tạo bộ sưu tập riêng hoặc sử dụng địa chỉ email của họ như một trường trong bài viết để quản lý dễ dàng hơn Bình luận (Comments) cũng được tích hợp trực tiếp trong các bài đăng, giúp tăng tương tác và thảo luận trên hệ thống blog.

Cài đặt và sử dụng MongoDB

Để bắt đầu sử dụng MongoDB, truy cập trang chủ chính thức tại www.MongoDB.org để tải xuống phần mềm Sau khi tải về, giải nén file ZIP vào một thư mục trên ổ cứng như ổ D hoặc ổ C, ví dụ: D:\MongoDB Để lưu trữ dữ liệu của MongoDB, bạn cần tạo một thư mục mang tên "data".

Command Prompt và đƣa trỏ về thƣ mục bin của MongoDB Chạy mongod để khởi động server:

Lệnh –dbpath D;\MongoDB\data dùng để truy xuất đến thư mục lưu trữ database của MongoDB

Và ta có kết quả nhƣ sau:

MongoDB server đã được khởi động thành công và đang lắng nghe các kết nối trên cổng 27017 – cổng mặc định của MongoDB, cũng như cổng 28017 dành cho giao diện quản trị web.

3.13.2 Khởi tạo và truy vấn Database

Về cơ bản, so sánh CSDL quan hệ với MongoDB nhƣ sau:

Views, Functions, Procedures, ontraints, Triggers

Thay vì lưu trữ dữ liệu dưới dạng bảng và các tuple như trong các hệ quản trị cơ sở dữ liệu quan hệ, MongoDB sử dụng định dạng JSON để lưu trữ dữ liệu Trong MongoDB, dữ liệu được gọi là BSON – dạng nhị phân của JSON, giúp tối ưu hóa hiệu suất lưu trữ và truy vấn dữ liệu Sử dụng định dạng JSON/BSON mang lại khả năng linh hoạt cao hơn trong việc mở rộng và xử lý dữ liệu phi cấu trúc hay bán cấu trúc.

Chạy Command Prompt và đƣa trỏ về thƣ mục bin của MongoDB Gõ lệnh mongo tại cửa sổ Command Prompt.: >mongo

Khi kết nối thành công chúng ta đƣợc chuyển ngay tới 1 database mặc định là test Để khởi tạo database ta dùng lệnh:

Hiện tại, chưa có database tên mytDatabase trong hệ thống, nhưng nhờ cơ chế tự động cấp phát, MongoDB sẽ tự động tạo các file database khi có hành động tạo mới hoặc chỉnh sửa database Khi bạn thực hiện thao tác, Mongo sẽ bắt đầu tạo các file thật sự cho database đó Lúc này, bạn có thể mở thư mục dữ liệu và nhận thấy rằng vẫn không có file nào tên myDatabase, chứng tỏ quá trình tạo database đang diễn ra một cách tự động mà không ảnh hưởng đến dữ liệu hiện tại.

Khi bắt đầu thêm collection vào database, điều này đồng nghĩa với việc database chính thức được tạo ra Sau khi tạo, dữ liệu của database được lưu trữ trên ổ đĩa dưới dạng hai loại file chính: các file có đuôi x (với x là các số từ 0, 1, 2, 3…) và file có đuôi ns, đảm bảo lưu trữ toàn bộ dữ liệu và cấu trúc của database một cách an toàn và dễ quản lý.

- File „.x‟ là file chứa dữ liệu database có kích thước được định dạng sẵn và không đổi

Việc giảm tình trạng phân mảnh tập tin là rất cần thiết để tối ưu hiệu suất hệ thống Các tập tin được phân chia theo các mức kích thước như „.0‟ là 64MB, „.1‟ là 128MB, và tiếp tục tăng dần đến 2GB Sau khi đạt đến giới hạn 2GB, các tập tin mới sẽ tiếp tục được phân chia theo kích thước 2GB để đảm bảo quản lý dữ liệu hiệu quả và giảm thiểu phân mảnh gây ảnh hưởng đến tốc độ truy cập.

File ".ns" là một tập hợp các không gian tên, với mỗi collection và chỉ số của nó đều được tính là một không gian tên Nhờ đó, người dùng có thể tạo ra lên đến 12.000 collections trong một file ".ns" Nếu cần mở rộng giới hạn này, chúng ta có thể điều chỉnh tham số -nssize để tăng số lượng collection tối đa Độ lớn tối đa của một file ".ns" là 2GB, đảm bảo khả năng quản lý dữ liệu linh hoạt và hiệu quả.

- Xóa Database: dùng lệnh >db.dropDatabase() để xóa database hiện tại Để hiển thị các database ta dùng lệnh:

Trên màn hình Command Prompt ta dùng lệnh:

> db.createUser( user: “userName”, pwd: “password”, roles[

{role: “roleName”,db:”databaseName”}, {role: “roleName”,db:”databaseName”}

-userName: là tên tài khoản dùng để đăng nhập -password: là mật khẩu để đăng nhập

-roles: một mảng danh sách các quyền hạn của user -roleName: tên quyền hạn

-databaseName; tên databse đƣợc áp dụng cho tài khoản Bảng tên một số quyền hạn:

Read Chỉ cho phép đọc readWrite Đƣợc phép đọc và ghi dbAdmin Quyền admin userAdmin Đƣợc phép làm việc với các user dbOwner Gồm readWrite, dbAdmin, userAdmin

Quyền hạn trên các cụm clusterManager clusterMonitor hostManager Quyền hạn an toàn csdl

Backup Đƣợc phép backup dữ liệu

Restore Đƣợc phép remote dữ liệu

Để quản lý toàn bộ cơ sở dữ liệu MongoDB, các quyền hạn gồm có readAnyDatabase cho phép đọc tất cả các database, readWriteAnyDatabase cho phép nhập dữ liệu lên toàn bộ database, userAdminAnyDatabase để quản lý người dùng trên các database, và dbAdminAnyDatabase có quyền quản trị trên mọi database Sau khi khởi tạo tài khoản, người dùng cần khởi động lại server với các thuộc tính bảo mật để đảm bảo quyền hạn được cập nhật đầy đủ.

> mongod auth –dbpath D:\MongoDB\data

Muốn sử dụng MongoDB ta phải xác thực tài khoản:

Bây giờ ta có thể làm việc với MongoDB bằng các quyền hạn đã đƣợc cấp quan userName

Sau khi khởi tạo cơ sở dữ liệu, chúng ta thường nghĩ đến việc tạo một bảng, nhưng trong NoSQL, không có khái niệm bảng như trong Cơ sở dữ liệu quan hệ Thay vào đó, NoSQL sử dụng Collection, tương tự như Collection Framework trong Java, có nhiệm vụ lưu trữ và truy vấn dữ liệu Dữ liệu trong Collection được phân chia thành các Documents (tương tự như các tuples trong CSDL quan hệ), là các đối tượng dạng JSON chứa các key và value Dễ dàng truy xuất giá trị trong Document thông qua các key của nó Để tạo một Collection, ta sử dụng lệnh phù hợp trong hệ quản trị NoSQL.

Db là database hiện hành còn createCollection() là mã lệnh Tên collection phải đặt trong dấu “” hoặc „‟

Sau khi có Collection ta có thể làm việc với các dữ liệu bên trong nó

Fixed collection là một tập hợp có số phần tử cố định khi khai báo, đảm bảo lưu đúng thứ tự chèn vào mà không tự sắp xếp lại theo index hoặc yếu tố khác Điều này giúp thứ tự lưu trữ trên đĩa giống hệt thứ tự đã chèn, thuận tiện cho việc truy xuất dữ liệu theo thứ tự tự nhiên (natural order) Khi collection đạt tối đa phần tử, phần tử cũ nhất sẽ bị loại bỏ để nhường chỗ cho phần tử mới, phù hợp để sử dụng trong logging nhờ tốc độ truy xuất nhanh và không cần sắp xếp lại dữ liệu Capped Collection thích hợp để ghi nhật ký, giúp truy xuất dữ liệu nhanh chóng và đều theo thứ tự chèn ban đầu.

> db.createCollection("someCollection",{ capped: true, size:100000, max:100 }) size: là maximum size của capped collection tính bằng byte max: là số phần tử tối đa trong capped collection đó

- Xóa collection: để xóa collection ta dùng lệnh:

Trong đó collectionName là tên collection cần xóa

Tuy nhiên không nhất thiết phải sử dụng lệnh create để tạo một collection Nhờ cơ chế tự cấp phát của MongoDB bạn chỉ cần dùng lệnh

Lệnh `db.collectionName.insert({_id:1})` dùng để thêm dữ liệu mới vào collectionName trong MongoDB Ngay cả khi bạn chưa tạo sẵn collectionName, MongoDB sẽ tự động tạo collection khi dữ liệu lần đầu tiên được chèn vào Do đó, không xảy ra lỗi nếu bạn nhập sai tên collection, nhưng để kiểm tra chính xác các collection hiện có trong cơ sở dữ liệu, bạn nên sử dụng lệnh phù hợp để liệt kê các collection.

Lệnh sẽ trả về các collections có trong database hiện hành

Nền tảng của NoSQL là Javascript, nên các câu lệnh bạn thấy đều là cú pháp Javascript

> db.collectionName.insert({keys: values}) db: là database hiện hành collectionName: là tên collection cần thêm dữ liệu {keys/values}: là một document

Mặc dù không phải là RDBMS nhƣng MongoDB vẫn cung cấp các cơ chế để truy vấn dữ liệu Cụ thể nhƣ sau:

The `db.collectionName.find()` method in MongoDB is equivalent to the SQL SELECT statement, as well as the WHERE clause, allowing you to retrieve specific documents based on your query criteria It also enables specifying the fields to be returned, making it a flexible tool for data querying in MongoDB.

Ví dụ ta có một collection chứa các cuốn sách, mỗi phần tử gồm có tiêu đề và đánh giá của khán giả

> db.createCollection(“Sach”) > db.movies.insert({tieude:"Cánh Đồng Hoang", danhgia:9.2}) > db.movies.insert({tieude:"Tắt Đèn", rating:7.6})

> db.movies.insert({tieude:"Đôi Mắt", rating:7.8}) /*SELECT * FROM Sach WHERE tieude= 'Đôi Mắt'*/

> db.movies.find({title:"Đôi Mắt"}) {

"_id" : ObjectId("51556737c79ef506ca8fc47d"), "tieude" : "Đôi Mắt",

/*SELECT * FROM Sach WHERE danhgia>9*/

> db.movies.find({danhgia:{$gt:9}}) {

"_id" : ObjectId("515567f1c79ef506ca8fc47f"), "title" : "Cánh Đồng Hoang",

_id là một filed đƣợc MongoDB tự động sinh ra với kiểu dữ liệu là ObjectId ObjectId là một giá trị BSON 12-byte đƣợc cấu thành từ:

4-byte timestamp, 3-byte machine identifier, 2-byte process id

3-byte counter, starting with a random value

Ngoài ra bạn cũng có thể đặt giá trị cho _id Nó phải là duy nhất và có kiểu Int

> db.collection.update(query, update, options) > db.collection.update(

, , { upsert: , multi: , writeConcern:

- query là tiêu chí để cập nhật Cấu trúc query giống với document dùng cho phương thức find()

- update là các thay đổi để cập nhật dữ liệu mới

Chọn tùy chọn upsert là true sẽ tạo mới một document nếu không tìm thấy tài liệu phù hợp, còn chọn false sẽ không tạo mới document nào nếu không có kết quả phù hợp, với giá trị mặc định là false Điều này giúp kiểm soát việc cập nhật hoặc thêm dữ liệu mới trong quá trình xử lý dữ liệu.

Chọn trạng thái "multi: true" sẽ cập nhật tất cả các tài liệu tìm thấy, trong khi chọn "false" chỉ cập nhật tài liệu đầu tiên được tìm thấy Giá trị mặc định của tham số này là "false", giúp kiểm soát phạm vi cập nhật dữ liệu một cách chính xác theo yêu cầu.

- writeConcern: xác thực khi cập nhật Cấu trúc: writeConcern : {w : 1, j : true}

Khi thực hiện cập nhật không sử dụng options thì MongoDB sẽ lấy giá trị mặc định của chúng

Chuyển những người trên 18 tuổi thành “Trưởng Thành”

{tuoi : {$gt : 18}}, {$set : {ght : “Trưởng Thành”}}, {multi : true}

) Lưu ý: khi dùng „multi :true‟ thì phải sử dụng „$set : {}‟

-query là một tiêu chí để xác định các documents cần xóa Nếu muốn xóa tất cả documents thì để trống

Ví dụ : Xóa toàn bộ hàng tồn kho:

> db.hangtonkho.remove({}) Xóa toàn bộ “Thực Phẩm” tồn kho:

> db.hangtonkho.remove({loai : “Thực Phẩm”}) Nếu chỉ muốn xóa một bản ghi đầu tiên ta dùng:

> db.hangtonkho.remove({loai : “Thực Phẩm”},1)

Ngoài ra MongoDB còn cung cấp lệnh findAndModify() dùng để thực hiện các truy vấn trên theo một thứ tự nhất định.

Mối tương quan logic trong MongoDB

ORDER BY DESC sort({field : -1})

LIKE „Joe%‟ /^Joe/ age>33 AND agedb.HoaDon.find({"TongTien":{$gt:100000}})

- Đƣa ra tất cả hóa đơn của khách hàng có ID là „1‟

SQL Select HD.* from HoaDon HD Join ChiTietHoaDon CTHD on

HD.IdHoaDon = CTHD.IdHoaDon where IdKhachHang = 1 MongoDB >db.HoaDon.find({"IdKhachHang": 1},{})

- Tìm 10 người mua hàng nhiều nhất

SQL Select KH.IdKhachHang,KH.HoVaTen,SUM(HD.TongTien) from

KhachHang KH Join HoaDon HD on KH.IdKhachHang HD.IdKhachHang group by (KH.IdKhachHang,KH.HoVaTen) order by SUM(HD.TongTien) limit 10

MongoDB >var IdKH = db.HoaDon.aggregae([{

>db.KhachHang.find({"IdKhachhang" : {$in:IdKH}})

KẾT NỐI VỚI CƠ SỞ DỮ LIỆU MONGODB

Môi Trường NET

4.1.1 Chuẩn bị Để C# có thể giao tiếp và làm việc trên cơ sở dữ liệu MongoDB trước tiên phải cài đặt trình điều khiển MongoDB dành cho C#: MongoDB NET client Library Sau khi cài đặt ta thêm thƣ viện vào C#: using MongoDB.Bson; using MongoDB.Driver;

Sau khi đã chuẩn bị môi trường trên C# Tạo một project và làm việc với MongoDB

MongoServer client MongoServer.Create("MongoDB://userName:password@localhost:27017");

- userName: là tải khoản đăng nhập vào MongoDB

- password: là mật khẩu Kết nối đến server: var server = client.GetServer();

Tạo database, nếu đã tồn tại thì tự động ghép: var database = server.GetDatabase("QuanLyHocSinh");

Tạo collection, nếu đã tồn tại thì tự động ghép: var collection = database.GetCollection("sinhvien");

- là tên class đại diện cho document

- (sinhvien) là tên collection cần tạo

4.1.3 Class Document Để thao tác đƣợc với dữ liệu trong database ta phải tạo một class đại diện cho một document trong MongoDB

Cấu trúc của class: using MongoDB.Bson; using MongoDB.Driver; public class sinhvien { public ObjectId Id { get; set; } public string Name { get; set; } }

Trong đó ObjectId là id của document, name là một trường trong document Có thể tạo thêm nhiều trường tùy vào dữ liệu

4.1.4 Xuất nhập cơ sở dữ liệu

- Insert Để insert ta dùng lệnh: collectionName.insert(class)

Ví dụ: var collection = database.GetCollection("sinhvien"); collection.insert(new sinhvien(new ObjectId(),”Nguyễn”)); hoặc collection.insert(new sinhvien(1,”Nguyễn”));

- Find Để tìm kiếm ta dùng lệnh: var collection = database.GetCollection("sinhvien"); var query = Query.EQ(t => t.name.Equals(“Nguyễn”));

//tim kiếm theo tên // select * from sinhvien where name = N“Nguyễn” var data = collection.findOne(query);

// hiện thị tất cả dữ liệu //select * from sinhvien var data = collection.find();

- Update Để update ta cần chỉ rõ document nào cần update rồi dùng lệnh: collectionName.save();

Ví dụ: var collection = database.GetCollection("sinhvien"); var query = Query.EQ(t => t.name.Equals(“Nguyễn”));

//tim kiếm theo tên // select * from sinhvien where name = N“Nguyễn” var data = collection.findOne(query);

//cập nhật lại dữ liệu Data.name = “Quyền”;

//lưu vào database Collection.save(data);

- Delete Để xóa một document ta dùng lệnh sau collection.remove()

//xóa theo tên var query = Query.EQ(t => t.name.Equals(“Nguyễn”)); collection.remove(query);

Môi trường java

- Máy tính phải cài môi trường giả lập Java SE Development Kit từ trang chủ

- Dùng chương trình Eclipse IDE for Java EE Developers dùng để lập trình

- Sử dụng server TomCat Apache để chạy Web Application

- Thêm server Tomcat Apache vào Eclipse: Từ giao diện chính của Eclipse chọn

To add a new server, navigate to Window -> Show View -> Servers, then right-click on the Servers tab and select New -> Server In the New Server dialog, choose Apache -> Tomcat X and click Next Select the desired web applications and click Finish to complete the setup By default, the Tomcat server runs on port 8080, ensuring it's ready to deploy your web projects.

To create a new project in Eclipse, go to the main interface and select File -> New -> Other In the Select a wizard tab, find the Web category and choose Dynamic Web Project, then click Next Enter a name for your Web Project and select the server in the Target section to set up your project correctly.

Runtime chọn Finish để kết thúc Để làm việc với MongoDB trong môi trường java ta cần sử dụng thư viện:

To use the MongoDB Java library, start by creating a project and adding the MongoDB dependency After adding the library, import the necessary classes with `import com.MongoDB.*` To include the library in your project, right-click on the project, select Properties, then go to Java Build Path, and under the Libraries tab, click Add External JARs A dialog box will appear where you can locate and select the MongoDB library file, then click Open and OK to complete the process.

4.2.2 Kết nối đến server Để kết nối đến server ta dùng các lệnh sau:

MongoClientURI("MongoDB://userName:myPassword@localhost:27017/myData"); //kết nối đến server

MongoClient client = new MongoClient(uri);

DB db = client.getDB(uri.getDatabase());

//tạo collection DBCollection myCollection = db.getCollection("quyen");

- userName : là tài khoản đăng nhập

- myData là tên database cần kết nối

4.2.3 Xuất nhập cơ sở dữ liệu

- BasicObject: là một lớp đại diện cho document trong Java

Cấu trúc của nó giống với document

Tạo một document cho collection sinhvien:

BasicObject sinhvien = new BasicObject(); sinhvien.append(“ id”,1); sinhvien.append(“name”, “quyen”);

- Insert Để thêm doccument vào database ta dùng cấu trúc lệnh sau:

Ví dụ: Thêm sinh viên mới có _id= 1 và tên là „quyen‟

DBCollection myCollection = db.getCollection("quyen");

BasicObject sinhvien = new BasicObject(); sinhvien.append(“ id”,1); sinhvien.append(“name”, “quyen”); myCollection.insert(sinhvien);

- Update Để update ta dùng lệnh: myCollection.update()

Ví dụ: cập nhật tên sinh viên thành „binh‟

DBCollection myCollection = db.getCollection("quyen");

BasicObject sinhvien = new BasicObject(); sinhvien.append(“ id”,1); sinhvien.append(“name”, “quyen”);

BasicObject sinhvienUpdate = new BasicObject(); sinhvien.append(“name”, “binh”); mycollection.update(sinhvien,sinhvienUpdate);

Cấu trúc lệnh: myCollection.remove();

Ví dụ: Xóa sinh viên có _id = 1 BasicObject sinhvien = new BasicObject(); sinhvien.append(“ id”,1); myCollection.remove(sinhvien)

4.2.4 Mô hình lập trình MVC

Kiến trúc mô hình MVC

- Model: Đây là thành phần chứa các nghiệp vụ logic, phương thức xử lý, truy xuất database, đối tƣợng mô tả dữ liệu nhƣ các class, hàm xử lý

Giao diện người dùng đảm nhận việc hiển thị thông tin và tương tác, là nơi chứa các đối tượng như textbox, hình ảnh và các thành phần HTML khác Nó chính là tập hợp các form và thành phần thiết kế giúp người dùng dễ dàng tương tác và trải nghiệm hệ thống.

Controller là thành phần chịu trách nhiệm tiếp nhận và điều hướng các yêu cầu từ người dùng, đảm bảo gọi đúng các phương thức xử lý phù hợp Ví dụ, controller sẽ nhận request từ URL hoặc form và trực tiếp tương tác với Model để thực hiện các thao tác dữ liệu cần thiết Đây là phần trung tâm trong kiến trúc MVC, giúp điều phối luồng dữ liệu giữa người dùng và các thành phần xử lý phía backend.

Mô hình MVC trong ứng dụng WEB

3: Establish bean state, then place in session or request object

Biếu đồ cộng tác trong mô hình MVC

Khi người dùng tương tác với View và gửi yêu cầu, Controller sẽ tiếp nhận và điều hướng yêu cầu đó đến các phương thức xử lý trong Model Sau khi Model hoàn tất việc xử lý dữ liệu, View sẽ hiển thị kết quả đã được xử lý từ Model tới người dùng một cách rõ ràng và trực tiếp.

Phát triển phần mềm chuyên nghiệp giúp nâng cao chất lượng sản phẩm và đáp ứng nhanh chóng các yêu cầu của khách hàng Quá trình này cũng tăng cường khả năng làm việc nhóm và phân chia công việc hiệu quả, từ đó tối ưu hóa nguồn lực dự án Ngoài ra, việc phát triển ứng dụng nhanh chóng và dễ dàng nâng cấp đảm bảo tính linh hoạt và sự phù hợp liên tục với xu hướng công nghệ mới.

- Nhƣợc điểm: Với những dự án nhỏ MVC tạo ra sự cồng kềnh, tốn thời gian phát triển, tốc độ chậm do phải trung chuyển dữ liệu nhiều

4.2.5 Công cụ lập trình: Eclipse

Eclipse là phần mềm miễn phí được phát triển để hỗ trợ lập trình với các ứng dụng J2EE, giúp nhà phát triển tích hợp nhiều công cụ trong cùng một nền tảng mà không cần sử dụng phần mềm khác Eclipse SDK gồm ba thành phần chính là Platform, Java Development Toolkit (JDT) và Plug-in Development Environment (PDE), cung cấp môi trường phát triển năng động và linh hoạt cho các dự án phần mềm.

Eclipse được xem là môi trường phát triển Java mạnh mẽ với JDT tích hợp sẵn để hỗ trợ lập trình Java hiệu quả PDE (Plug-in Development Environment) giúp mở rộng khả năng của Eclipse bằng cách tích hợp các plug-in vào nền tảng Eclipse, tạo thành một hệ sinh thái phát triển phần mềm linh hoạt Nền tảng này cung cấp các dịch vụ cần thiết để tích hợp và quản lý các công cụ phát triển phần mềm dưới dạng plug-in, trong đó JDT còn được xem như một bộ plug-in biến Eclipse thành một Java IDE chất lượng cao.

MỘT SỐ THỬ NGHIỆM VỚI MONGODB

Thảo luận về hiệu năng của MongoDB và MS SQL Server 2008

Như đã đề cập, MongoDB – một nền tảng NoSQL đã được cải tiến để hoạt động nhanh hơn các cơ sở dữ liệu quan hệ truyền thống, mang lại hiệu suất cao hơn trong xử lý dữ liệu Tuy nhiên, để đánh giá chính xác hiệu năng của MongoDB, chúng tôi tiến hành thử nghiệm so sánh tốc độ giữa MongoDB và các hệ quản trị cơ sở dữ liệu quan hệ truyền thống, giúp đưa ra những nhận định khách quan về khả năng và ưu điểm của MongoDB trong thực tiễn.

Tất cả các thử nghiệm được thực hiện trên laptop Dell Inspiron N5110 với hệ điều hành Windows 7 64-bit, bộ vi xử lý 2.20GHz Phương pháp đo lường và phân tích hiệu suất sử dụng phiên bản 64-bit của MS SQL Server 2008 Express và MongoDB 2.6.5, nhằm đảm bảo tính chính xác và nhất quán của kết quả đánh giá.

Sử dụng cơ sở dữ liệu cho các ứng dụng trực tuyến giúp mở rộng khả năng hỗ trợ người dùng truy cập đồng thời Với lượng lớn người dùng truy cập trang web hoặc ứng dụng cùng lúc, cơ sở dữ liệu cần được thiết kế để xử lý nhiều yêu cầu đồng thời một cách hiệu quả Người dùng tương tác trực tiếp với dữ liệu thông qua các câu lệnh truy vấn, mỗi thao tác của họ đều liên quan đến việc truy xuất hoặc cập nhật các mảnh dữ liệu nhỏ trong hệ thống Điều này giúp tối ưu hóa hiệu suất và độ tin cậy của ứng dụng trực tuyến, đáp ứng nhu cầu mở rộng và phát triển nhanh chóng.

Mô hình dữ liệu thử nghiệm:

Trong quá trình thử nghiệm hệ thống, các câu truy vấn INSERT, SELECT và DELETE được thực hiện để kiểm tra hoạt động của cơ sở dữ liệu Trường ID trong cả hai cơ sở dữ liệu được tự động tăng để đảm bảo tính duy nhất và chính xác trong quá trình thao tác dữ liệu Trường "TheData" chứa chuỗi ký tự dài 1.000 ký tự, được tự động sinh ngẫu nhiên từ các số từ 1 đến một phạm vi nhất định, đảm bảo dữ liệu đầu vào phong phú và đa dạng để đánh giá hiệu suất hệ thống.

255 rồi chuyển sang ký tự với bảng mã asscii Trường "TheTime" là thời gian hiện tại

Trong quá trình thử nghiệm, do máy tính dùng để thử nghiệm là máy tính cá nhân nên kết quả phụ thuộc vào thời gian và tài nguyên sử dụng tại từng thời điểm, dẫn đến sự biến đổi trong kết quả Để đảm bảo tính chính xác, các thử nghiệm được thực hiện 100 lần, sau đó tính toán giá trị trung bình và độ lệch chuẩn để đưa ra kết quả đáng tin cậy Công thức tính giá trị trung bình và độ lệch chuẩn giúp phân tích dữ liệu một cách chính xác và khách quan.

Giá trị trung bình: Độ lệch chuẩn:

Quá trình thử nghiệm được thực hiện bằng cách thực hiện các thao tác insert, select, delete trên các tập dữ liệu có kích thước lần lượt là 100, 1.000, 5.000, 25.000, 50.000 và 100.000 bản ghi, với số lượt truy cập là 1 hoặc 5 client cùng truy cập một lúc Sử dụng ngôn ngữ lập trình C# để mô phỏng các thao tác này, coi thời gian biên dịch mã lệnh từ client đến cơ sở dữ liệu là như nhau Để mô phỏng các truy cập đồng thời của khách hàng, các tác vụ được thực hiện bằng cách sử dụng Threads, với số lượng Thread tối đa phụ thuộc vào tài nguyên của máy tính.

Mô hình thuật toán kiểm tra thời gian của client:

5.2 Phương pháp đánh giá kết quả

Trong quá trình thử nghiệm, máy tính cá nhân được sử dụng để thực hiện các phép đo, do đó kết quả phụ thuộc nhiều vào thời gian và tài nguyên hệ thống tại từng thời điểm, dẫn đến sự khác biệt giữa các lần đo Để nâng cao độ chính xác, chúng ta thực hiện 100 lần thử nghiệm và tính giá trị trung bình cũng như độ lệch chuẩn của các kết quả này, qua đó đánh giá mức độ phân tán của các lần đo Độ lệch chuẩn càng nhỏ cho thấy sự biến thiên giữa các lần đo càng hạn chế và kết quả thu được càng chính xác Công thức tính giá trị trung bình và độ lệch chuẩn được trình bày như sau: Giá trị trung bình là tổng các kết quả chia cho số lần đo, còn độ lệch chuẩn thể hiện mức độ phân tán của dữ liệu quanh giá trị trung bình.

5.3 Kết quả thử nghiệm 5.3.1 1 Client

Giá trị trung bình Độ lệch chuẩn Giá trị trung bình Độ lệch huẩn

Bảng thống kê insert Đồ thị so sánh insert

Dựa trên đồ thị, khi số lượng bản ghi dưới 1000, thời gian insert của cả hai cơ sở dữ liệu đều tương đối giống nhau Tuy nhiên, khi số lượng bản ghi tăng lên đến 10.000, MongoDB thể hiện khả năng insert nhanh hơn từ 15-20 lần so với các hệ thống khác, cho thấy hiệu suất vượt trội khi xử lý dữ liệu lớn.

Giá trị trung bình Độ lệch chuẩn Giá trị trung bình Độ lệch chuẩn

Bảng thống kê Select Đồ thị so sánh select

Dữ liệu từ biểu đồ cho thấy khi truy vấn dưới 1.000 bản ghi, MS SQL có tốc độ thực thi nhanh gấp đôi so với MongoDB, nhưng khi số lượng bản ghi vượt quá 10.000, MongoDB bắt đầu thể hiện ưu thế về tốc độ Đặc biệt, với hơn 100.000 bản ghi, MongoDB nhanh hơn MS SQL tới 12 lần, cho thấy khả năng mở rộng và hiệu suất đọc ổn định của MongoDB khi xử lý khối lượng dữ liệu lớn.

Giá trị trung bình Độ lệch chuẩn Giá trị trung bình Độ lệch chuẩn

Bảng Thống Kê Insert Đồ thị so sánh quá trình Insert

Dựa trên đồ thị, khi có 5 khách hàng cùng lúc chèn dữ liệu vào cơ sở dữ liệu, MongoDB thể hiện tốc độ xử lý vượt trội so với các hệ thống khác Ngoài ra, khi số lượng bản ghi tăng lên, khoảng cách về hiệu năng giữa MongoDB và các hệ thống còn lại càng trở nên rõ rệt, cho thấy khả năng mở rộng và xử lý dữ liệu lớn của MongoDB rất vượt trội.

Giá trị trung bình Độ lệch chuẩn Giá trị trung bình Độ lệch chuẩn

Bảng thống kê select Đồ thị so sánh select

Theo biểu đồ, khi chỉ chọn dưới 1.000 bản ghi, MS SQL có tốc độ nhanh gấp đôi so với MongoDB Tuy nhiên, với số lượng bản ghi trên 10.000, MongoDB bắt đầu vượt trội về tốc độ so với MS SQL Đặc biệt, khi số bản ghi vượt quá 100.000, tốc độ của MongoDB nhanh hơn MS SQL tới 12 lần, cho thấy khả năng mở rộng và hiệu suất vượt trội của MongoDB đối với dữ liệu lớn.

5.5 Thảo luận về hiệu năng của MongoDB và MS SQL Server 2008

Kết quả thử nghiệm thực tế cho thấy, với số lượng bản ghi nhỏ, việc sử dụng MongoDB không mang lại tăng hiệu suất rõ rệt so với các cơ sở dữ liệu quan hệ Tuy nhiên, khi số lượng bản ghi lên đến 50.000, MongoDB bắt đầu thể hiện thế mạnh về tốc độ xử lý dữ liệu Do đó, đối với các ứng dụng có lượng dữ liệu lớn và yêu cầu truy xuất cao, MongoDB giúp nâng cao hiệu suất hoạt động của hệ thống đáng kể.

Xây dựng BLOG với cơ sở dữ liệu lưu trữ MongoDB

Để đáp ứng nhu cầu trao đổi thông tin và thảo luận trên internet, website Blog trực tuyến được thành lập nhằm phục vụ đông đảo người dùng Các blog giúp người dùng chia sẻ kiến thức, trao đổi ý kiến một cách dễ dàng và thuận tiện Với sự phát triển của nền tảng số, blog trở thành công cụ không thể thiếu trong lĩnh vực giao lưu trực tuyến.

Trang web blog trực tuyến cho phép người dùng đăng tải nội dung, hình ảnh, trao đổi và bình luận các bài viết một cách dễ dàng Quản lý thông tin về các blog trên website được thực hiện thông qua một hệ cơ sở dữ liệu, trong đó lưu trữ các thành viên tham gia Các thành viên có khả năng đăng bài viết, phân chia theo các chủ đề hoặc để không thuộc bất kỳ chủ đề nào, phù hợp với nhu cầu sáng tạo và tổ chức nội dung Ngoài ra, họ cũng có thể đọc và bình luận các bài viết của người khác để thúc đẩy sự tương tác và trao đổi thông tin hiệu quả trên nền tảng blog trực tuyến.

6.2 Người dùng và chức năng

Website có 2 người dùng: Người quản trị và Thành viên Các quyền được mô tả như sơ đồ chi tiết phân rã chức năng bên dưới

6.3 Biểu đồ Use case 6.3.1 Chƣa đăng nhập

Use Case Khi Chƣa Đăng Nhập

Mô tả Cho phép người dùng đăng nhập vào hệ thống Điều kiện Người dùng đã đăng ký tài khoản

Khi người dùng nhập tên đăng nhập và mật khẩu vào form đăng nhập và nhấn nút "Login", hệ thống sẽ mã hóa mật khẩu theo chuẩn MD5 để đảm bảo bảo mật Sau đó, hệ thống kiểm tra sự tồn tại của tên đăng nhập và mật khẩu đã mã hóa trong cơ sở dữ liệu Cuối cùng, hệ thống hiển thị kết quả xác thực, thông báo đăng nhập thành công hay thất bại cho người dùng.

Kết quả - Nếu đăng nhập thành công: hiển thị tên người dùng

- Thất bại: Yêu cầu nhập lại tên và mật khẩu

Ngoại lệ Nếu chƣa nhập thông tin tài khoản và mật khẩu thì yêu cầu nhập lại thông tin

Mô tả CaseUser đăng nhập

Mô tả Cho phép người dùng đăng ký một tài khoản của hệ thống Điều kiện Luồng xử lý

Sau khi đã nhập đầy đủ thông tin người dùng nhấn „Đăng Ký‟ hệ thống sẽ nhận thông tin và đăng ký tài khoản mới

Kết quả - Đăng ký thành công: Chuyển sang trang đăng nhập

- Thất bại: Yêu cầu nhập lại thông tin đăng ký

Ngoại lệ - Tên user đã có nguwoif sử dụng, yêu cầu nhập tên mới

Mô tả CaseUser đăng ký

Mô tả Hiển thị nội dung của một bài đăng (topic) và các bình luận của bài đăng này Điều kiện Biết đƣợc url của bài đăng

Hệ thống lấy dữ liệu bài đăng và các bình luận từ cơ sở dữ liệu để hiển thị trên nền tảng Sau đó, hệ thống kiểm tra quyền truy cập của người dùng đang đăng nhập để đảm bảo họ có quyền xem hoặc thao tác trên nội dung Quá trình này giúp bảo mật và quản lý quyền truy cập một cách hiệu quả.

- Nếu là member: cho phép đăng trả lời

- Nếu là manager/ owner: cho phép đăng và xoá trả lời

- Nếu người dùng chưa đăng nhập hoặc chưa tham gia nhóm: chi cho xem nội dung

Kết quả - Người dùng xem được nội dung của một bài đăng cùng với các bình luận

Ngoại lệ - Bài đăng đã bị xóa

Mô tả CaseUser Xem bài đăng

Mô tả Cho phép người dùng tìm kiếm thông tin Điều kiện Luồng xử lý

Sau khi người dùng nhập từ khóa tìm kiếm và nhấn nút “Tìm kiếm”, hệ thống sẽ thực hiện quá trình tìm kiếm dựa trên tên (tìm kiếm gần đúng) và mô tả (description), giúp hiển thị các kết quả phù hợp một cách chính xác và nhanh chóng.

Kết quả - Hiển thị các bài đăng có thông tin tương tự Ngoại lệ - Không tìm thấy thông tin gì

Mô tả CaseUser Tìm Kiếm

Mô tả Cho phép người dùng đăng bình luận trong một bài đăng Điều kiện Người dùng phải đang đăng nhập

Sau khi người dùng nhập bình luận và nhấn “Bình Luận”, hệ thống sẽ lưu bình luận vào cơ sở dữ liệu và cập nhật giao diện web để hiển thị bình luận mới một cách tự động.

Kết quả Bình luận được lưu xuống cơ sở dữ liệu và giao diện được cập nhập mới lại

Luồng xử lý khác/ ngoại lệ

Khi người dùng chưa đăng nhập, việc đăng bình luận bị ngưng lại và một thông báo yêu cầu người dùng đăng nhập trước khi đăng bình luận

Mô tả Usecase đăng bình luận

Mô tả Tạo mới một bài đăng (topic) cho một group Điều kiện Người dùng cần đăng nhập vào hệ thống và đã tham gia group

Người dùng nhâp đầy đủ thông tin của topic vào form và nhấn

“Post”, hệ thống thực hiện lưu các thông tin sau xuống cơ sở dữ liệu: + Thông tin của Topic

+ Thêm thông tin của Topic mà người dùng vừa nhập vào nhóm Sau đó chuyển về trang chủ

Kết quả Trang chủ hiển thị tên của topic vừa mới tạo

Luồng xử lý khác/ ngoại lệ

Khi người dùng chưa tham gia nhóm, việc đăng topic bị ngưng lại và một thông báo yêu cầu người dùng tham gia vào nhóm trước khi đăng topic

Mô tả Usecase đăng topic

Chức năng cho phép người có quyền “manager” hoặc “owner” xoá các Topic dễ dàng và nhanh chóng sau khi đăng nhập hệ thống Để thực hiện việc xoá Topic, người dùng cần truy cập trang danh sách các Topic, chọn các checkbox tương ứng với các Topic cần xoá, và sau đó nhấn nút xoá Điều kiện để thực hiện thao tác này là người dùng đã đăng nhập với quyền “manager” hoặc “owner”, đảm bảo tính bảo mật và phân quyền trong hệ thống quản lý nội dung.

“Delete” được hiển thị lên cho phép người dùng xoá các Topic đã chọn

Khi lệnh xoá Topic đƣợc thực hiện, các Topic đƣợc chọn sẽ đƣợc xoá lần lượt dưới cơ sở dữ liệu như sau:

+ Xoá Topic có ID tương ứng

Sau đó thông báo xoá thành công sẽ đƣợc hiển thị

Kết quả Xoá thành công các Topic đƣợc chọn Trên màn hình các nhóm đƣợc chọn bị mất đi

Luồng xử lý khác/ ngoại lệ

Mô tả Usecase xoá Topic

6.5 Biểu đồ trình tự 6.5.1 Quản trị người d ng

Biểu đồ trình tự của chức năng Đăng nhập

Biểu đồ trình tự của chức năng Đăng ký

Biểu đồ trình tự của chức năng Đăng bài

Biểu đồ trình tự của chức năng Xóa bài

Biểu đồ trình tự của chức năng Cập nhật bài viết

Biểu đồ trình tự của chức năng Bình luận

Biểu đồ trình tự của chức năng xóa Bình luận

STT T n màn hình Mô tả

1 Đăng Nhập Dùng để User đăng nhập vào hệ thống

2 Đăng Ký Dùng để đăng ký User

3 Home Danh sách các bài viết

4 Edit Thêm, sửa, xóa các bài viết

5 Blog Hiển thị các bài viết lên trang Blog

6 Bài Đăng Hiển thị bài đăng để User đọc và bình luận

Ngày đăng: 21/08/2023, 00:24

HÌNH ẢNH LIÊN QUAN

Bảng thống kê insert - Tìm hiểu về mongodb và thử nghiệm
Bảng th ống kê insert (Trang 51)
Đồ thị so sánh insert - Tìm hiểu về mongodb và thử nghiệm
th ị so sánh insert (Trang 51)
Bảng thống kê Select - Tìm hiểu về mongodb và thử nghiệm
Bảng th ống kê Select (Trang 52)
Đồ thị so sánh select - Tìm hiểu về mongodb và thử nghiệm
th ị so sánh select (Trang 52)
Bảng Thống Kê Insert - Tìm hiểu về mongodb và thử nghiệm
ng Thống Kê Insert (Trang 53)
Đồ thị so sánh quá trình Insert - Tìm hiểu về mongodb và thử nghiệm
th ị so sánh quá trình Insert (Trang 53)
Đồ thị so sánh select - Tìm hiểu về mongodb và thử nghiệm
th ị so sánh select (Trang 54)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w