DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT Collection Bộ sưu tập/tập hợp trong cơ sở dữ liệu MongoDB CSDL Viết tắt của cụm từ “cơ sở dữ liệu” Document Văn bản có cấu trúc tựa JSON trong cơ s
Trang 1LỜI CẢM ƠN
Trước hết, tôi xin chân thành cảm ơn thầy PGS.TS Đặng Trần Khánh - người trực tiếp hướng dẫn khoa học - đã tận tình chỉ bảo, giúp đỡ và tạo mọi điều kiện thuận lợi cho tôi trong suốt thời gian thực hiện đề tài
Tôi cũng xin gửi lời cảm ơn chân thành đến quý thầy, cô trong khoa Công nghệ Thông tin Trường Đại học Lạc Hồng đã giúp tôi bổ sung thêm được những kiến thức
vô cùng quan trọng, bổ ích và những kinh nghiệm quý báu trong thời gian tham gia khóa học
Cuối cùng tôi xin bày tỏ lòng biết ơn sâu sắc những người thân, bạn bè, đồng nghiệp đã luôn luôn chia sẻ, hỗ trợ, động viên trong thời gian tôi thực hiện đề tài
Do thời gian xây dựng luận văn có hạn và còn thiếu kinh nghiệm thực tế nên dù
đã cố gắng hết khả năng để hoàn thành đề tài nhưng chắc chắn sẽ không tránh khỏi những thiếu sót Tôi rất mong nhận được sự động viên và góp ý của quý thầy, cô và bạn bè, đồng nghiệp để sớm hoàn thiện đề tài nhằm ứng dụng rộng rãi trong thực tiễn Xin chân thành cảm ơn!
Trang 2LỜI CAM ĐOAN
Tôi xin cam đoan luận văn thạc sĩ công nghệ thông tin: “Nâng cao hiệu quả truy vấn dữ liệu dựa trên chỉ mục trong hệ quản trị CSDL MongoDB” là kết quả của quá trình học tập, nghiên cứu khoa học độc lập, nghiêm túc
Các số liệu trong luận văn là trung thực, có nguồn gốc rõ ràng, được trích dẫn và
có tính kế thừa, phát triển từ các tài liệu, tạp chí, các công trình nghiên cứu đã được công bố, các website, …
Các phương pháp nêu trong luận văn được rút ra từ những cơ sở lý luận và quá trình nghiên cứu tìm hiểu của tác giả
Đồng Nai, tháng 10 năm 2016
Tác giả luận văn
Đỗ Trọng Nghĩa
Trang 3MỤC LỤC
LỜI CẢM ƠN i
LỜI CAM ĐOAN ii
MỤC LỤC iii
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT vii
DANH MỤC BẢNG viii
DANH MỤC HÌNH ẢNH ix
DANH MỤC BIỂU ĐỒ xi
Chương 1 – Giới thiệu 1
1.1 Tổng quan 1
1.1.1 Cơ sở dữ liệu lớn và NoSQL 1
1.1.2 Hệ CSDL MongoDB 2
1.2 Các công trình nghiên cứu liên quan trong và ngoài nước 3
1.2.1 Tình hình nghiên cứu trong nước 3
1.2.2 Tình hình nghiên cứu trên thế giới 3
1.2.3 Nhận xét 3
1.3 Mục tiêu của luận văn 3
1.4 Phạm vi, đối tượng và phương pháp nghiên cứu 4
1.4.1 Phạm vi 4
1.4.2 Đối tượng 4
1.4.3 Phương pháp 4
Chương 2 – Chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB 6
2.1 Khái quát về hệ CSDL MongoDB 6
2.1.1 Cơ sở dữ liệu 7
Trang 42.1.2 Collection 7
2.1.3 Document 7
2.1.4 So sánh một số khái niệm trong CSDL quan hệ và MongoDB 8
2.2 Chỉ mục 8
2.3 Chỉ mục văn bản 9
2.3.1 Giới thiệu 9
2.3.2 Tạo lập chỉ mục văn bản 9
2.3.3 Xóa chỉ mục văn bản 10
2.3.4 Trọng số 10
2.3.5 Không phân biệt chữ hoa/thường và dấu phụ 11
2.3.6 Phân tách các thẻ 11
2.3.7 Phần tử chỉ mục 11
2.3.8 Các ngôn ngữ được hỗ trợ và stop words 11
2.4 Tìm kiếm văn bản 13
2.4.1 Tổng quan 13
2.4.2 Chỉ mục văn bản 13
2.4.3 Toán tử $text 13
2.4.4 Tìm kiếm cụm từ 15
2.4.5 Loại bỏ từ 15
2.4.5 Sắp xếp 16
2.5 Một số hạn chế của chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB 16
Chương 3 – Cải tiến chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB 18
3.1 Một số khái niệm 18
3.1.1 Stop words 18
Trang 53.1.2 Stemming 18
3.2 Mã nguồn, môi trường và công cụ nghiên cứu 19
3.2.1 Bản quyền và địa chỉ tải mã nguồn MongoDB 19
3.2.2 Cấu trúc tổng thể thư mục mã nguồn MongoDB 20
3.2.3 Môi trường và công cụ nghiên cứu 21
3.3 Cơ chế xây dựng chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB 23
3.3.1 Cơ chế xây dựng chỉ mục 23
3.3.2 Cơ chế tìm kiếm 25
3.4 Vai trò của stop words và stemming đối với quá trình xây dựng chỉ mục văn bản và tìm kiếm toàn văn 27
3.4.1 Vai trò của stop words 27
3.4.2 Vai trò của stemming 28
3.5 Đề xuất giải pháp cải tiến 28
3.6 Hiện thực hóa giải pháp 29
3.6.1 Stop words ngôn ngữ tiếng Việt 29
3.6.2 Đăng ký ngôn ngữ tiếng Việt vào MongoDB 31
3.6.3 Loại bỏ kỹ thuật stemming 31
3.6.4 Tóm lược 32
3.7 Tái xây dựng hệ CSDL MongoDB 33
3.7.1 Chuẩn bị môi trường 33
3.7.2 Thực hiện 33
3.7.3 Kiểm tra kết nối 34
Chương 4 – Thực nghiệm 36
4.1 Chuẩn bị môi trường thực nghiệm 36
4.2 Các tình huống thực nghiệm 37
Trang 64.2.1 Hỗ trợ ngôn ngữ tiếng Việt 37
4.2.2 Tạo chỉ mục 39
4.2.3 Tìm kiếm 42
4.3 Kết luận thực nghiệm 52
Chương 5 – Chương trình Demo 53
5.1 Giới thiệu chương trình demo 53
5.1.1 Mục đích 53
5.1.2 Ý nghĩa thực tiễn của chương trình demo 53
5.2 Nội dung chương trình demo 54
Chương 6 – Tổng kết 62
6.1 Ý nghĩa và đóng góp của luận văn 62
6.2 Thuận lợi và khó khăn trong quá trình xây dựng luận văn 62
6.2.1 Thuận lợi 62
6.2.2 Khó khăn 62
6.3 Một số hạn chế và hướng phát triển luận văn 62
6.3.1 Hạn chế 62
6.3.2 Hướng phát triển luận văn 62
6.4 Kết luận 63
Tài liệu tham khảo 1
Phụ lục 1
Trang 7DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
Collection Bộ sưu tập/tập hợp trong cơ sở dữ liệu MongoDB
CSDL Viết tắt của cụm từ “cơ sở dữ liệu”
Document Văn bản có cấu trúc tựa JSON trong cơ sở dữ liệu
MongoDB
Stemming Kỹ thuật tìm kiếm từ gốc của một từ trong một ngôn ngữ Stop words Danh sách các từ phổ biến trong một ngôn ngữ
Trang 8DANH MỤC BẢNG
Bảng 2.1: So sánh sự tương quan giữa một số đối tượng trong CSDL quan hệ và
MongoDB 8
Bảng 2.2: Các ngôn ngữ được hỗ trợ trong quá trình tạo chỉ mục và tìm kiếm văn bản trong MongoDB 12
Bảng 2.3: Các tham số của toán tử $text 14
Bảng 3.1: Stop words trong ngôn ngữ tiếng Việt 29
Bảng 3.2: Tóm tắt các sửa đổi cải tiến thực hiện trên mã nguồn MongoDB 32
Bảng 4.1: Kết quả thử nghiệm tạo chỉ mục văn bản trong MongoDB 39
Bảng 4.2: Stop words của ngôn ngữ tiếng Anh sử dụng trong MongoDB 43
Bảng 4.3: Kết quả thử nghiệm tìm kiếm toàn văn trong MongoDB trong trường hợp chỉ mục được tạo với ngôn ngữ tiếng Anh 45
Bảng 4.4: Kết quả thử nghiệm tìm kiếm toàn văn trong MongoDB trong trường hợp chỉ mục được tạo với ngôn ngữ tiếng Việt 48
Bảng 5.1: Ý nghĩa các vùng làm việc và chức năng của chương trình demo 55
Trang 9DANH MỤC HÌNH ẢNH
Hình 2.1: Mô hình cơ sở dữ liệu trong MongoDB 7
Hình 3.1: Tổng thể thư mục mã nguồn MongoDB 20
Hình 3.2: Mã nguồn MongoDB được mở trên MS Visual Studio 2015 21
Hình 3.3: Công cụ Mongo Shell 21
Hình 3.4: Phần mềm RoboMongo 22
Hình 3.5: Phần mềm MongoBooster 22
Hình 3.6: Cơ chế tạo chỉ mục trong MongoDB 24
Hình 3.7: Mô phỏng quá trình tạo chỉ mục 25
Hình 3.8: Cơ chế tìm kiếm trong MongoDB 26
Hình 3.9: Mô phỏng quá trình tìm kiếm 27
Hình 3.10: Tái xây dựng thành công MongoDB 34
Hình 3.11: Kết nối thành công tới MongoDB 35
Hình 3.12: Kết nối không thành công tới MongoDB 35
Hình 4.1: Tạo chỉ mục văn bản thành công với ngôn ngữ tiếng Việt trong phiên bản cải tiến 37
Hình 4.2: Phiên bản gốc không hỗ trợ tạo chỉ mục với ngôn ngữ tiếng Việt 38
Hình 4.3: Tìm kiếm văn bản với ngôn ngữ tiếng Việt trong phiên bản cải tiến 38 Hình 4.4: Tìm kiếm không thành công với ngôn ngữ tiếng Việt trong phiên bản gốc 39
Hình 5.1: Giao diện chính của chương trình demo 54
Hình 5.2: Chưa hoặc không nhập nội dung tìm kiếm 56
Hình 5.3: Tìm kiếm với ngôn ngữ tiếng Việt 57
Hình 5.4: Tìm kiếm với ngôn ngữ tiếng Anh 58
Hình 5.5: Tìm kiếm với các tùy chọn 59
Trang 10Hình 5.6: Stop words ngôn ngữ tiếng Việt 59
Hình 5.7: Stop words ngôn ngữ tiếng Anh 60
Hình 5.8: Xem nội dung tập tin video 60
Hình 5.9: Xem nội dung tập tin hình ảnh 61
Trang 11DANH MỤC BIỂU ĐỒ
Biểu đồ 4.1: So sánh thời gian tạo chỉ mục giữa hai phiên bản 41Biểu đồ 4.2: Thời gian tạo chỉ mục trung bình giữa hai phiên bản 41Biểu đồ 4.3: So sánh kích thước chỉ mục văn bản giữa hai phiên bản 42Biểu đồ 4.4: So sánh thời gian tìm kiếm với ngôn ngữ tiếng Anh và thời gian tìm kiếm với ngôn ngữ tiếng Việt khi chỉ mục được tạo với ngôn ngữ tiếng Anh 46Biểu đồ 4.5: Thời gian tìm kiếm trung bình với ngôn ngữ tiếng Anh và ngôn ngữ tiếng Việt khi chỉ mục được tạo với ngôn ngữ tiếng Anh 47Biểu đồ 4.6: Số lượng kết quả trả về khi tìm kiếm với ngôn ngữ tiếng Anh và tìm kiếm với ngôn ngữ tiếng Việt khi chỉ mục được tạo với ngôn ngữ tiếng Anh 47Biểu đồ 4.7: So sánh thời gian tìm kiếm với ngôn ngữ tiếng Anh và thời gian tìm kiếm với ngôn ngữ tiếng Việt khi chỉ mục được tạo với ngôn ngữ tiếng Việt 50Biểu đổ 4.8: Thời gian tìm kiếm trung bình với ngôn ngữ tiếng Anh và ngôn ngữ tiếng Việt khi chỉ mục được tạo với ngôn ngữ tiếng Việt 50Biểu đồ 4.9: Số lượng kết quả trả về khi tìm kiếm với ngôn ngữ tiếng Anh và tìm kiếm với ngôn ngữ tiếng Việt khi chỉ mục được tạo với ngôn ngữ tiếng Việt 51
Trang 12Chương 1 – Giới thiệu
1.1 Tổng quan
1.1.1 Cơ sở dữ liệu lớn và NoSQL
Trong những năm qua, sự phát triển của Internet và công nghệ hiện đại đã kéo theo sự ra đời của hàng loại các định dạng dữ liệu mới, đặc biệt là các loại dữ liệu đa phương tiện như âm thanh, hình ảnh chất lượng cao và các loại dữ liệu phi cấu trúc như dữ liệu thông tin vị trí địa lý – GIS, dữ liệu phiên làm việc người dùng, dữ liệu thông tin hoạt động của thiết bị phần cứng, dữ liệu động cơ máy bay, dữ liệu cảm biến, Cùng với đó là sự tương tác với hàng trăm triệu thậm chí hàng tỷ người dùng Điều này dẫn đến việc các máy chủ phải thực hiện một lượng vô cùng lớn các lệnh đọc ghi tại cùng một thời điểm, đồng thời phải lưu trữ lượng dữ liệu lên đến hàng trăm Terabyte mỗi ngày Những hệ thống máy chủ sử dụng CSDL quan hệ không còn đáp ứng được những đòi hỏi này do những hạn chế của chúng vì vậy cần phải có một
hệ CSDL khác phù hợp hơn và đó là lý do NoSQL ra đời
NoSQL là thuật ngữ chung cho các hệ CSDL không sử dụng mô hình dữ liệu quan hệ Nó có thể được hiểu là “No Relation SQL” (SQL không quan hệ) hoặc phổ dụng hơn là “Not Only SQL” (không chỉ là SQL) Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ CSDL mới: một thế hệ CSDL không ràng buộc, phân tán, nguồn
mở, khả năng mở rộng theo chiều ngang, có thể lưu trữ, xử lý từ một lượng rất nhỏ cho tới hàng petabytes dữ liệu trong hệ thống có độ chịu tải, chịu lỗi cao với những đòi hỏi về tài nguyên phần cứng thấp Một số đặc điểm nhận dạng cho thế hệ CSDL mới này bao gồm: schema-free, hỗ trợ mở rộng dễ dàng, API đơn giản, nhất quán cuối (eventual consistency), không giới hạn không gian dữ liệu, Tính đến thời điểm hiện tại có khoảng 150 loại cơ sở dữ liệu NoSql chia làm các loại: Wide Column Store/Column Families, Key-Value Store/Tuple store, Document Store, Graph Database Tuy cùng mang những đặc điểm chung của NoSQL nhưng mỗi CSDL NoSQL cũng có những đặc điểm riêng, và vì thế thường được dùng cho những dự án khác nhau
Trang 131.1.2 Hệ CSDL MongoDB
Một trong số những hệ CSDL NoSQL phổ biến nhất hiện nay là MongoDB [9] MongoDB được viết bằng ngôn ngữ C++, có khả năng mở rộng tốt, hiệu suất cao, mã nguồn mở và hướng văn bản (Document Store), thích hợp cho các ứng dụng tầm trung trở lên Nếu tỉ lệ lượng dữ liệu ghi vào CSDL của ứng dụng lớn hơn lượng đọc thì đây càng là lựa chọn hợp lý Hệ CSDL MongoDB được sử dụng rất rộng rãi trên thế giới với các tập đoàn, công ty tiêu biểu như: Google, Facebook, Adobe, SourceForce, Ở Việt Nam hiện nay, cùng với xu hướng phát triển của Big data và NoSQL, một
số doanh nghiệp cũng đã sử dụng MongoDB cho việc lưu trữ và thao tác dữ liệu của
mình như FPT, VTC, VinaGame,
Giống như hầu hết các hệ CSDL khác, MongoDB cũng sử dụng chỉ mục để tăng hiệu quả truy vấn Chỉ mục giữ vai trò cực kỳ quan trọng trong các thao tác đọc, ghi của các hệ CSDL nói chung và hệ CSDL MongoDB nói riêng Nếu không dùng chỉ mục, khi tìm một đối tượng trong một tập hợp thì MongoDB phải duyệt qua tất cả các đối tượng trong tập hợp đó cho đến khi tìm thấy đối tượng thỏa mãn yêu cầu, việc làm này thường mất rất nhiều thời gian, đặc biệt là với tập hợp lớn Ngược lại, nếu sử dụng chỉ mục thì MongoDB sẽ chỉ cần tìm kiếm trên chỉ mục (dựa trên một số thuật toán tìm kiếm) để xác định đối tượng cần tìm Như vậy, chỉ mục là một trong những yếu tố quan trọng hàng đầu ảnh hưởng đến hiệu suất của MongoDB Ngay từ những phiên bản đầu tiên, MongoDB đã hỗ trợ nhiều loại chỉ mục khác nhau như Default (_id), Single Field, Compound, MultiKey, GeoSpatial, Hash Đến phiên bản 2.6, MongoDB chính thức đưa thêm chỉ mục văn bản (Text Index) và tìm kiếm toàn văn
(Full Text Search) vào sản phẩm của mình
Tìm kiếm toàn văn là kỹ thuật tìm kiếm vô cùng linh hoạt, hiệu quả và nhanh chóng, được hỗ trợ trong hầu hết các CSDL Việc tìm kiếm được thực hiện chủ yếu dựa trên chỉ mục văn bản của các văn bản cần tìm (bản chất là tập chỉ mục nghịch đảo – Inverted Index) Đối với hệ CSDL xử lý dữ liệu lớn như MongoDB thì việc xây
dựng chỉ mục văn bản và tìm kiếm toàn văn lại càng đóng vai trò quan trọng hơn
Hiện nay, tại thời điểm xây dựng luận văn, MongoDB phát hành phiên bản 3.2 mới chỉ hỗ trợ 15 ngôn ngữ trong việc tạo chỉ mục văn bản mà không có ngôn ngữ tiếng Việt trong khi cũng không hỗ trợ các trình cắm giúp người dùng có thể tự bổ
Trang 14sung do đó tìm kiếm toàn văn dựa trên chỉ mục văn bản với ngôn ngữ mặc định (tiếng Anh) chắc chắn sẽ có những hạn chế đối với dữ liệu văn bản tiếng Việt Đây cũng là bài toán mà luận văn đặt trọng tâm nghiên cứu
1.2 Các công trình nghiên cứu liên quan trong và ngoài nước
1.2.1 Tình hình nghiên cứu trong nước
Theo tìm hiểu của tác giả, việc sử dụng hệ CSDL MongoDB ở Việt Nam còn sơ khai và phần lớn đều dừng lại ở mức ứng dụng, nghĩa là sử dụng hệ CSDL này với các thành phần đã được xây dựng sẵn, mà chưa có nhiều nghiên cứu ứng dụng liên quan đến kiến trúc cũng như cải tiến mã nguồn của nó
1.2.2 Tình hình nghiên cứu trên thế giới
Trên thế giới hiện nay, ngoại trừ các nhà phát triển MongoDB, tác giả cũng chưa tìm thấy nhiều công trình hay tài liệu liên quan đến việc cải tiến MongoDB ở mức thấp Đối với vấn đề hỗ trợ ngôn ngữ trong tạo lập chỉ mục và tìm kiếm toàn văn, do MongoDB đã hỗ trợ tới 15 ngôn ngữ phổ biến nên các nghiên cứu về vấn đề này dường như cũng không được quan tâm
1.2.3 Nhận xét
Ra đời năm 2007, hệ CSDL MongoDB còn khá non trẻ so với các hệ CSDL khác đặc biệt là các hệ CSDL quan hệ Việc hoàn thiện một hệ sinh thái CSDL nói chung cần rất nhiều thời gian, qua nhiều phiên bản, nhiều nghiên cứu và thử nghiệm Với những ưu điểm vượt trội trong truy vấn và xử lý dữ liệu lớn, MongoDB ngày càng được sử dụng rộng rãi cả trong và ngoài nước Tuy nhiên, trong một số lĩnh vực cụ thể, để ứng dụng MongoDB đạt được hiệu quả hơn nữa thì cần có những cải tiến nhất định Một trong số đó được luận văn lựa chọn nghiên cứu là vấn đề hỗ trợ ngôn ngữ tiếng Việt trong tạo lập chỉ mục và tìm kiếm toàn văn
1.3 Mục tiêu của luận văn
Như đã giới thiệu, một trong những hạn chế của MongoDB là chưa hỗ trợ ngôn ngữ tiếng Việt trong xây dựng chỉ mục văn bản và tìm kiếm toàn văn Để giải quyết vấn đề này đồng thời nâng cao hiệu quả tìm kiếm trong MongoDB đối với ngôn ngữ tiếng Việt, luận văn hướng đến các mục tiêu sau đây:
Trang 15- Tìm hiểu cơ chế lập chỉ mục văn bản và tìm kiếm trong MongoDB
- Đề xuất giải pháp cài đặt ngôn ngữ tiếng Việt trong MongoDB để tăng hiệu quả tạo chỉ mục văn bản và tìm kiếm toàn văn
- Cài đặt giải pháp, thử nghiệm và đánh giá kết quả
1.4 Phạm vi, đối tượng và phương pháp nghiên cứu
Để đạt được mục tiêu đặt ra, luận văn xác định rõ phạm vi, đối tượng cũng như phương pháp nghiên cứu
1.4.1 Phạm vi
Phạm vi nghiên cứu của luận văn là hệ CSDL MongoDB, một trong những hệ CSDL NoSQL được sử dụng phổ biến nhất hiện nay Phiên bản MongoDB và mã nguồn sử dụng trong luận văn là phiên bản 3.2
1.4.2 Đối tượng
Đối tượng nghiên cứu chủ yếu của luận văn là chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB Hướng tới mục tiêu đặt ra, luận văn đi sâu nghiên cứu vai trò của ngôn ngữ đối với chỉ mục văn bản và ảnh hưởng của nó đến kết quả tìm kiếm trong MongoDB từ đó đề xuất việc cài đặt một ngôn ngữ mới để giải quyết bài toán thực tiễn
1.4.3 Phương pháp
Các phương pháp nghiên cứu được sử dụng để thực hiện đề tài:
- Nghiên cứu lý thuyết về chỉ mục văn bản và tìm kiếm toàn văn trong hệ CSDL MongoDB với vai trò là người dùng cuối tại hệ thống trợ giúp trên trang chủ MongoDB [7]
- Thông qua trang chủ MongoDB và tham khảo cộng đồng Mongo, tìm hiểu kiến trúc từ tổng thể tới chi tiết từ đó xác định được vị trí, vai trò và cơ chế hoạt động của chỉ mục văn bản cũng như mối tương quan giữa nó với các thành phần khác trong
hệ thống đồng thời cũng tìm hiểu cơ chế tìm kiếm văn bản dựa vào chỉ mục trong hệ thống MongoDB
Trang 16- Tham khảo mã nguồn MongoDB [6] để tìm hiểu phương thức mà MongoDB xây dựng chỉ mục văn bản và tìm kiếm toàn văn cũng như vai trò, tầm ảnh hưởng của ngôn ngữ đối với chỉ mục văn bản và tìm kiếm toàn văn
- Xây dựng các thành phần cải tiến liên quan để nhúng vào mã nguồn MongoDB trên cơ sở lý thuyết đã nghiên cứu Tái xây dựng hệ CSDL MongoDB và thử nghiệm
để đánh giá kết quả đạt được nhằm ứng dụng trong thực tiễn
Trang 17Chương 2 – Chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB
2.1 Khái quát về hệ CSDL MongoDB
Hệ CSDL MongoDB, được phát triển bởi tập đoàn MongoDB, là một hệ thống CSDL miễn phí, nguồn mở, đa nền tảng và hướng văn bản Là một trong những hệ CSDL NoSQL, MongoDB không sử dụng các cấu trúc dữ liệu dạng bảng quan hệ như truyền thống, thay vào đó, nó sử dụng cấu trúc văn bản tựa JSON với lược đồ động (gọi là BSON) giúp tăng hiệu suất, tương tác nhanh và khả năng mở rộng linh hoạt
Một số đặc trưng cơ bản của hệ CSDL MongoDB:
- Mô hình dữ liệu hướng văn bản với lược đồ động
- Hỗ trợ chỉ mục khá đầy đủ, linh hoạt và truy vấn đa dạng
- Cơ chế Auto-Sharding cho phép phân đoạn dữ liệu theo chiều dọc
- Cơ chế sao chép hỗ trợ tính sẵn sàng cao
- Hỗ trợ tìm kiếm toàn văn
- Bảo mật tốt
- Nền tảng các hàm gộp và MapReduce
- Lưu trữ dữ liệu lớn với GridFS
Hệ CSDL MongoDB quản lý các cơ sở dữ liệu và hoạt động trên các khái niệm collection và document
Hình 2.1 giải thích vị trí và mối quan hệ giữa các thành phần database, collection
và document trong hệ CSDL MongoDB
Trang 18{
name: Tuấn , age: 20, email: tuanvu@gmail.com }
{
name: Hạnh , age: 21, email: hanhle@gmail.com }
{
name: Hùng , age: 18, email: hungngo@gmail.com }
Key-value pair Document Document Document
Hình 2.1: Mô hình cơ sở dữ liệu trong MongoDB
tự nhau hoặc có quan hệ với nhau
2.1.3 Document
Một document trong MongoDB là một tập các cặp khóa – giá trị (key – value) Document có cấu trúc động, nghĩa là, các document khác nhau trong cùng một collection có thể có các trường khác nhau và thậm chí các trường cùng tên có thể có kiểu dữ liệu khác nhau
Trang 192.1.4 So sánh một số khái niệm trong CSDL quan hệ và MongoDB
Các đối tượng làm việc trong hệ CSDL quan hệ đã khá quen thuộc với người dùng CSDL Để giải thích rõ hơn về vị trí, vai trò và ý nghĩa của các đối tượng làm việc trong MongoDB, luận văn đưa ra một số so sánh tương quan giữa các đối tượng này với các đối tượng làm việc trong CSDL quan hệ được thể hiện thông qua bảng 2.1
Bảng 2.1: So sánh sự tương quan giữa một số đối tượng trong CSDL quan hệ và
by mongodb itself)
2.2 Chỉ mục
Chỉ mục hỗ trợ việc phân giải các truy vấn hiệu quả hơn Nếu không có chỉ mục, MongoDB phải quét qua mọi document của collection để chọn các document mà kết nối với lệnh truy vấn Việc quét này có thể không hiệu quả và yêu cầu MongoDB xử
lý một số lượng lớn dữ liệu
Chỉ mục là các cấu trúc dữ liệu đặc biệt, lưu giữ một phần nhỏ dữ liệu của collection, giúp việc duyệt và tìm kiếm trên collection dễ dàng hơn Trong MongoDB, chỉ mục được lưu trữ với cấu trúc dữ liệu B-Tree
Trang 20Một số loại chỉ mục trong MongoDB: default (_id), Single Field, Compound, MultiKey, GeoSpatial, Hash, Text
2.3 Chỉ mục văn bản
2.3.1 Giới thiệu
MongoDB cung cấp chỉ mục văn bản để hỗ trợ cho tìm kiếm toàn văn trong nội dung văn bản lưu trữ Chỉ mục văn bản có thể bao gồm các trường dữ liệu kiểu chuỗi hoặc mảng chuỗi bất kỳ
2.3.2 Tạo lập chỉ mục văn bản
Trong MongoDB, một collection chỉ có nhiều nhất một chỉ mục văn bản
2.3.2.1 Chỉ mục trên một trường dữ liệu (Indexing a Single Field)
MongoDB sử dụng phương thức db.collection.createIndex() để tạo chỉ mục văn bản Cú pháp đơn giản để chỉ mục một trường kiểu chuỗi bao gồm tên trường và chữ “text” trong tham số như sau:
db.[Tên_Collection].createIndex({tên_trường: “text“})
2.3.2.2 Chỉ mục trên nhiều trường dữ liệu (Compound Indexing)
MongoDB cũng hỗ trợ chỉ mục trên nhiều trường kiểu chuỗi theo cú pháp: db.[Tên_Collection].createIndex(
{
tên_trường_1:“text“,
tên_trường_2: “text“
})
2.3.2.3 Chỉ mục trên toàn văn bản (Wildcard Indexing)
MongoDB hỗ trợ sử dụng ký tự đại diện khi tạo lập một chỉ mục văn bản cho nhiều trường Với ký tự đại diện trong cú pháp tạo chỉ mục, MongoDB sẽ lập chỉ mục cho tất cả các trường có chứa dữ liệu chuỗi đối với mỗi văn bản trong collection
Cú pháp sử dụng ký tự đại diện trong MongoDB:
db.collection.createIndex( { "$**": "text" } )
Trang 21Chỉ mục văn bản với ký tự đại diện hỗ trợ tìm kiếm trên tất cả các trường có
dữ liệu kiểu chuỗi Nó đặc biệt hữu ích đối với các dữ liệu phi cấu trúc khi mà nội dung của các trường được lập chỉ mục là không rõ ràng
Ngoài ra, chỉ mục văn bản với ký tự đại diện còn hỗ trợ gán trọng số cho các trường được lập chỉ mục như đã trình bày ở trên và cũng hỗ trợ chỉ mục văn bản tổ hợp
Giá trị trọng số mặc định cho các trường được lập chỉ mục là 1 Để điều chỉnh trọng số này cần chỉ rõ giá trị cho tham số tùy chọn weights trong phương thức db.collection.createIndex() theo cú pháp sau:
Trang 22}
})
2.3.5 Không phân biệt chữ hoa/thường và dấu phụ
Chỉ mục văn bản phiên bản 3 trong MongoDB không phân biệt chữ hoa/thường
và dấu phụ Ví dụ: các ký tự é, É, e, ê và E khi chỉ mục hóa được MongoDB xem là một trong xử lý của mình
Các phiên bản trước của chỉ mục văn bản chỉ không phân biệt chữ hoa thường cho các ký tự [A-z] Đối với các ký tự khác thì MongoDB vẫn xem chúng là các ký
tự khác nhau
2.3.6 Phân tách các thẻ
Đối với việc thẻ hóa, chỉ mục văn bản phiên bản 3 trong MongoDB sử dụng các
ký tự sau đây để phân tách các thẻ: dấu gạch dưới, dấu gạch ngang, dấu nháy kép, các dấu kết thúc câu và ký tự khoảng trắng
Các phiên bản chỉ mục trước không sử dụng dấu nháy kép làm dấu phân tách thẻ
2.3.7 Phần tử chỉ mục
Bộ tạo chỉ mục văn bản thực hiện việc thẻ hóa và xác định từ gốc của các từ trong các trường dữ liệu được lập chỉ mục để tạo ra các phần tử chỉ mục “Từ” không lặp trong nội dung mỗi trường này được lưu trữ bởi một phần tử chỉ mục cho mỗi văn bản trong collection Quá trình thẻ hóa và xác định từ gốc của bộ tạo chỉ mục phụ thuộc và từng ngôn ngữ cụ thể được MongoDB hỗ trợ
2.3.8 Các ngôn ngữ được hỗ trợ và stop words
MongoDB hỗ trợ nhiều ngôn ngữ trong tìm kiếm toàn văn Bộ lập chỉ mục văn bản sẽ bỏ qua các stop words và xác định từ gốc của các từ của các trường được lập chỉ mục Các stop words là khác nhau và việc xác định từ gốc cũng khác nhau đối với các ngôn ngữ khác nhau
Danh sách các ngôn ngữ được MongoDB hỗ trợ trong tạo chỉ mục văn bản và tìm kiếm toàn văn được liệt kê trong bảng 2.2
Trang 23Bảng 2.2: Các ngôn ngữ được hỗ trợ trong quá trình tạo chỉ mục và tìm kiếm văn
bản trong MongoDB
Language Name
ISO 639-1 (Two letter codes)
ISO 636-3 (Three letter codes)
RLP names (Three letter codes)
Trang 24Chỉ mục văn bản đóng vai trò vô cùng quan trọng trong tìm kiếm toàn văn Nó
có thể bao gồm bất kỳ trường dữ liệu nào có giá trị kiểu chuỗi hoặc mảng các phần
tử kiểu chuỗi
Để thực thi các truy vấn tìm kiếm toàn văn trên một collection, trước hết cần phải lập một chỉ mục văn bản cho collection đó Mỗi collection chỉ có nhiều nhất một chỉ mục văn bản, tuy nhiên, chỉ mục này có thể bao hàm nhiều trường dữ liệu
Sử dụng cú pháp db.collection.createIndex() để tạo lập chỉ mục như
Trang 25$caseSensitive: <boolean>,
$diacriticSensitive: <boolean>
}
})
Ý nghĩa của các tham số khi sử dụng toán tử $text được mô tả trong bảng 2.3
Bảng 2.3: Các tham số của toán tử $text
Chuỗi văn bản cần tìm MongoDB sẽ thực hiện toán tử tìm kiếm logic OR trên các từ trong văn bản ngoại trừ các cụm từ
$language string
Tùy chọn Ngôn ngữ xác định danh sách stop words và các quy tắc cho việc xác định từ gốc trong quá trình thẻ hóa Nếu không chỉ rõ, giá trị mặc định của trường này là giá trị $language được chỉ ra khi tạo chỉ mục văn bản
Nếu giá trị của trường này nhận giá trị
“none” thì việc tìm kiếm văn bản sẽ bỏ qua danh sách stop words và bỏ qua việc xác định từ gốc
Các ngôn ngữ được MongoDB hỗ trợ được liệt kê trong bảng 2.2
$caseSensitive string
Tùy chọn Cho phép có/không tìm kiếm có phân biệt chữ hoa/thường Giá trị mặc định là false (tính năng mới trong MongoDB - phiên bản 3)
Trang 26Tham số Kiểu dữ liệu Mô tả
$diacriticSensitive boolean
Tùy chọn Cho phép có/không tìm kiếm có phân biệt dấu/không dấu (chỉ áp dụng cho phiên bản 3 của chỉ mục văn bản) Giá trị mặc định là false (tính năng mới trong MongoDB - phiên bản 3)
Trang 272.4.5 Sắp xếp
Mặc định, kết quả trả về của truy vấn trong MongoDB không được sắp xếp Tuy nhiên, tìm kiếm toàn văn có tính toán mức độ phù hợp của mỗi văn bản đối với chuỗi tìm kiếm Để sắp xếp kết quả theo mức độ phù hợp khi tìm kiếm toàn văn, cần sử dụng từ khóa $meta như cú pháp sau đây:
2.5 Một số hạn chế của chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB
Chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB là một công cụ rất mạnh
mẽ, linh hoạt và hiệu quả Nó cung cấp khả năng tìm kiếm nhanh với mức độ phù hợp là khá tốt Tuy nhiên, bên cạnh những ưu điểm đã được khẳng định trong thực
tế, nó cũng có những hạn chế nhất định
Một số hạn chế của chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB tính đến phiên bản 3.2 như sau:
Trang 28- Chỉ mục văn bản không hỗ trợ giao tiếp theo dạng trình cắm (plugin) để cho phép người dùng có thể tự định nghĩa các stemmer hay stop words là những thứ phụ thuộc vào ngôn ngữ của người dùng
- Chưa hỗ trợ đầy đủ các ngôn ngữ trong đó có ngôn ngữ tiếng Việt
- Chưa hỗ trợ các đặc trưng như tìm kiếm dựa trên các từ đồng nghĩa, các từ tương
tự
- Chưa quan tâm đến vị trí của các từ trong chỉ mục cũng như tìm kiếm
Thật không may, một trong những hạn chế của chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB lại liên quan đến ngôn ngữ tiếng Việt Để tăng hiệu quả ứng dụng MongoDB trong thực tiễn tại Việt Nam với phần lớn các cơ sở dữ liệu sử dụng ngôn ngữ tiếng Việt, luận văn tập trung nghiên cứu và đề xuất giải pháp để khắc phục hạn chế này
Trang 29Chương 3 – Cải tiến chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB
3.1 Một số khái niệm
3.1.1 Stop words
Stop words là những từ quá phổ biến, quá chung chung trong một ngôn ngữ nào
đó Để tiết kiệm không gian lưu trữ, gia tăng tốc độ tìm kiếm và nâng cao mức độ phù hợp của kết quả tìm kiếm, các stop words thường được lọc ra khi tìm kiếm cũng như khi lập chỉ mục văn bản [1][2][3][10]
Một số ví dụ về stop words:
- Trong tiếng Việt: do, gì, rồi, rằng, thì, là, mà,…
- Trong tiếng Anh: a, the, an, about, as,…
Trong kỹ thuật lập chỉ mục văn bản và tìm kiếm toàn văn phiên bản 3, MongoDB
hỗ trợ stop words cho 15 ngôn ngữ (xem mục 2 phần phụ lục)
3.1.2 Stemming
Trong tìm kiếm văn bản, nhu cầu so sánh các từ (token) với nhau là hết sức cần thiết Việc so sánh này tưởng chừng đơn giản bằng cách dùng toán tử bằng (“==”) để kiểm tra nhưng thực tế thì không phải như vậy Đối với một số ngôn ngữ, tiêu biểu là tiếng Anh, mỗi từ có thể có nhiều biến thể khác nhau phụ thuộc vào nhiều yếu tố chẳng hạn như biến thể theo ngôi, theo thì,… Ví dụ, các từ “walked”, “walking”,
“walks” đều là biến thể của từ “walk” và có ý nghĩa là “đi bộ” Vậy làm cách nào để
so sánh các từ như vậy với nhau? Để giải quyết vấn đề này có hai kỹ thuật thường được sử dụng là stemming và lemmatization [2] Tuy có một số nhược điểm ảnh hưởng đến tính chính xác nhưng do có tốc độ xử lý nhanh và kết quả là chấp nhận được nên kỹ thuật stemming được dùng rất phổ biến trong xử lý ngôn ngữ tự nhiên
và nó cũng được lựa chọn để sử dụng trong MongoDB
Như vậy có thể hiểu, stemming là kỹ thuật dùng để biến đổi một từ (token) về dạng gốc của nó tùy theo ngôn ngữ cụ thể
Trang 303.2 Mã nguồn, môi trường và công cụ nghiên cứu
3.2.1 Bản quyền và địa chỉ tải mã nguồn MongoDB
3.2.1.1 Bản quyền nguồn mở
Mã nguồn MongoDB được phát hành theo giấy phép nguồn mở GNU AGPL 3.0 Nội dung cơ bản của giấy phép này về quyền sử dụng phần mềm GNU như sau:
- Tự do chạy chương trình cho bất cứ mục đích nào
- Tự do tìm hiểu cách hoạt động của chương trình và tự do sửa đổi nó
- Tự do tái phân phối bản sao
- Tự do cải tiến chương trình và phát hành những gì cải tiến ra cộng đồng Với việc phát hành là phần mềm GNU, mã nguồn MongoDB được phép tự
do chỉnh sửa, tái phân phối, cải tiến và phát hành những cải tiến ra cộng đồng do đó những nghiên cứu trình bày trong luận văn có liên quan đến việc sửa đổi mã nguồn MongoDB là hoàn toàn hợp lệ
3.2.1.2 Địa chỉ tải mã nguồn MongoDB
Mã nguồn được tải về tại trang chủ MongoDB [5] hoặc có thể tải về tại trang quản lý mã nguồn Gibhub [6] Luận văn sử dụng phiên bản mã nguồn 3.2.9 do MongoDB phát hành ngày 16 tháng 8 năm 2016
Trang 313.2.2 Cấu trúc tổng thể thư mục mã nguồn MongoDB
[MongoDB Source]
mongo third_party
[Thư mục khác]
libstemmer_c [Thư mục khác]
Thư mục chứa các tập tin mã nguồn luận văn tập trung nghiên cứu Các thư mục liên quan
Hình 3.1: Tổng thể thư mục mã nguồn MongoDB
- Thư mục [MongoDB Source]\mongo\db\fts chứa các tập tin liên quan đến chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB Đây cũng là thư mục mà luận văn tập trung nghiên cứu
- Thư mục [MongoDB Source]\thirt_party\libstemmer_c chứa các tập tin liên quan đến kỹ thuật stemming như đã giới thiệu ở mục 3.1.2
- Các thư mục [MongoDB Source]\thirt_party\[Thư mục khác] là các thư mục chứa các tập tin liên quan đến các thành phần khác của toàn bộ hệ CSDL MongoDB
Mã nguồn MongoDB được viết bởi C/C++ nên hầu hết các tập tin trong các thư mục nói trên đều có phần mở rộng là c, cpp hoặc h
Trang 323.2.3 Môi trường và công cụ nghiên cứu
Trong quá trình nghiên cứu, tìm hiểu mã nguồn MongoDB, tác giả sử dụng môi trường Microsoft Windows 8.1 và các công cụ chủ yếu sau đây:
- Microsoft Visual Studio 2015: Môi trường lập trình tích hợp của hãng Microsoft
Hình 3.2: Mã nguồn MongoDB được mở trên MS Visual Studio 2015
- Mongo Shell: công cụ tương tác với MongoDB (cũng là một thành phần trong MongoDB)
Hình 3.3: Công cụ Mongo Shell
Trang 33- RoboMongo 0.9.0 RC4: công cụ tương tác với MongoDB với giao diện trực quan
Hình 3.4: Phần mềm RoboMongo
- MongoBooster: công cụ tương tác với MongoDB với giao diện trực quan và các tính năng mạnh mẽ như import, export, code intellisense, …
Hình 3.5: Phần mềm MongoBooster
Trang 34Ngoài ra, trong quá trình nghiên cứu thử nghiệm, các công cụ khác như Python 2.7, SCons 2.3 cũng thường xuyên được sử dụng
3.3 Cơ chế xây dựng chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB 3.3.1 Cơ chế xây dựng chỉ mục
3.3.1.1 Các bước xây dựng chỉ mục
Sau khi nghiên cứu tập tin mã nguồn fts_unicode_tokenizer.cpp và một số tập tin mã nguồn khác có liên quan trong thư mục [MongoDB Source]\mongo\db\fts [6], tác giả xác định MongoDB thực hiện việc tạo chỉ mục thông qua các bước cơ bản như sau:
Bước 1: Chuỗi văn bản đầu vào
Bước 2: Thẻ hóa (tokenization) chuỗi đầu vào thành các từ (token) bằng cách
sử dụng các ký tự phân tách
Bước 3: Kiểm tra ngôn ngữ và lọc các từ dựa vào danh sách stop words tương
ứng với ngôn ngữ
Bước 4: Kiểm tra ngôn ngữ và tìm từ gốc bằng cách sử dụng kỹ thuật
stemming tương ứng với ngôn ngữ
Bước 5: Lập chỉ mục với khóa là các từ, giá trị là các document chứa chuỗi
đầu vào tương ứng
Trên thực tế, quá trình tạo chỉ mục còn thêm các bước nhỏ khác như kiểm tra trùng lặp, biến đổi chữ hoa/thường, bỏ dấu,… Tuy nhiên, các bước này được giữ nguyên, không đóng góp vai trò trong giải pháp cải tiến và để cho đơn giản nên tác giả chỉ giới thiệu các bước quan trọng đối với giải pháp của mình
Quá trình trên được minh họa trong hình 3.6
Trang 35Kết quả (KQ) sau khi thực hiện từng bước như sau:
- Sau khi thẻ hóa: KQ(A B C E F H M N O Z)
- Sau khi lọc stop words: KQ(A B F M O Z)
- Sau khi tìm từ gốc: KQ(A’ B F M’ O Z)
- Chỉ mục được tạo: {A’:[D1, D2], B:[D1], F:[D1], M’:[D2], O:[D1, D2, D3], Z[D3]}
Hình 3.7 giúp hình dung rõ hơn quá trình thực hiện
Trang 36D1: A B C E F H O D2: A C M N O D3: O Z
Bước 1: Chuỗi văn bản tìm kiếm đầu vào
Bước 2: Thẻ hóa (tokenization) chuỗi đầu vào thành các từ (token) bằng cách
sử dụng các ký tự phân tách
Bước 3: Kiểm tra ngôn ngữ và lọc các từ dựa vào danh sách stop words tương
ứng với ngôn ngữ
Bước 4: Kiểm tra ngôn ngữ và tìm từ gốc bằng cách sử dụng kỹ thuật
stemming tương ứng với ngôn ngữ
Bước 5: Tìm kiếm trong chỉ mục và đưa ra kết quả
Quá trình trên được minh họa trong hình 3.8
Trang 37Kết quả (KQ) sau khi thực hiện từng bước như sau:
- Sau khi thẻ hóa: KQ(A C M N)
- Sau khi lọc stop words: KQ(A M)
- Sau khi tìm từ gốc: KQ(A’ M’)
- Tìm kiếm KQ trong tập chỉ mục và đưa ra kết quả: {D1, D2}
Quá trình tìm kiếm được giải thích rõ hơn bởi hình 3.9
Trang 38Hình 3.9: Mô phỏng quá trình tìm kiếm
3.4 Vai trò của stop words và stemming đối với quá trình xây dựng chỉ mục văn bản và tìm kiếm toàn văn
Như đã trình bày ở mục 3.3, trong cả hai quá trình xây dựng chỉ mục văn bản và tìm kiếm toàn văn trong MongoDB đều sử dụng stop words và kỹ thuật stemming
3.4.1 Vai trò của stop words
Từ sơ đồ ở các hình 3.6, hình 3.8 và các ví dụ, luận văn đưa ra một số nhận xét sau đây về vai trò và tầm ảnh hưởng của stop words đối với việc xây dựng chỉ mục văn bản và tìm kiếm toàn văn:
- Nếu danh sách các từ trong stop words lớn thì số từ bị loại bỏ sẽ nhiều và do đó dẫn đến kích thước chỉ mục sẽ giảm do lọc bỏ nhiều từ trong khi hiệu suất tạo chỉ mục và tìm kiếm tăng do không gian tìm kiếm nhỏ lại
- Ngược lại, nếu danh sách các từ trong stop words nhỏ thì số từ bị loại bỏ ít và
do đó dẫn đến kích thước chỉ mục sẽ tăng do ít từ bị lọc bỏ, hiệu suất tạo chỉ mục và tìm kiếm giảm do không gian tìm kiếm tăng lên