Xuất phát từ thực tế đó, luận văn tốt nghiệp này được hướng đến mục tiêu có thể tự động theo dõi những thông tin mới mà người dùng quan tâm được xuất bản trên nền Web, từ đó xử lý bước đ
Trang 1Lê Hữu Hảo
ĐÁNH GIÁ VÀ THU THẬP THÔNG TIN TỰ ĐỘNG TRÊN INTERNET SỬ DỤNG DỊCH VỤ TÌM KIẾM
LUẬN VĂN THẠC SỸ CHUYÊN NGÀNH KHOA HỌC MÁY TÍNH
THÁI NGUYÊN - 2015
Trang 2Lê Hữu Hảo
ĐÁNH GIÁ VÀ THU THẬP THÔNG TIN TỰ ĐỘNG TRÊN INTERNET SỬ DỤNG DỊCH VỤ TÌM KIẾM
Chuyên ngành: Khoa học máy tính
Mã số: 60 48 0101
LUẬN VĂN THẠC SỸ CHUYÊN NGÀNH KHOA HỌC MÁY TÍNH
Giáo viên hướng dẫn: TS Nguyễn Ngọc Hóa
THÁI NGUYÊN - 2015 THÁI NGUYÊN - 2015
Trang 3Thái Nguyên, ngày tháng năm 2015
Trước hết tôi xin chân thành cảm ơn thầy hướng dẫn – Tiến sĩ Nguyễn Ngọc Hóa người đã hết sức nhiệt tình bảo ban hướng dẫn, đóng góp những ý kiến quý báu cho tôi để có thể học tập và hoàn thành luận văn tốt nghiệp này
Xin gửi lời cảm ơn chân thành nhất đến Ban giám hiệu trường Đại học Công Nghệ Thông Tin và truyền thông – Đại học Thái Nguyên đã tạo điều kiện giúp đỡ tôi có thể thực hiện đề tài Cảm ơn toàn thể các thầy cô công tác tại trường Đại học Công nghệ Thông tin và Truyền thông – Đại học Thái Nguyên đã dạy dỗ và truyền đạt những kiến thức quí báu cho tôi trong suốt thời gian học tập và rèn luyện tại trường
Tôi xin được gửi lời biết ơn vô hạn tới cha mẹ, người thân đã nuôi dưỡng và tạo điều kiện tốt nhất cho tôi học tập sinh hoạt, ở bên tôi những lúc khó khăn nhất
để chuyên tâm thực hiện luận văn
Cuối cùng, xin cảm ơn tập thể lớp cao học CNTT K12E và đặc biệt những người ban tốt đã ở bên tôi, khuyến khích, động viên tôi và cho tôi những lời khuyên chân thành trong cuộc sống và học tập
Xin trân trọng cảm ơn!
Trang 4Thái Nguyên, ngày tháng năm 2015
Học viên
Lê Hữu Hảo
LỜI CAM ĐOAN
Tôi xin cam đoan những nghiên cứu của tôi về "Đánh giá và thu thập thông tin tự động trên Internet sử dụng dịch vụ tìm kiếm" mà tôi viết trong luận văn này là sự thật Những gì tôi viết ra không sao chép từ các tài liệu, không sử dụng các kết quả của người khác mà không trích dẫn cụ thể
Tôi xin cam đoan ứng dụng này tôi trình bày trong luận văn là do tôi tự phát triển dưới sự hướng dẫn của thầy Nguyễn Ngọc Hóa, không sao chép mã nguồn của người khác Nếu sai tôi hoàn toàn chịu trách nhiệm theo quy định của trường Đại học Công nghệ Thông tin và Truyền thông - Đại học Thái Nguyên
Trang 5MỤC LỤC
LỜI CẢM ƠN i
LỜI CAM ĐOAN ii
MỤC LỤC iii
DANH MỤC CÁC HÌNH VẼ v
DANH MỤC BẢNG BIỂU vi
GIỚI THIỆU CHUNG 1
CHƯƠNG 1: TỔNG QUAN VỀ TÌM KIẾM VÀ THEO DÕI THÔNG TIN 3
1.1 Tổng quan về tìm kiếm thông tin 3
1.1.1 Dịch vụ tìm kiếm Google 3
1.1.2 Dịch vụ tìm kiếm Bing 4
1.1.3 Dịch vụ tìm kiếm Yahoo 4
1.1.4 Search Engine điển hình 4
1.2 Dữ liệu bán cấu trúc và cây DOM 8
1.2.1 Dữ liệu bán cấu trúc và việc trích xuất 8
1.2.2 Cây DOM 10
1.3 Theo dõi và thu thập dữ liệu 14
CHƯƠNG 2: MÔ HÌNH KIẾN TRÚC TỔNG THỂ VÀ MỘT SỐ THUẬT TOÁN ĐÁNH GIÁ THÔNG TIN 20
2.1 Mô hình kiến trúc tổng thể 20
2.2 Các kỹ thuật chính 21
2.2.1 Framework Struts 2 21
2.2.2 Hệ quản trị dữ liệu MongoDB 23
2.2.3 Hệ quản trị cơ sở dữ liệu MySQL 29
2.3 Một số thuật toán đối sánh mẫu 31
2.3.1 Thuật toán Brute Force 31
Trang 62.3.2 Thuật toán Knuth Morris Pratt 32
2.3.3 Thuật toán Boyer-Moore 41
2.4 So sánh các thuật toán 46
CHƯƠNG 3: THỰC NGHIỆM ỨNG DỤNG ĐÁNH GIÁ VÀ THU THẬP THÔNG TIN 47
3.1 Mô hình bài toán 47
3.1.1 Theo dõi và thu thập thông tin 47
3.1.2 Quản lý người dùng 51
3.1.3 Quản lý dữ liệu hệ thống 57
3.2 Công cụ đánh giá và thu thập thông tin tự động 61
3.2.1 Áp dụng thuật toán Knuth Morris Pratt trong đánh giá, đối sánh mẫu 61
3.2.2 Các công cụ phần mềm 62
3.3 Kết quả thực nghiệm 63
3.3.1 Kết quả thu thập thông tin 63
3.3.2 Kết quả của ứng dụng Web 65
KẾT LUẬN CHUNG 69
TÀI LIỆU THAM KHẢO 71
Trang 7DANH MỤC CÁC HÌNH VẼ
Hình 1.1: Kiến trúc của máy tìm kiếm Google 5
Hình 1.2: Ví dụ về dữ liệu bán cấu trúc 9
Hình 1.3: Ví dụ về biểu diễn cây DOM của mã HTML 11
Hình 1.4: Ví dụ xây dựng cây DOM sử dụng hộp ảo 13
Hình 1.5: Các bước xử lý của máy chủ 16
Hình 1.6: Các kết quả hiển thị của Google 16
Hình 1.7: Mã HTML của một kết quả hiện thị 17
Hình 1.8: Mô hình cây DOM của mỗi kết quả 18
Hình 2.1: Mô hình hệ thống 20
Hình 2.2: Kiến trúc của Struts2 22
Hình 2.3: Lưu trữ dữ liệu dạng BSON 26
Hình 3.1: Biểu đồ class của phía máy chủ 48
Hình 3.2: Biểu đồ tuần tự của phía máy chủ 51
Hình 3.3: Biểu đồ ca sử dụng của người dùng 52
Hình 3.4: Biểu đồ lớp chức năng liên quan đến tin bài 55
Hình 3.5: Biểu đồ lớp của các chức năng quản lý người dùng 56
Hình 3.6: Lược đồ cơ sở dữ liệu quản lý người dùng 59
Hình 3.7: Giao diện chương trình 66
Hình 3.8: Màn hình chính 66
Hình 3.9: Lọc thông tin theo thời gian 67
Hình 3.10: Thông tin tài khoản 68
Trang 8DANH MỤC BẢNG BIỂU
Bảng 3.1: Các class trong package Model 53
Bảng 3.2: Các class trong package Controller 54
Bảng 3.3: Các class của package DAO 54
Bảng 3.4: Các class của package Util 54
Bảng 3.5: Mô tả collection của cơ sở dữ liệu lưu tin bài 58
Bảng 3.6: Mô tả các thuộc tính của quan hệ User 60
Bảng 3.7: Mô tả các thuộc tính của quan hệ keywords 60
Bảng 3.8: Mô tả các thuộc tính của quan hệ users_keywords 61
Bảng 3.9: Mô tả các thuộc tính của quan hệ trends 61
Bảng 3.10: Các công cụ phần mềm 62
Bảng 3.11: Cấu hình máy tính chạy thực nghiệm 63
Bảng 3.12: Bảng thời gian hoàn thành 65
Bảng 3.13: Bảng số lượng kết quả 65
Trang 9GIỚI THIỆU CHUNG
Hiện nay, chúng ta đang sống trong thế kỉ 21, thời đại công nghệ thông tin có những bước phát triển vượt bậc để bắt kịp với xu hướng phát triển chung của xã hội Kéo theo đó là lượng thông tin khổng lồ về tất cả các lĩnh vực xã hội, chính trị, kinh
tế, giải trí, v.v cũng liên tục phát sinh và phát triển nhanh chóng Nhu cầu hiểu biết
và tìm kiếm của con người ngày càng tăng theo cùng với sự phát triển đó Tuy nhiên mỗi người, mỗi tổ chức lại có những lĩnh vực quan tâm khác nhau, trình độ hiểu biết về công nghệ thông tin khác nhau, nhu cầu này không chỉ dừng lại ở các
cá nhân, mà phổ biến của tất cả mọi người, các tổ chức Bên cạnh đó lượng thông tin trên Internet cực kì lớn và hỗn tạp từ nhiều nguồn, nhiều loại khác nhau dẫn đến quá trình tìm kiếm khá là khó khăn và vất vả
Để đáp ứng nhu cầu tìm hiểu của con người, rất nhiều công cụ tìm kiếm đã ra đời cung cấp khả năng tìm kiếm thông tin với tốc độ và phạm vi ngày càng nâng cao và cải thiện Một trong những công cụ tìm kiếm phổ biến nhất hiện nay đứng đầu là Google, đứng thứ hai là Bing, tiếp đó là Yahoo Tuy nhiên các công cụ tìm kiếm trên mang tính chất tức thời, tức là khi người dùng có nhu cầu tìm kiếm thì họ phải trực tiếp vào nhập từ khóa cần tìm và xem kết quả, người dùng sẽ khó nắm bắt
và quản lý những thông tin cập nhật thường xuyên liên quan đến những vấn đề nào
đó mà mình có nhu cầu theo dõi thường xuyên
Xuất phát từ thực tế đó, luận văn tốt nghiệp này được hướng đến mục tiêu có thể tự động theo dõi những thông tin mới mà người dùng quan tâm được xuất bản trên nền Web, từ đó xử lý bước đầu để khắc phục tình trạng tránh trùng lặp thông tin và lưu lại trong cơ sở dữ liệu (CSDL) của hệ thống để người dùng có thể dễ dàng tra cứu sau này
Theo thống kê đã nêu, các công cụ tìm kiếm phổ biến nhất hiện nay có thể đáp ứng được yêu cầu về nguồn dữ liệu lớn, tốc độ phản hồi nhanh và các kết quả có sự liên quan tương đối sát với từ khóa cần tìm kiếm Vì thế ý tưởng thực hiện của chúng tôi là theo dõi các thông tin trên Internet thông qua việc truy vấn thường xuyên đến các công cụ tìm kiếm phổ biến nhất hiện nay là Google, Bing và Yahoo,
Trang 10tổng hợp, đánh giác các kết quả sớm nhất và lưu trữ databasse vào cơ sở dữ liệu MongoDB Như vậy khi người dùng muốn theo dõi các thông tin sẽ truy cập vào hệ thống để có thể xem được những thông tin liên quan mới nhất và nhanh nhất Để đảm bảo lưu trữ được lượng dữ liệu như vậy, mô hình quản trị cơ sở dữ liệu NoSQL
sẽ được nghiên cứu, tìm hiểu để phục vụ việc lưu trữ các tin bài trả về Phần giao diện tương tác sẽ được thực hiện thông qua ứng dụng Web
Những kết quả thu được trong luận văn này được tổng hợp trong 3 chương có nội dung sau:
Giới thiệu chung: Trong mục này tôi sẽ giới thiệu chung về luận văn:
Nêu thực trạng hiện nay cần giải quyết, từ đó giới thiệu bài toán xuất phát
từ nhu cầu thực tế đó, và mục tiêu cũng như những nội dung chính của luận văn
Chương 1: Tổng quan về tìm kiếm và theo dõi thông tin: Trình bày một
số cơ sở lý thuyết chính liên quan đến việc tiến hành các nội dung của luận văn như Search Engine, dữ liệu cấu trúc và cây DOM, thực trạng một số dịch vụ tìm kiếm tiêu biểu hiện nay như Google, Yahoo, Bing,…
để lựa chọn triển khai ứng dụng theo dõi thông tin trên Internet
Chương 2: Mô hình kiến trúc tổng thể và một số thuật toán đánh giá
thông tin Trong chương này sẽ trình bày về mô hình kiến trúc tổng thể của hệ thống cũng như các thành phần chi tiết ở phía máy chủ, máy khách
và cơ sở dữ liệu lưu trữ thông tin Trình bày về các kỹ thuật chính (Framework Strusts, MongoDB, NoSQL ), các phương pháp giải thuật
áp dụng cho mỗi phần
Chương 3: Thực nghiệm ứng dụng đánh giá và thu thập thông tin
- Trình bày về cách sử dụng hệ thống, những kết quả đã đạt được Đánh giá các kết quả đã đạt được và những tồn tại của hệ thống
Kết luận chung
Tóm tắt lại quá trình xây dựng, những kết quả đã đạt được, ý nghĩa thực tiễn của hệ thống
Trang 11CHƯƠNG 1: TỔNG QUAN VỀ TÌM KIẾM VÀ THEO DÕI THÔNG
TIN
1.1 Tổng quan về tìm kiếm thông tin
Phần lớn các công cụ tìm kiếm đều cung cấp API cho các nhà phát triển để truy cập và sử dụng các kết quả của mình Tuy nhiên không phải API nào cũng miễn phí, và nó đều giới hạn số lượng kết quả trả về cũng như số truy vấn đến các công cụ tìm kiếm đó Sau đây sẽ giới thiệu về APIs của ba công cụ tìm kiếm phổ biến nhất: Google, Bing và Yahoo
1.1.1 Dịch vụ tìm kiếm Google
Google cung cấp hai loại Search APIs Thứ nhất là ứng dụng mất phí Google Site Search Nó được thiết kế dành riêng cho các doanh nghiệp muốn tìm kiếm ở mức cao hơn dựa trên google Loại thứ hai là Google Custom Search, là ứng dụng miễn phí cho phép ta tạo một công cụ searchtrong chính trang web, blog,… của mình mà có thể chỉ tìm kiếm nội dung của một website, hoặc tập trung vào các chủ
đề từ nhiều trang khác nhau Có thể tìm kiếm hình ảnh, tùy chỉnh giao diện tìm kiếm và các kết quả trả về Tuy nhiên Google Custom Seach hạn chế chỉ cho phép các nhà phát triển chỉ được gửi tối đa 100 yêu cầu một ngày, và mỗi phần yêu cầu chỉ được trả về 10 kết quả tìm kiếm
Google Custom Search cung cấp rất nhiều APIs để phục vụ nhu cầu của các nhà phát triển như:
- Custom Search Control API cho phép ta nhúng công cụ tìm kiếm Custom Search vào trong chính trang web của mình và các ứng dụng web khác sử dụng JavaScript
- JSON/Atom API cho phép ta phát triển các trang web, các chương trình
để lấy và hiển thị các kết quả từ chương trình Google Custom Search Với API này, ta có thể sử dụng RESTful để request lấy các kết quả về ở dạng JSON hoặc Atom
Trang 12- XML API: sử dụng một ứng dụng client của ta lựa chọn để lấy về một list các công cụ Custom Search dưới một tài khoản, tạo và xóa công cụ Custom Search
1.1.2 Dịch vụ tìm kiếm Bing
Bing là công cụ tìm kiếm do Microsoft tạo ra và phát triển Từ tháng 8 năm
2012 Bing Seach API chuyển sang Azure Marketplace – một cửa hàng cho các tập
dữ liệu, các ứng dụng điện toán đám mây và các công cụ phân tích [10] Bing API cho phép các nhà phát triển có thể nhúng một công cụ tìm kiếm trong các trang web hoặc ứng dụng của mình sử dụng XML hoặc JSON Thêm các chức năng tìm kiếm cho một trang web Nó cho phép tìm kiếm các trang web, hình ảnh, tin tức, video, tìm kiếm liên quan và gợi ý chính tả [11] Bing search API hỗ trợ nhiều gói yêu cầu khác nhau, với gói miễn phí ta được 5000 giao dịch một tháng, với mỗi giao dịch thu về được tối đa 50 kết quả
Bing search api hỗ trợ JSON, XML và các giao thức OData với các kết quả trả
về ở dưới dạng Json hoặc XML tùy chỉnh do người phát triển
1.1.3 Dịch vụ tìm kiếm Yahoo
BOSS là công cụ tìm kiếm mở và dịch vụ nền tảng dữ liệu của Yahoo Mục tiêu của nó là thúc đẩy sự đổi mới trong ngành công nghiệp tìm kiếm Các nhà phát triển và các công ty internet lớn có thể sử dụng để xây dựng các sản phẩm tìm kiếm web qui mô sử dụng công nghệ và dữ liệu của công cụ tìm kiếm yahoo [23]
BOSS API là một dịch vụ cung cấp RESTful truy cập web, hình ảnh, tin tức, chính tả, và các kết quả tìm kiếm Blog, hỗ trợ định dạng XML và JSON Tuy nhiên
để được sử dụng API của Yahoo, các nhà phát triển bắt buộc phải trả một khoản phí tùy theo loại và nhu cầu tìm kiếm của mình từ 0.8 đô la cho đến 8 đô la cho mỗi
1000 truy vấn [24]
1.1.4 Search Engine điển hình
Trong những Search Engine hiện nay Goole là Search Engine tốt nhất Phần này sẽ giới thiệu về google
Trang 131.1.4.1 Cấu trúc của máy tìm kiếm Google
Tổng quan về cấu trúc của máy tìm kiếm Google
Hình 1.1: Kiến trúc của máy tìm kiếm Google
Bộ tìm duyệt Crawler: Bộ phận Crawler của Google bao gồm một số
Crawler nhỏ phân bố ở một số địa điểm khác nhau Máy chủ URL có nhiệm vụ cung cấp các địa chỉ URL cho Crawler Các trang web tải về được chuyển vào kho
dữ liệu (StoreServer) StoreServer nén các trang web này lại và chuyển vào Repository Mỗi trang web có một chỉ số ID kết hợp hay còn gọi là docID DocID được gán mỗi khi có một URL mới được tách khỏi trang web
Bộ đánh chỉ mục Indexer: Bộ này có chức năng lấy các tài liệu trong kho
Repository, giải nén và phân tích chúng để tạo chỉ mục
Bộ xử lý URL Resolver: Đọc nội dung tệp neo và chuyển các URL tương đối
thành các URL tuyệt đối rồi thành các chỉ mục docID Đưa dòng văn bản liên kết của URL (anchor text) và docID của tài liệu mà URL đó trỏ tới vào chỉ mục xuôi
Trang 14(forward index) URL Resolver cũng tạo ra một cơ sở dữ liệu lưu trữ các liên kết
chứa từng cặp docID Cơ sở dữ liệu này được sử dụng để tính hạng (PageRank) cho tất cả các tài liệu
Bộ Sorter: Lấy dữ liệu đã được sắp xếp theo thứ tự của docID
trong các Barrels và sắp xếp lại theo wordID để tạo ra chỉ mục ngược
1.1.4.2 Cấu trúc dữ liệu chính
Cấu trúc dữ liệu của máy tìm kiếm Google được tối ưu hóa sao cho số lượng các trang được duyệt, đánh chỉ mục, và được tìm thấy là lớn nhất với chi phí thấp nhất Mặc dù trong những năm gần đây tốc độ của vi xử lý và tốc độ vào ra được cải thiện nhanh chóng nhưng một lần tìm kiếm trên đĩa vẫn mất khoảng 10ms Google được thiết kế để tránh việc tìm kiếm đĩa bất cứ khi nào có thể Và điều này có ảnh
hưởng đáng kể đến việc thiết kế cấu trúc dữ liệu Bigfiles là các file ảo mở rộng ra là
hệ thống nhiều file và có thể đánh địa chỉ được bằng 64 bit số nguyên Repository (kho chứa dữ liệu) chứa đầy đủ mã HTML của các trang web đã được nén Việc lựa
chọn kỹ thuật nén phải dựa trên sự cân đối giữa tốc độ và tỷ lệ nén
1.1.4.3 Chỉ mục tài liệu
Chỉ mục tài liệu (Document Index-DocID) lưu trữ thông tin về mỗi tài liệu bao gồm thông tin về trạng thái hiện hành của tài liệu (Document status), con trỏ tới kho Repository, một thông số kiểm lỗi Checksum, và nhiều thông số khác Nếu tài liệu đã được duyệt (crawled) thì DocID chứa thông tin về tài liệu đó (như địa chỉ URL, tiêu đề title) Nếu tài liệu chưa được duyệt thì DocID chứa con trỏ đến danh sách URL (URL list)
1.1.4.4 Danh mục từ Lexicon
Có một số loại danh mục từ khác nhau, trong đó có một kiểu là danh mục từ
có thể được chứa trong bộ nhớ với giá thành hợp lý Danh mục từ được chia thành hai phần một danh sách các từ và một bảng băm của các con trỏ
Trang 151.1.4.5 Các danh sách hit
Mỗi hit chứa các thông tin của một từ nào đó trong một tài liệu bao gồm vị trí, font chữ, và viết hoa hay viết thường Danh sách hit loại bỏ hầu hết các khoảng trống trong cả chỉ mục xuôi và chỉ mục ngược Kích thước một danh sách hit được đặt ở đầu của chính các hit Để tiết kiệm không gian, độ dài của danh sách hit được kết hợp với wordID trong chỉ mục xuôi và kết hợp với docID trong chỉ mục ngược Điều này giới hạn từ 5 đến 8 bit Nếu độ dài của hit vượt quá số bit này thì
số bít này được dùng để chứa mã escape còn độ dài sẽ được biểu diễn ở 2 byte tiếp theo
1.1.4.6 Đánh chỉ mục cho web (indexing the web)
- Chỉ mục xuôi (Forward index) Được sắp xếp một phần Nó được lưu trữ trong một số Barrels Mỗi Barrel chứa một dãy WordID Nếu một tài liệu chứa các
từ có trong một Barrel nào đó thì DocID được ghi vào trong Barrel đó, theo sau bởi một danh sách các WordID với danh sách hit tương ứng với các từ đó
(5) Tính hạng của tài liệu cho yêu cầu tìm kiếm
(6) Nếu duyệt đến hết các doclist trong short barrel mà vấn không thấy tài liệu thỏa mãn yêu cầu thì ta chuyển sang tìm các doclist trong full barrel Rồi quay về bước 4
Trang 16(7) Nếu chúng ta không ở cuối của bất kỳ một doclist nào thì chuyển sang bước 4
(8) Sắp xếp các tài liệu tìm thấy theo thứ hạng và trả về giá trị top k
Để giới hạn thời gian trả về kết quả, mỗi lần các tài liệu phù hợp với yêu cầu được trả về, bộ tìm kiếm tự động chuyển đến bước 8 Có nghĩa là có thể các kết quả tìm kiếm tối ưu phụ được trả về
1.1.4.8 Hệ thống xếp hạng
Google lưu trữ nhiều thông tin về tài liệu web Mỗi trang có các thông tin như các URL trỏ đến trang đó, và các URL mà trang đó trỏ đến Việc xây dựng hàm xếp hạng sao cho không có bất kỳ một thông tin nào có quá nhiều ảnh hưởng
Hệ thống tìm kiếm Google có khả năng mở rộng Google sử dụng một số kỹ thuật như giải thuật phân hạng trang PageRank, anchor text và proximily để nâng cao chất lượng tìm kiếm
1.2 Dữ liệu bán cấu trúc và cây DOM
1.2.1 Dữ liệu bán cấu trúc và việc trích xuất
Dữ liệu thường được chia làm ba dạng cơ bản [13]:
- Dữ liệu không có cấu trúc: là các dữ liệu ở dạng tự do và không cần có cấu trúc định nghĩa sẵn, ví dụ như ngôn ngữ tự nhiên (nói hoặc viết)
- Dữ liệu có cấu trúc: là các dạng dữ liệu do người dùng định nghĩa có chứa một chuỗi các thuộc tính, mỗi thuộc tính trong các thuộc tính đó
có một kiểu dữ liệu Mỗi thuộc tính là đặc tính giúp mô tả thể hiện của kiểu [16] Ví dụ như các dữ liệu lưu trữ trang các bảng của cơ sở dữ liệu quan hệ như MySQL, Microsoft SQL Server
- Dữ liệu bán cấu trúc: là dữ liệu có cấu trúc nhưng không hoàn toàn tường minh, nó không tuân theo những cấu trúc, cách thức cấu trúc của bảng và các mô hình dữ liệu trong cơ sở dữ liệu nhưng nó chứa những thẻ, những đánh dấu tới những phần từ ngữ nghĩa riêng biệt của các bản ghi và các trường riêng biệt bên trong dữ liệu
Trang 17Các trang web thường chính là một dạng tiêu biểu của loại dữ liệu bán cấu trúc Ví dụ như cấu trúc trang HTML của trang Google Search:
Hình 1.2: Ví dụ về dữ liệu bán cấu trúc
1.2.1.1 Một số phương pháp trích xuất thông tin cho dữ liệu bán cấu trúc
Để trích xuất thông tin từ trang web, có một số phương pháp điển hình như:
Phương pháp thủ công: đó là nhà phát triển sẽ quan sát mã nguồn của trang
web đó, tìm ra đặc điểm để trích xuất dữ liệu mục tiêu [9] Phương pháp này chính
là trích xuất sử dụng cây DOM Phân tích mã nguồn HTML dưới dạng một cây DOM với các node, mỗi node là một thử HTML, quá trình trích xuất sẽ dựa vào việc duyệt đường đi từ gốc đến các node con chữa các thông tin cần trích xuất Tuy nhiên nó không thể áp dụng cho số lượng nhiều trang có định khác khác nhau
Phương pháp qui nạp: là phương pháp bán tự động, một tập hợp các luật
trích xuất được học từ một bộ các trang đã được gán nhãn bằng tay Có thể xây dựng tập luật dựa trên việc phân tích cây DOM đã được gán nhãn cho trước để xây dựng thuật toán Sau đó các luật này sẽ được dùng để trích xuất các thành phần dữ liệu từ những trang có định dạng tương tự Phương pháp này phù hợp với việc phải trích xuất thông tin thường xuyên từ những trang web có cấu trúc giống nhau Có thể làm việc với số lượng trang lớn
Trang 18Phương pháp tự động: tự động tìm các mẫu hoặc các cấu trúc để trích xuất
thông tin từ những trang web đã cho trước Phương pháp này không cần đến sự gán nhãn bằng tay nên có thể trích xuất được dữ liệu từ một lượng khổng lồ các trang
Nếu tập dữ liệu cần trích xuất là 100 (tài liệu)
Dữ liệu trích xuất được là: 97 (tài liệu)
Dữ liệu trích xuất đúng là: 90 (tài liệu)
1.2.2.1 Khái niệm cây DOM
DOM (Document Object Model) là một chuẩn được định nghĩa bởi W3C[21],
là một nền tảng và là giao diện ngôn ngữ trung gian cho phép chương trình và kịch bản truy cập tự động và cập nhật nội dung cấu trúc, phong cách của văn bản DOM chia làm ba phần: Core DOM: là mô hình chuẩn cho tất cả các kiểu văn bản Thứ hai là XML DOM: là loại chuẩn cho văn bản dạng XML Cuối cùng là HTML DOM: mô hình chuẩn cho các văn bản HTML Ví dụ về một bảng dưới dạng HTML:
Trang 19Hình 1.3: Ví dụ về biểu diễn cây DOM của mã HTML
1.2.2.2 Xây dựng cây DOM
Xây dựng cây DOM từ những trang Web đầu vào là một bước cần thiết trang nhiều giải thuật trích xuất dữ liệu [9] Có hai phương pháp cơ bản để xây dựng các cây DOM
- Sử dụng các thẻ riêng biệt
Hầu hết các thẻ HTML làm việc trong một cặp Mỗi cặp chứa một thẻ mở <>
và một thẻ đóng </> Bên trong mỗi cặp thẻ có thể có những cặp thẻ khác, kết quả là cấu trúc trở nên chồng chéo Xây dựng một cây DOM từ một trang Web bằng cách
sử dụng mã HTML của nó là một vấn đề cần thiết Trong một cây DOM, mỗi cặp thẻ là một node, những cặp thẻ ẩn bên trong là node con của node hiện tại Có hai nhiệm vụ cần thi hành đó là:
Làm sạch mã HTML: Một vài thẻ không cần thẻ đóng (như <li>, <hr>,<p>) mặc dù chúng có thẻ đóng Bởi vậy một thẻ đóng nên được chèn vào để tất
cả các thẻ được cân bằng Các thẻ được định dạng không tốt cũng cần thiết được sửa chữa Một thẻ sai thường là một thẻ đóng, đó là thẻ cắt ngang các
Trang 20khối ẩn bên trong Ví dụ: <tr> … <td> … </tr> … </td>, sẽ rất khó để sửa
lỗi trường hợp này nếu tồn tại sự chồng chéo đa cấp Có một vài phần mềm
mã nguồn mở để làm sạch mã HTML, một số những phần mềm thông dụng như: JTidy, NekoHTML, HTMLCleaner
Xây dựng cây: Chúng ta có thể đi theo các khối con của các thẻ HTML để xây dựng được cây DOM
- Sử dụng các thẻ và các hộp ảo (visual cue)
Thay vì phân tích mã HTML để sửa lỗi, có thể sử dụng sự biểu diễn hoặc các thông tin ảo (ví dụ như: địa chỉ trên màn hình mà các thẻ được biểu diễn) để suy luận mối quan hệ có cấu trúc của các thẻ và có thể xây dựng được cây DOM Phương thức xây dựng có thể phân tích mã HTML thành cây DOM, miễn là trình duyệt có thể hiển thị được đoạn mã đó một cách chính xác
Trong một trình duyệt web, mỗi phần tử HTML (chứa đựng một thẻ mở, các thuộc tính tùy chọn, nội dung HTML được nhúng tùy ý và một thẻ đóng, thẻ này có thể thiếu) được biểu diễn như một hình chữ nhật Thông tin ảo này có thể lấy được sau khi mã HTML được biểu diễn trên trình duyệt Một cây DOM sau đó có thể được xây dựng dựa vào các thông tin ảo này Các bước xử lý như sau:
Tìm 4 đường biên của hình chữ nhật ứng với mỗi phần tử HTML thông qua việc công cụ trình diễn của trình duyệt, ví dụ: Internet Explorer
Theo sự tuần tự của các thẻ mở và sự kiểm tra xem một hình chữ nhật có nằm trong một hình chữ nhật khác không, để xây dựng cây DOM
Ví dụ minh họa về sử dụng visual cue:
Một đoạn mã HTML có 3 lỗi sử dụng thông tin ảo có thể dễ dàng xây dựng được cây DOM
Trang 21Hình 1.4: Ví dụ xây dựng cây DOM sử dụng hộp ảo
1.2.2.3 Sử dụng cây DOM để trích xuất thông tin
Để trích xuất được thông tin cần thiết ở một node của cây DOM, chúng
ta cần chỉ rõ đường đi từ gốc của cây đến node cần trích xuất thông tin Đường đi này gọi là một XPath[14] hay mẫu trích xuất
Trích xuất thông tin web dựa vào cây DOM trước tiên việc trích xuất này được hỗ trợ bởi xây dựng cây DOM cho mã HTML của trang
Các mẫu trích xuất có thể được làm rõ như đường dẫn từ gốc của cây DOM đến node chứa nội dung cần trích xuất
Ví dụ :
Đây là cây DOM của một đoạn mã HTML chứa thông tin về cuốn sách, gồm tên cuốn sách (title) và tên tác giả (author) Bài toán đặt ra là sử dụng cây DOM này trích xuất các thông tin về tên sách và tác giả viết sách Mẫu trích xuất được xây dựng sau:
Trang 221.3 Theo dõi và thu thập dữ liệu
Máy chủ (server) là phần chịu trách nhiệm tìm kiếm, xử lý và lưu trữ các tin bài liên quan đến những từ khóa, vấn đề mà người dùng đã đăng kí với hệ thống Phía máy chủ thực hiện các chức năng của mình thông qua việc tìm kiếm các tin bài trên Internet thông qua công cụ tìm kiếm Google Sau đó tiến hành phân tích và lưu trữ những thông tin cần thiết vào cơ sở dữ liệu
Có hai cách cơ bản để lấy về các tin bài từ các công cụ tìm kiếm:
- Cách thứ nhất là sử dụng các APIs như đã trình bày trong chương 1 để
yêu cầu và lấy về phản hồi của công cụ tìm kiếm dưới dạng JSON hoặc XML Sau đó tiến hành phân tích kết quả và trích xuất ra những trường kết quả mong muốn và lưu vào cơ sở dữ liệu Tuy nhiên cách này khiến
ta trở nên bị động và bị phụ thuộc vào APIs của các nhà cung cấp Bị giới hạn về mặt số lượng kết quả, số yêu cầu cho phép, và có thể sẽ phải trả phí để có được những kết quả mong muốn
- Cách thứ hai đó là trích xuất kết quả trực tiếp từ trang web của các
công cụ tìm kiếm Do bằng cách này người phát triển sẽ chủ động tìm
Trang 23kiếm mà không phụ thuộc vào các APIs của công cụ tìm kiếm nên sẽ chủ động được số lượng kết quả mong muốn từ việc yêu cầu tìm kiếm
Do hệ thống chỉ sử dụng kết quả duy nhất từ trang tìm kiếm của Google, cần
số lượng lớn các kết quả liên quan đến vấn đề mà người dùng mong muốn theo dõi Nên để tăng hiểu quả, trong hệ thống phía máy chủ của mình, tôi sử dụng cách thứ hai, đó là trích xuất trực tiếp thông tin trên mã nguồn HTML của trang web tìm kiếm
Chức năng theo dõi và thu thập dữ liệu là phần chứa các hàm phục vụ việc gửi các yêu cầu đến Google thông qua đường dẫn:
https://www.google.com/search?lr=lang_vi&q=qsearch&safe=off&start=1&t
bs=qdr:h,lr:lang_1vi
Trong đó có một số truy vấn quan trọng
- q=qsearch trong đó q= là truy vấn của Google, và qsearch chính là từ khóa cần tìm kiếm
- tbs=qdr:h nghĩa là tìm kiếm các tin bài trong một giờ trước ta có thể
sử dụng „d‟ là các tin bài trong ngày qua, hoặc „m‟ là các tin bài trong tháng qua…
- Ngoài ra chúng ta có thể thêm một số khác để đảm bảo các kết quả đáp ứng được các yêu cầu như lr=lang_vi là tìm kiếm bằng ngôn ngữ Tiếng Việt, hay start=1 là hiển thị từ kết quả số 1,…
Sau đó sẽ lấy về HTML của trang đó và phân tích lấy những kết quả mong muốn, ở đây các kết quả được coi là Model với các trường giống nhau Và lưu vào
cơ sở dữ liệu thông qua các hàm
Nhìn chung, quá trình hoạt đông của phía máy chủ gồm qua các bước cơ bản như sau:
Trang 24Hình 1.5: Các bước xử lý của máy chủ
Bước thứ nhất: là gửi yêu cầu đến các công cụ tìm kiếm về tất cả các từ khóa
của hệ thống Với mỗi trang hiển thị của Google, cho phép hiển thị 10 kết quả Sau
đó ta lấy về toàn bộ mã nguồn của trang web kết quả
Bước thứ hai: Tiếp theo sau khi lấy được trang kết quả về, hệ thống sẽ tiến
hành phân tích mã nguồn HTML đã thu được để trích xuất những thông tin cần thiết Như đã trình bày trong phần 1.2.1, về một số phương pháp trích xuất thông tin, luận văn sử dụng phương pháp dựa trên mô hình cây DOM để sinh ra luật nhằm trích xuất các thông tin cần thiết từ các trang có cấu trúc tương tự Các kết quả hiển thị của Google ví dụ như hình:
Hình 1.6: Các kết quả hiển thị của Google
Cấu trúc của các dữ liệu tương ứng với một kết quả hiển thị dưới dạng HTML như sau:
Trang 25Hình 1.7: Mã HTML của một kết quả hiện thị
Ta có Hình 1.6 là biểu diễn HTML của một kết quả, cụ thể là kết quả đầu tiên trong Hình 1.5 Tương ứng ta có: Phần a trong Hình 1.5 tương ứng với đoạn mã 1 trong hình 1.6 nó biểu diễn tiêu đề của bài viết ở trang web gốc (Title) Phần b tương đương với đoạn mã 2, nó biểu diễn hiển thị của liên kết(Url) đến trang web gốc (DisplayUrl), và phần c tương ứng với đoạn mã 3, nó biểu diễn đoạn tóm tắt tội dung, hoặc là miêu tả ngắn gọn cho bài viết trong trang web gốc (Description) Như vậy sau khi phân tích mã trang ta có được những thuộc tính chung cần thiết để lưu trữ đó là:
- Title: tiêu đề của bài trang
- Url: đường liên kết đến trang web gốc
- DisplayUrl: Hiển thị của liên kết
- Description: Mô tả ngắn gọn của bài viết được đề cập đến
Cây DOM ta xây dựng được từ mã HTML cho mỗi kết quả tìm kiếm trên trang tìm kiếm như sau:
Trang 26Hình 1.8: Mô hình cây DOM của mỗi kết quả
Từ mô hình ta đã xây dựng ở trên, để trích xuất đƣợc thông tin đƣợc chứa trong các thẻ, ta phải xác định định danh hay nhãn của các thẻ chứa nó Có thể xác định định danh thông qua các thuộc tính:
- Thẻ tag: ví dụ „div‟, „a‟, …
- Id của thẻ, id là duy nhất: ví dụ <DIV id = “content”>…</div>
- Một hoặc nhiều Class của thẻ: ví dụ <DIV class = “class1 class2”>…</div>
- Qua các node có quan hệ với node cần định danh nhƣ node cha (parent), hay anh em (next, previous), con (children),
Những giá trị cần lấy của các thẻ nhƣ:
- Thuộc tính và giá trị của thuộc tính: nhƣ „href‟, „style‟,
- Dữ liệu văn bản (text)
- …
Trang 27Sau khi định danh được các thẻ chứa thông tin, ta có các đường đi đến các thông tin cần, cụ thể là từ các kết quả của Google như sau:
- Đường dẫn đến Tiêu đề của trang web kết quả (title):
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><h3 class = “r” ><A>.text
- Đường dẫn đến Liên kết (Url) của trang web gốc:
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><h3 class = “r” > href[<A>]
- Đường dẫn đến Hiển thị của đường liên kết (DisplayUrl):
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><DIV class = “s” ><DIV><DIV class = “f kv _os”><cite>.text
- Đường dẫn đến đoạn Mô tả của trang web gốc (Description):
<OL id = “rso”><DIV class = “srg”><LI class =
“g”><DIV class = “rc”><DIV class = “s” ><DIV><SPAN class = “st”>.text
Đường đi trên áp dụng được với mọi kết quả trong danh sách hiển thị của Google, nên ta chỉ cần xác định một lần để áp dụng cho tất cả
Bước thứ ba: Lưu những thông tin sau khi đã trích xuất được từ mã nguồn
trang web vào các bảng tương ứng trong cơ sở dữ liệu
Trang 28CHƯƠNG 2: MÔ HÌNH KIẾN TRÚC TỔNG THỂ VÀ MỘT SỐ
THUẬT TOÁN ĐÁNH GIÁ THÔNG TIN
Trong chương này sẽ trình bày về mô hình kiến trúc tổng thể của hệ thống cũng như các thành phần chi tiết ở phía máy chủ, máy khách và cơ sở dữ liệu lưu trữ thông tin Trình bày về các thuật toán đánh giá, đối sánh thông tin, các kỹ thuật, các phương pháp giải thuật áp dụng cho mỗi phần
2.1 Mô hình kiến trúc tổng thể
Xuất phát từ bài toán thực tế đã trình bày trong phần giới thiệu chung Và dựa trên những nghiên cứu, những cơ sở lý thuyết đã trình bày trong chương 1, tôi đã nghiên cứu xây dựng hệ thống Theo dõi thông tin người trên Internet, hệ thống có chức năng theo dõi thu thập những thông tin liên quan, phục vụ cho người dùng có thể đăng kí và theo dõi những gì liên quan đến những vấn đề mình quan tâm một cách dễ dàng và sớm nhất
Ứng dụng theo dõi thông tin trên Internet bao gồm các thành phần cơ bản như trong hình dưới đây:
Hình 2.1: Mô hình hệ thống
Trang 29Mô tả hoạt động:
Người dùng tương tác với hệ thống thông qua truy cập vào một ứng dụng web trên trình duyệt Ở lần truy cập đầu tiên, người dùng sẽ tạo tài khoản cá nhân và sau khi đăng nhập vào hệ thống, người dùng sẽ đăng kí các từ khóa quan tâm mà người dùng muốn thực hiện theo dõi
Sau đó từ khóa sẽ được lưu vào cơ sở dữ liệu để phía máy chủ sẽ căn cứ vào những từ khóa đó để gửi yêu cầu truy vấn tìm kiếm đến công cụ tìm kiếm của Google Lấy về các kết quả liên quan theo thời gian mới nhất, lưu vào cơ sở dữ liệu phục vụ cho người dùng trong những lần truy cập tiếp theo Tất cả các hoạt động đó đều dựa trên kết nối Internet
2.2 Các kỹ thuật chính
2.2.1 Framework Struts 2
Như chúng ta biết, java là một trong số những ngôn ngữ lập trình phổ biến nhất hiện nay Với một số ưu điểm như: Java rất dễ học, nó là một trong những ngôn ngữ mà những người mới bắt đầu học lập trình hầu hết sẽ học qua và dễ dàng nắm được, do nó được thiết kế dễ sử dụng, trình viên dịch và gỡ lỗi dễ dàng hơn các ngôn ngữ khác Java là một ngôn ngữ hướng đối tượng an toàn và mạnh mẽ Bên cạnh đó, Java là nền tảng độc lập, điều này cho phép một chương trình được tạo từ một máy tính này (ví dụ chạy trên nền tảng windows) có thể dễ dàng chạy trên những hệ thống máy tính nền tảng khác (ví dụ như Linux, Mac OS,…) Khả năng chạy các chương trình giống nhau trên nhiều hệ thống khác nhau là rất rất quan trọng trong các ứng dụng web[1][19] Nó còn cung cấp một hệ thống thư viện đồ sộ
để làm việc với nhiều đối tượng khác nhau, trong đó có các giao thức HTTP, nó cung cấp API để tương tác với Internet nhằm mục đích request và nhận response
Hệ thống được xây dựng dựa trên Framework Struts 2 là một framework mở dùng cho việc tạo các ứng dụng web bằng java
Apache Struts2 được phát triển từ WebWork 2 Sau khi làm việc độc lập trong một vài năm, cộng đồng webWork và Struts liên kết với nhau để tạo thành Struts 2
Trang 30Hình 2.2: Kiến trúc của Struts2
Struts 2 là framework theo mô hình MVC với các tầng Model, Controller, View được phân rõ ràng Như trong hình 2.2, là cấu trúc của một chương trình được xây dựng bằng framework Struts2, trong đó:
- Model được thực hiện với các Actions Lớp action chứa toàn bộ các logic nghiệp vụ và điều khiển sự tương tác giữa người dùng, lớp Model
Trang 31Khi người dùng muốn yêu cầu đến chương trình thì vòng đời của quá trình yêu cầu đó tương ứng với kiến trúc bên trên như sau: Trước tiên người dùng gửi yêu cầu đến cho server để yêu cầu về một vài tài nguyên như trang kết quả nào đó Sau đó FilterDispatcher sẽ xem xét yêu cầu và quyết định Action thích hợp Cấu hình các interceptors sẽ tiền xử lý xác nhận, file upload, … Action được chọn sẽ được thực thi để thực hiện yêu cầu Sau đó các interceptor sẽ hậu xử lý nếu như cần thiết Cuối cùng kết quả được chuẩn bị bằng View và trả lại kết quả cho người dùng[22]
2.2.2 Hệ quản trị dữ liệu MongoDB
Đối với từng kiểu dữ liệu khác nhau thì việc lựa chọn các hệ quản trị cơ sở dữ liệu phục vụ việc lưu trữ là rất quan trọng Hiện nay hệ quản trị cơ sở dữ liệu được
sử dụng nhiều nhất là các hệ quán trị cơ sở dữ liệu quan hệ (RDBMS, ví dụ điển hình như MySQL, Microsoft SQL Server,…) Trong thời gian gần đây, cùng với sự phát triển của Internet và nguồn thông tin khổng lồ phát sinh, đã xuất hiện một loại
hệ quản trị cơ sở dữ liệu mới khác hoàn toàn với các loại trước, đó chính là các hệ quản trị cơ sở dữ liệu không quan hệ NoSQL Sau khi nghiên cứu, tôi đã sử dụng cả
hệ quản trị cơ sở dữ liệu quan hệ và không quan hệ phục vụ cho mục đích lưu trữ khác nhau của mình Phần tiếp theo luận văn sẽ trình bày về các hệ quản trị cơ sở
dữ liệu này
2.2.2.1 Hệ cơ sở dữ liệu NoSQL
NoSQL là thế hệ cơ sở dữ liệu không ràng buộc (non-relational), phân tán (distributed), mã nguồn mở, và có khả năng mở rộng theo chiều ngang – có nghĩa là
có thể mở rộng khả năng lưu trữ và xử lý bằng cách thêm nhiều máy phân tán [7]
vào hệ thống lưu trữ gọi là các node Các dữ liệu thường sẽ được chia nhỏ để lưu trữ
ở nhiều máy vật lý khác nhau, mỗi phần dữ liệu bản thân nó cũng được nhân làm nhiều bản để lưu ở các vị trí khác nhau Hệ quản trị NoSQL cho phép tăng khả năng lưu trữ hơn trên nhiều máy khác nhau và tăng tốc độ xử lý truy vấn Nó phân tán, sẵn sàng xử lý khi có tình huống mất mát dữ liệu logic hay do lỗi phần cứng[6]
Với đặc thù các tin bài trên Internet là số lượng lớn, sẽ không có các sự ràng buộc lẫn nhau giữa các tin bài Một hệ quản trị cơ sở dữ liệu NoSQL rất hữu ích
Trang 32trong khi làm việc với lượng dữ liệu lớn, không có nhiều mối liên hệ lẫn nhau Nên với hệ thống của mình, tôi chọn sử dụng một hệ quản trị cơ sở dữ liệu NoSQL để lưu trữ các tin bài trả về của hệ thống
NoSQL chia làm rất nhiều loại như cụm các cột (Column Families )(tiêu biểu
là Hadoop, Cassandra), lưu trữ kiểu tài liệu (Document) (tiêu biểu là MongoDB), kiểu khóa/giá trị (Key/value) (tiêu biểu như DynamoDB), kiểu đồ thị (Graph)(như OrientDB), …
2.2.2.2 MongoDB
Hệ thống yêu cầu lưu trữ một lượng dữ liệu rất lớn từ Internet, thường xuyên cập nhật mỗi ngày do những thông tin mới phát sinh ra bất cứ thời gian nào trong ngày Vì thế hệ thống yêu cầu một hệ quản trị cơ sở dữ liệu hỗ trợ lưu trữ lớn, tốc
độ lưu trữ và tìm kiếm nhanh Do thông tin trên internet không có cấu trúc chung cho tất cả, nên yêu cầu một hệ quản trị cơ sở dữ liệu lược đồ linh hoạt hoặc phi lược
đồ Vì vậy chúng tôi chọn một hệ quản trị cơ sở dữ liệu NoSQL Trong số những hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở đang có, tôi ưu tiên lựa chọn những hệ quản trị lưu trữ theo mô hình Key/Value để có thể phù hợp với những dữ liệu cần
lưu trữ MongoDB là một trong số đó
MongoDB [17] là một hệ quản trị cơ sở dữ liệu mã nguồn mở, và được đánh giá là một hệ quản trị cơ sở dữ liệu có hiệu năng cao, thiết kế lược đồ tự do, hay không có lược đồ quan hệ MongoDB là hệ quản trị cơ sở dữ liệu hướng Document Thay vì lưu trữ dữ liệu dưới dạng bảng và các tuple như trong các cơ sở dữ liệu quan hệ, nó lưu trữ dữ liệu là các document dưới dạng JSON, cụ thể MongoDB lưu trữ dưới dạng gọi là BSON vì nó lưu trữ ở dạng binary từ một JSON document Trong MongoDB, các Collections tương ứng với các bảng (tables), các cặp key/value tương ứng với các cột và hàng trong cơ sở dữ liệu quan hệ Nó không hỗ trợ khóa ngoại và không có phép Join, Trigger, Proceduce
Trang 33MongoDB được phát triển bằng C++, hỗ trợ bản cài đặt chạy được trên nhiều
hệ điều hành như Linux, Windows, MacOS X, Solaris Về chức năng, MongoDB không đáp ứng đủ các tiêu chuẩn ACID, nhưng bù lại nó hỗ trợ mạnh mẽ cho việc
mở rộng bằng sharding, nên hệ thống có thể chạy trên nhiều máy tính, tự động cân bằng tải, tự động nhân bản dữ liệu để đảm bảo hệ thống vẫn chạy tốt trong trường hợp lỗi phần cứng
Các tính năng của MongoDB[8]:
Document data model with dynamic schemas
Full, flexible index support and rich queries
Auto-Sharding for horizontal scalability
Built-in replication for high availability
Text search
Advanced security
Aggregation Framework and MapReduce
Large media storage with GridFS
Thay vì lưu trữ dữ liệu dưới dạng bảng và các tuple như trong các CSDL quan hệ thì nó lưu trữ dữ liệu dưới dạng JSON (trong MongoDB được gọi là dạng BSON vì nó lưu trữ dưới dạng binary từ 1 JSON document)
Trang 34Hình 2.3: Lưu trữ dữ liệu dạng BSON
MongoDB hỗ trợ các thư viện cho các ngôn ngữ lập trình: C, C++, Erlang, Java, Javascript, NET, Node.js, PHP, Python, Ruby,…
Cách thức lưu trữ dữ liệu MongoDB [15]
MongoDB được rút ra từ “humongous”, có nghĩa là rất lớn Nó được phát triển từ C++ bởi công ty 10gen
Về cơ bản, mọi thứ trong MongoDb được lưu trữ với dạng document, cụ thể
là json-style document (BSON) Và như vậy là nó sẽ không có schema, không có lưu trữ dữ liệu dạng bảng như cơ sở dữ liệu quan hệ, và cũng không có joins
Dữ liệu được lưu trữ sẽ trông giống như thế này:
Trang 35created_at: new Date()
db.collection.find( <query>, )
Phương thức find() tương đương với câu SELECT trong SQL, và tương đương với mệnh đề WHERE, còn tương ứng với danh sách các fields ta cần truy vấn
Ví dụ ta có một collection chứa các bộ phim, mỗi phần tử gồm có title và rating của khán giả
Trang 36đã chạm ngưỡng max thì khi chèn thêm một phần tử mới vào thì phần tử cũ nhất sẽ
bị tống ra Capped collection thích hợp để làm logging vì tốc độ nhanh do natural ordering (dữ liệu được lưu theo thứ tự nào thì lấy ra theo thứ tự đó không cần sort)
- 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 đó
GridFS
GridFS giúp lưu trữ những file có kích thước vượt quá giới hạn của document 16MB trên một document (định dạng lưu trữ trong mongodb BJON =
BSON-“binary” + “JSON”) Nó chia một file ra nhiều phần nhỏ (parts hoặc chunks)
Mỗi chunks được lưu trữ với dạng:
Trang 37// returns default GridFS bucket (e.g "fs" collection) GridFS myFS = new GridFS(myDatabase);
// saves the file to "fs" GridFS bucket myFS.storeFile(new File("/tmp/largething.mpg"));
Tìm địa điểm trong phạm vi cho trước:
> db.places.find( { loc:{$near:[50,50], $maxDistance:5}})
Một lưu ý nhỏ là bởi vì trái đất của chúng ta không phải là một cái dĩa dẹt nên ta phải dùng công thức lượng giác để tính Tuy nhiên MongoDB cũng có hỗ trợ vấn đề này sẵn, nên chúng ta chỉ việc dùng như sau:
db.runCommand({
geoNear : "points" , near : [0,0],
spherical : true })
Nhờ những ưu điểm trên mà tôi lựa chọn MongoDB cho hệ thống của mình
2.2.3 Hệ quản trị cơ sở dữ liệu MySQL
MySQL là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở phổ biến trên thế giới chỉ sau Oracle (theo xếp hạng của trang DB-Engines[12])
Trang 38Các dự án phần mềm mã nguồn mở khi cần một hệ quản trị cơ sở dữ liệu đầy
đủ thường sử dụng MySQL Ngoài việc cung cấp miễn phí MySQL Community Edition, một số phiên bản thương mại cũng được cung cấp với nhiều tính năng bổ sung Các nền tảng web nổi tiếng sử dụng MySQL bao gồm: Joomla! (hệ quản trị nội dung), WordPress (blog), phpBB (diễn đàn) MySQL cũng là một trong các thành phần chính của gói phần mềm mã nguồn mở LAMP chuyên phát triển ứng dụng web: Linux (hệ điều hành), Apache (phần mềm cung cấp dịch vụ web), PHP (ngôn ngữ lập trình) Không giới hạn với những ứng dụng nhỏ, MySQL còn được
sử dụng trong những hệ thống lớn, của các công ty như Google, Facebook và Twitter Gần đây Google[4] và Twitter[5] đều cung cấp cho cộng đồng lập trình viên nhánh phát triển riêng của MySQL được sử dụng nội bộ với nhiều điểm cải tiến cao cấp
MySQL là hệ quản trị cơ sở dữ liệu quan hệ có cấu trúc, với cú pháp truy vấn tương đối dễ dùng, phù hợp để quản lý người dùng trong các ứng dụng Trong chương trình của mình, tôi sử dụng hệ quản trị cơ sở dữ liệu MySQL để lưu trữ thông tin người dùng, quản lý các từ khóa của họ trên hệ thống
Để một máy tìm kiếm họat động hiệu quả, ngoài kỹ thuật thu thập thông tin và tạo chỉ mục cho thông tin, chúng ta cũng cần quan tâm đến việc sử dụng các thuật toán tối ưu để tìm kiếm dữ liệu
Dữ liệu trong máy tính được lưu trữ dưới rất nhiều dạng khác nhau, nhưng phổ biến nhất vẫn là dạng chuỗi Một phép toán cơ bản trên chuỗi là đối sánh mẫu (pattern matching), bài toán yêu cầu ta tìm ra một hoặc nhiều vị trí xuất hiện của mẫu trên một văn bản Trong đó mẫu có độ dài m và văn bản có độ dài n (m ≤ n), tập các ký tự được dùng gọi là bảng chữ cái , có số lượng là
Để tăng tốc độ tìm kiếm dữ liệu thì đối sánh đa mẫu được sử dụng Trong phương pháp đối sánh đơn mẫu thì tại một thời điểm chỉ có một mẫu được đối sánh Còn trong phương pháp đối sánh đa mẫu, tại một thời điểm nhiều mẫu được đồng thời đối sánh
Trang 39Việc đối sánh mẫu diễn ra với nhiều lần thử trên các đoạn khác nhau của văn
bản Trong đó cửa sổ là một chuỗi m ký tự liên tiếp trên văn bản Mỗi lần thử
chương trình sẽ kiểm tra sự giống nhau giữa mẫu với cửa sổ hiện thời Tùy theo kết quả kiểm tra cửa sổ sẽ được dịch đi sang phải trên văn bản cho lần thử tiếp theo
2.3 Một số thuật toán đối sánh mẫu
2.3.1 Thuật toán Brute Force
- Tư tưởng: Thuật toán này thử kiểm tra tất cả các vị trí trên văn bản từ
1 cho đến n-m+1 Sau mỗi lần thử, mẫu được dịch sang bên phải một ký tự cho đến khi kiểm tra hết văn bản
Trang 40nhỏ so với n nên ta có thể coi Cmax=m*n Như vậy độ phức tạp thuật toán này là O(m*n)
2.3.2 Thuật toán Knuth Morris Pratt
Thuật toán KMP được Knuth, Morris và Pratt phát triển vào năm 1977 là thuật
toán tìm kiếm có thời gian tuyến tính O(n+m) Thuật toán này chạy khá tốt trong
thực tế, tuy nhiên cũng khá khó hiểu, vì thế khó gỡ lỗi Trước hết trình bày một
biến thể của thuật toán với thời gian tính cỡ O(n+|Σ|m) Thuật toán này có hai điểm
mạnh:
- Thuật toán này đơn giản hơn thuật toán gốc và bao gồm ý tưởng chính của thuật toán gốc
- Nếu kích thước của bảng chữ cái không quá lớn (256 với kí tự ASCII), thuật
toán này có thể coi là tuyến tính O(n+m)
Thuật toán với thời gian tính cỡ O(n+|Σ|m)
Ý tưởng của thuật toán KMP dựa trên quan sát rằng trong thuật toán trâu bò có
nhiều bước so sánh dư thừa Cụ thể, khi so sánh phần tử T[i] với P[j], nếu T[i]≠P[j], ta đã có thông tin:
T[i−1]=P[j−1],T[i−2]=P[j−1],…,T[i−j+1]=P[1](1)
Thuật toán trâu bò dịch sang P lên 1 đơn vị bằng cách và thiết lập biến chạy
trên xâu mẫu j=0 mà không tận dụng thông tin này Trong phần này, thay vì nói
"dịch xâu mẫu lên x đơn vị" ta sẽ nói "lùi biến chạy j về vị trí s" Hai cách nói này
về cơ bản là tương đương
Như vậy tại sao thông tin này lại có ích? Xét văn bản T và xâu mẫu P trong
ví dụ đầu tiên