4,4 đếm các yếu tố khác biệt trong một dòng
trong phần này chúng ta nhìn vào một loại đơn giản thứ ba xử lý chúng tôi có thể muốn làm trên một dòng. Như với các ví dụ trước-lấy mẫu và filtering-đó là một chút khôn lanh để làm những gì chúng tôi muốn trong một số tiền hợp lý của bộ nhớ chính, Vì vậy, chúng tôi sử dụng một loạt các băm và một thuật toán ngẫu nhiên để có được khoảng những gì chúng tôi muốn có ít không gian cần thiết cho mỗi dòng.
4.4.1 vấn đề tính khác biệt
giả sử stream yếu tố được lựa chọn từ một số thiết lập universal. Chúng tôi muốn biết bao nhiêu different yếu tố đã xuất hiện trong luồng, kể từ khi bắt đầu dòng hoặc từ một số thời gian được biết đến trong quá khứ.
ví dụ 4.5: như là một ví dụ hữu ích của vấn đề này, hãy xem xét một số liệu thống kê trang Web gath-ering trên bao nhiêu người dùng duy nhất, nó đã thấy trong mỗi tháng nhất định. Tập universal là tập hợp các thông tin đăng nhập cho trang web đó, và một dòng yếu tố được tạo ra mỗi khi ai đó đăng nhập. Biện pháp này là thích hợp cho một trang web như Amazon, nơi điển hình người dùng bản ghi với tên đăng nhập duy nhất của họ. Một vấn đề tương tự như là một trang Web như Google mà không cần đăng nhập để phát hành một truy vấn tìm kiếm, và có thể xác định người sử dụng chỉ bởi địa chỉ IP mà từ đó họ gửi truy vấn. Có khoảng 4 tỷ địa chỉ IP, trình tự 2 của bốn 8-bit byte sẽ phục vụ như là bộ universal trong trường hợp này. 2
Cách rõ ràng để giải quyết vấn đề là để giữ trong bộ nhớ chính một danh sách tất cả các yếu tố mà thấy cho đến nay trong dòng. Giữ chúng trong một cấu trúc tìm efficient như một băm bảng hoặc tìm cái cây, để một nhanh chóng có thể thêm yếu tố mới và kiểm tra hay không các yếu tố mà chỉ cần đến trên dòng đã được nhìn thấy. Miễn là một số yếu tố khác biệt không phải là quá lớn, cấu trúc này có thể fit trong bộ nhớ chính và có ít vấn đề nhận được một câu trả lời chính xác cho câu hỏi làm thế nào nhiều yếu tố khác biệt xuất hiện trong luồng. Tuy nhiên, nếu số lượng các yếu tố khác biệt là quá lớn, hoặc nếu có quá nhiều dòng mà cần phải được xử lý cùng một lúc (ví dụ như, Yahoo! muốn đếm số lượng người dùng duy nhất xem mỗi trang web của nó trong một tháng), sau đó chúng tôi không thể lưu trữ dữ liệu cần thiết trong bộ nhớ chính. Có rất nhiều lựa chọn. Chúng tôi có thể sử dụng thêm máy, mỗi máy xử lý một duy nhất hoặc một số dòng. Chúng tôi có thể lưu trữ hầu hết cấu trúc dữ liệu trong bộ nhớ thứ cấp và lô stream yếu tố vì vậy bất cứ khi nào chúng tôi đưa một khối đĩa đến bộ nhớ chính sẽ có nhiều bài kiểm tra và Cập Nhật được thực hiện trên các dữ liệu trong đó khối. Hoặc chúng tôi có thể sử dụng các chiến lược được thảo luận trong phần này, nơi chúng tôi chỉ ước tính số lượng các yếu tố khác biệt nhưng sử dụng ít bộ nhớ hơn số lượng các yếu tố khác biệt.
đang được dịch, vui lòng đợi..
