Theo mô hình máy tìm kiếm, để xây dựng được máy tìm kiếm, cần xây dựng được hệ thống thu thập tin tức, lưu trữ, đánh chỉ mục dữ liệu và bộ phận tìm kiếm.
Khi xây dựng hệ thống thu thập dữ liệu chúng ta gặp những vấn đề cần phải giải quyết như sau:
- Hệ thống lưu trữ: chúng ta có thể nhẩm tính đơn giản 1 trang web có dung lượng khoảng 100kb. Theo thống kê không chính thức khi theo dõi các trang web ở Việt Nam có khoảng 150 triệu trang web. Như vậy tổng dung lượng cần lưu trữ của các trang web ở Việt Nam 15TB, một con số khá lớn. Còn trên thế giới, theo thống kê, trong năm 2006 thế giới có 0.18 zettabytes dữ liệu và đến năm 2011 sẽ có 1.8 zettabytes [50], 1 zettabytes = 1021 bytes. Như vậy chúng ta muốn xây dựng hệ thống tìm kiếm thông tin, thì ít nhất cần một hệ thống lưu trữ lớn hơn 30TB.
- Hệ thống thu thập các trang web: ở Việt Nam có khoảng 150 triệu trang web, trên thế giới có khoảng 2.400.000 triệu trang web, như vậy nếu muốn thu thập toàn cần có một thuật toán để có thể thu thập được một số lượng lớn các trang web. Tính trung
bình 1 máy tính chạy tuần tự, 1 giờ thu thập được khoảng 500 trang web thì không thể nào thu thập được lượng dữ liệu cần thiết. Ngoài ra, giả sử chúng ta có 150 triệu trang web cần thu thập, nếu sử dụng các giải thuật tuần tự thông thường trên một máy, giải thuật đó sẽ phải sắp xếp, đọc tuần tự từng URL cần xử lý. Ngoài ra khi thu thập rất nhiều trang web từ cùng một domain, nếu sử dụng một máy sẽ bị chặn, không có đủ băng thông để thu thập các trang web.
- Hệ thống xử lý dữ liệu: trung bình một máy tính, đọc từ ổ cứng với tốc độ 50Mb/s, xử lý dữ liệu và xuất ra, nên tốc độ xử lý rất thấp. Với 150 triệu trang web cần xử lý, nếu sử dụng thuật toán chạy trên máy đơn lẻ, sẽ mất hàng chục ngày để xử lý. Như vậy sẽ không đáp ứng được thời gian xử lý, dữ liệu sẽ bị dồn lại và không bao giờ xử lý kịp.
- Hệ thống đánh chỉ mục dữ liệu: hiện nay phần lớn các máy tìm kiếm đều sử dụng cách đánh chỉ mục ngược (inverted index). Khi sử dụng cách đánh chỉ mục ngược, cần xử lý một lượng lớn các từ, tần suất xuất hiện của một từ trong một văn bản và trong toàn thể văn bản. Hệ thống cần lưu trữ các dữ liệu cũ và cập nhật khi có dữ liệu mới. Việc tìm trong dữ liệu cũ ngày càng lớn sẽ làm hệ thống chậm đi rất nhiều, và khi tìm trong ổ cứng của một máy sẽ rất chậm. Nếu có thể chia nhỏ dữ liệu chỉ mục ra các máy và tìm kiếm song song để cập nhật lại tần suất các từ và vị trí trong chỉ mục sẽ giúp việc đánh chỉ mục nhanh hơn rất nhiều.
- Khả năng chịu lỗi, phục hồi và di trú mã: trong khi thực hiện các thao tác, nếu như một thao tác bị lỗi, thì chương trình sẽ phải xử lý như thế nào, tiếp tục chạy tiếp hay dừng lại. Nếu như chúng ta chỉ có duy nhất một tác vụ để thực thi, khi dừng lại sẽ mất toàn bộ kết quả của quá trình thực thi và sẽ phải chạy lại từ đầu, lãng phí rất nhiều thời gian và tài nguyên.
Như vậy, để xây dựng được một hệ thống tìm kiếm dữ liệu lớn, chúng ta cần một thuật toán đủ mạnh để xử lý được một lượng dữ liệu lớn. Hệ thống phải bao gồm hai phần đó là lưu trữ được dữ liệu và xử lý.
- Để lưu trữ được một lượng dữ liệu khổng lồ, ngoài cách sử dụng các hệ thống đĩa cứng lưu trữ trong các máy tính, chúng ta có thể sử dụng dịch vụ lưu trữ (SaaS – Storage as a Service) trong các hệ thống điện toán đám mây.
- Để thực hiện được các phép toán xử lý dữ liệu lớn, cần thực hiện trên môi trường phân tán trên một hệ thống cluster. Mỗi máy là một nút, thực thi các công việc, tác vụ được phân công.
- Giải thuật thực hiện các công việc trong môi trường phân tán. Giải thuật cần đảm bảo chia nhỏ dữ liệu, phân chia dữ liệu cho các tác vụ thực hiện. Giải thuật quản lý các tác vụ trong quá trình thực hiện, tổng hợp kết quả của các tác vụ thực hiện. Ngoài ra giải thuật còn phải có khả năng chịu lỗi, khi phân chia nhỏ dữ liệu cho các tác vụ thực hiện, thực thi lại tác vụ khi bị lỗi và quản lý quá trình xử lý tiếp theo của các tác vụ.
- Chi phí xây dựng: bao gồm chi phí phần cứng, các hệ thống phần mềm hoạt động, hệ thống quản lý, quản trị, vận hành. Theo tính toán của Mike Cafarella và Doug Cutting (các tác giả của Nutch [31]), để xây dựng một hệ thống tìm kiếm cho một tỉ trang web, cần ít nhất 500.000 đô la cho hệ thống phần cứng, và ít nhất 30.000 đô la mỗi tháng để vận hành hệ thống [54]. Chi phí để xây dựng và vận hành hệ thống là quá lớn, chúng ta không thể đầu tư xây dựng toàn bộ hệ thống phần cứng cho hệ thống từ thiết bị đến các hạ tầng khác. Khi cần mở rộng hệ thống, phải tiếp tục đặt mua thêm thiết bị mới. Giả sử trong thời gian đầu, cần rất nhiều máy để hệ thống chạy nhanh, nhưng sau đó có thể giảm dần số lượng cho hợp lý. Nếu như tự tổ chức hệ thống, chúng ta bắt buộc phải mua toàn bộ máy tính, đó thật sự là một sự lãng phí lớn. Ngoài ra, khi chúng ta tạm dừng dự án, chúng ta vẫn phải trả tiền duy trì, bảo dưỡng, thay mới các thiết bị hỏng. Giải pháp tiết kiệm chi phí ở đây, là sử dụng các dịch vụ về hạ tầng, sử dụng các dịch vụ nền tảng để xây dựng hệ thống tìm kiếm. Với cách sử dụng các dịch vụ này, chúng ta có thể tiết kiệm được chi phí đầu tư ban đầu, không phải mất một lượng tiền lớn để đầu tư hạ tầng, đầu tư tài nguyên để quản lý hệ thống. Mặt khác,
khi sử dụng các dịch vụ hạ tầng, chúng ta chỉ phải trả tiền cho thời gian sử dụng, khi cần dừng hệ thống, có thể lưu trữ dữ liệu hiện tại vào các hệ thống lưu trữ và dừng hệ thống, khi nào cần thiết, có thể tiếp tục sử dụng các dịch vụ này. Khi cần mở rộng trong một khoảng thời gian ngắn, chúng ta có thể dễ dàng thuê thêm máy tính, mở rộng hệ thống và trả lại khi đã sử dụng xong. Đây chính là một trong những yêu cầu cấp thiết nhất của một hệ thống tìm kiếm thông tin.
Với những yêu cầu như trên, tôi lựa chọn giải pháp sử dụng giải thuật