Bộ lọc Xor Nhanh hơn và nhỏ hơn Bộ lọc Bloom và Cuckoo THOMAS MUELLER GRAF và DANIEL LEMIRE ∗, Đại học Quebec (TELUQ), Canada Bộ lọc Bloom cung cấp 1 tập hợp các hàm thành viên gần đúng nhanh chóng tr.
Bộ lọc Xor: Nhanh nhỏ Bộ lọc Bloom Cuckoo THOMAS MUELLER GRAF DANIEL LEMIRE ∗, Đại học Quebec (TELUQ), Canada Bộ lọc Bloom cung cấp tập hợp hàm thành viên gần nhanh chóng sử dụng nhớ Các kỹ sư thường sử dụng lọc để tránh hoạt động chậm chạp đĩa truy cập mạng Thay vào đó, lọc Cuckoo cần dung lượng lọc Bloom nhanh Chazelle cộng đề xuất tổng quát lọc Bloom gọi lọc Bloomier Dietzfelbinger Pagh mô tả biến thể lọc Bloomier trả lời truy vấn thành viên gần tập hợp bất biến Nó chưa kiểm tra theo kinh nghiệm, theo hiểu biết Chúng đánh giá việc triển khai hiệu phương pháp tiếp cận họ, mà gọi lọc xor Chúng tơi thấy lọc xor nhanh lọc Bloom cuckoo sử dụng nhớ Chúng tơi cịn cho thấy phiên nhỏ gọn lọc xor (xor +) chí sử dụng dung lượng so với lựa chọn thay nhỏ gọn (ví dụ: chuỗi nén Golomb) cung cấp tốc độ cạnh tranh với lọc Bloom I Giới thiệu Cấu trúc liệu cổ điển cho thành viên gần lọc Bloom [4] Nó cấu trúc liệu xác suất biết đến nhiều Bộ lọc Bloom giống với cấu trúc liệu tập hợp thêm khóa kiểm tra xem khóa cho có tập hợp hay khơng Có xác suất nhỏ khóa báo cáo khơng xác diện, kiện mà gọi sai số dương Tuy nhiên, lọc Bloom sử dụng nhớ ban đầu Do đó, lọc Bloom chấp nhận xác suất lỗi nhỏ việc sử dụng nhớ giảm Tư cách thành viên gần có nhiều ứng dụng: ví dụ: quét vi-rút sử dụng chữ ký tải trọng [18], lọc từ khóa địa xấu nhận dạng ngôn ngữ nhanh cho chuỗi [22] Kho lưu trữ khóa-giá trị tối ưu hóa ghi [11] chẳng hạn hợp có cấu trúc nhật ký (LSM) [29] trường hợp sử dụng quan trọng khác Trong lưu trữ vậy, cấu trúc liệu nhớ tránh việc truy cập đĩa tốn Chúng muốn cấu trúc liệu nhanh sử dụng nhớ Về mặt này, lọc Bloom thơng thường bị vượt qua: • Bộ lọc Bloom tạo nhiều truy vấn truy cập ngẫu nhiên Để sử dụng nhớ hiệu quả, lọc Bloom với xác suất sai số dương ϵ nên sử dụng khoảng - log2 ϵ hàm băm [10] Với xác suất sai số dương 1%, cần có bảy hàm băm Ngay việc tính tốn hàm băm miễn phí, việc thực nhiều lần truy cập nhớ ngẫu nhiên tốn • Giới hạn lý thuyết cho cấu trúc liệu thành viên gần với xác suất sai số dương ϵ - log2 ϵ bit khóa [10] Khi áp dụng cách tối ưu, lọc Bloom sử dụng nhớ nhiều 44% so với giới hạn lý thuyết Trên thực tế, lọc Bloom thường chậm lớn lựa chọn thay lọc Cuckoo[20] Chúng ta làm tốt lọc Cuckoo không? Bonomi cộng [5] Broder Mitzenmacher [10] nhận xét tập tĩnh, sử dụng nhớ tối ưu cách sử dụng hàm băm hoàn hảo dấu vân tay Họ bác bỏ khả phần hàm băm hồn hảo q đắt để tính tốn Tuy nhiên, Dietzfelbinger Pagh [17] mô tả cách triển khai thực tế ý tưởng mà chúng tơi gọi lọc xor Nó xây dựng dựa công việc liên quan chặt chẽ lọc Bloomier [12, 13] Theo hiểu biết chúng tôi, lọc xor chưa triển khai chuẩn hóa Chúng tơi trình bày đánh giá thử nghiệm Chúng thấy chúng hoạt động tốt, thường nhanh lọc Bloom cuckoo Đối với trường hợp sử dụng phổ biến, chúng yêu cầu nhớ Hơn nữa, chúng tơi cải thiện việc sử dụng nhớ chúng với hình phạt hiệu suất khiêm tốn, cách sử dụng kỹ thuật nén tương đối đơn giản (xem § 3.3) Chúng tơi cung cấp miễn phí phần mềm để đảm bảo khả tái tạo Kết chúng tơi lọc xor có giá trị cấu trúc liệu thực tế Chúng nhanh, gọn thấy chúng dễ thực II Công việc liên quan Chúng tìm thấy nhiều lọc Bloom cấu trúc liệu liên quan hệ thống sở liệu [11] để tránh truy cập đĩa Một chiến lược phổ biến để thiết kế công cụ sở liệu phải hỗ trợ cập nhật thường xuyên hợp có cấu trúc nhật ký (LSM) [29] Ở mức cao, LSM trì thành phần nhớ nhanh chóng hợp nhất, theo lơ, với liệu lưu trữ liên tục Thành phần nhớ tích lũy cập nhật sở liệu phân bổ chi phí cập nhật cho nhớ liên tục Để tăng tốc tra cứu, nhiều triển khai LSM (ví dụ: levelDB, RocksDB, WiredTiger) sử dụng lọc Bloom Khi hợp thành phần, thường lọc xây dựng Thay vào đó, chúng tơi cập nhật lọc có Tuy nhiên, cấu trúc liệu hỗ trợ hợp nhanh (ví dụ: lọc Bloom) yêu cầu lọc ban đầu phải có thêm dung lượng kết việc hợp có xác suất sai số dương cao [2] Nhiều ứng dụng lọc Bloom cấu trúc liệu liên quan tìm thấy mạng, nơi chúng tơi tìm cách tránh truy cập mạng khơng cần thiết Nói chung, lọc phải gửi qua kết nối mạng tới máy tính khác (ví dụ: để lưu vào nhớ cache ngăn truy vấn mạng), chúng tơi coi lọc bất biến [27] máy nhận 2.1 Các loại lọc Bloom Bộ lọc Bloom tiêu chuẩn [4] bao gồm tập hợp hàm băm h1, h2 , , hk, ánh xạ khóa thành số nguyên cố định mà diễn giải dạng giá trị mục mảng bit B, khởi tạo số khơng Kích thước mảng số hàm băm k tham số lọc Khi chúng tơi thêm khóa x, chúng tơi băm với hàm băm đặt bit tương ứng: B[h1(x)]←1, B[h2(x)]←1, B[hk(x)] ← Để xác định xem khóa định có khả xuất hay không, kiểm tra xem bit tương ứng mảng có đặt hay khơng: (B[h1(x)] = 1) and (B[h2(x)] = 1) and · · · and (B[hk(x)] = 1) Do đó, có k hàm băm, cần kiểm tra tới k bit Đối với khóa thêm vào, chúng tơi đảm bảo tất bit đặt: sai số âm Nhưng có kết sai số dương, bit đặt khóa khác Bộ lọc Bloom tiêu chuẩn khơng cho phép chúng tơi loại bỏ khóa Bộ lọc Bloom hỗ trợ thêm khóa kích thước mảng bit số lượng hàm băm, xác suất sai số dương tăng lên nhiều mục nhập thêm vào đó, nhiều bit đặt Kích thước mảng B thường chọn để đảm bảo xác suất sai số dương định với số lượng mục nhập lớn tham số tối ưu k tính tốn Chi phí không gian dự kiến cho lọc Bloom tối ưu 44%: yêu cầu thiết lập k = - log2ϵ ϵ giới hạn mong muốn xác suất sai số dương Bộ lọc Bloom thực đồng thời [39] Bộ lọc Bloom bị chặn [24, 35] bao gồm nhiều lọc Bloom nhỏ, lọc dịng đệm CPU, để chúng cần quyền truy cập nhớ cho hoạt động Tuy nhiên, tải lọc nhỏ khơng đồng đều, đó, xác suất sai số dương, chúng thường cần nhiều không gian lọc Bloom tiêu chuẩn khoảng 30% Các hướng dẫn CPU nâng cao cho phép tăng tốc độ kiểm tra thành viên cho lọc Bloom thông thường bị chặn [32] Có nhiều loại khác lọc Bloom bao gồm lọc Bloom đếm [5, 36] hỗ trợ xóa khóa với chi phí lưu trữ nhiều hơn, lọc Bloom nén [27], lọc Bloom đa chiều [14], lọc Bloom ổn định [15], v.v 2.2 Các loại dựa dấu vân tay Các loại dựa dấu vân tay lưu trữ dấu vân tay khóa, dấu vân tay kết hàm băm h; thơng thường, từ có số bit cố định Kiểm tra tập hợp bao gồm việc truy xuất so sánh với dấu vân tay liên quan cho khóa cho Trực giác chung sau Với giá trị x tập hợp, lưu trữ dấu vân tay h(x) cấu trúc liệu khóa-dấu vân tay Với giá trị ứng cử viên y, truy cập dấu vân tay từ cấu trúc liệu so sánh kết với h(y) Bất y phần tập hợp, dấu vân tay khớp với nhau, khơng, chúng khác với xác suất phụ thuộc vào kích thước dấu vân tay • Trình tự nén Golomb [35] lưu trữ dấu vân tay xếp cách mã hóa khác biệt giá trị dấu vân tay Chi phí mã hóa 1,5 bit cho khóa, khó để đạt tốc độ cạnh tranh • Bộ lọc Cuckoo [20] dựa vào băm Cuckoo Ở công suất tối đa với xác suất sai số dương thấp, chúng sử dụng khơng gian lọc Bloom kiểm tra tập hợp thường nhanh Chi phí bit cho khóa lọc Cuckoo tiêu chuẩn bit khóa loại bán phân loại chậm Chúng việc triển khai lọc Cuckoo hỗ trợ cập nhật đồng thời có chiến lược đồng thời băm Cuckoo liên quan [26] • Bộ lọc Quotient [31] lưu trữ dấu vân tay bảng băm nhỏ gọn Bộ lọc Quotient lọc Cuckoo sử dụng lượng nhớ tương tự • Bộ lọc Morton [8] tương tự lọc Cuckoo, sử dụng thùng nén tải trọng hơn, bảng Horton [9] Nhiều nhóm thưa thớt kết hợp thành khối để liệu lưu trữ dày đặc • Bộ lọc Bloomier [12, 13] hỗ trợ đánh giá gần chức tùy ý, truy vấn tập hợp gần Chúng quan tâm đến dạng lọc Bloomier [17] sử dụng cho truy vấn tập hợp gần Chúng gọi biến thể lọc xor (§3) Các loại khác đề xuất [33, 40] tác giả bỏ qua việc cung cấp chuẩn hóa triển khai thực tế Dietzfelbinger Pagh [17] quan sát thấy kỹ thuật dấu vân tay mở rộng cách lưu trữ liệu bổ trợ với dấu vân tay III BỘ LỌC XOR Cho khóa x, chúng tơi tạo dấu vân tay k-bit (lưu ý fingerprint(x)) cách sử dụng hàm băm chọn ngẫu nhiên Chúng giả định hàm băm hoàn toàn độc lập lý tưởng hóa; tất dấu vân tay có khả để P(fingerprint(x) = c) = 1/2 k với x c Xác suất ϵ = / 2k xác định xác suất sai số dương lọc Chúng tóm tắt ký hiệu chúng tơi Bảng Chúng ta muốn xây dựng ánh xạ F từ tất phần tử thành số nguyên k-bit cho ánh xạ tất khóa y từ tập S thành fingerprint(x) k-bit chúng Do đó, chọn phần tử tập hợp, ánh xạ tới dấu vân tay theo thiết kế F(y) = fingerprint(y) Bất kỳ giá trị phần lọc ánh xạ tới giá trị khác với dấu vân tay với xác suất - ϵ = - 1/2k Bảng Kí hiệu U S |S| B c=|B| fingerprin t Tập hợp tất yếu tố có (ví dụ: tất chuỗi) tập hợp phần tử từ tập hợp U (còn gọi "khóa") số lượng tập hợp S mảng giá trị k-bit kích thước (hoặc dung lượng) mảng B, ta đặt c = ⌊1,23 · | S | ⌋ + 32 Hàm băm ngẫu nhiên ánh xạ phần tử giá trị U thành k-bit (số nguyên [0, 2k)) h0,h1,h2 hàm băm từ U thành số nguyên [0, ⌊c / 3⌋), [⌊c / 3⌋, ⌊2c / 3⌋), [⌊2c / 3⌋, c) tương ứng x xor y bitwise loại trừ-hoặc hai giá trị B[i] giá trị k-bit mục i (các mục 0) ϵ xác suất sai số dương Chúng ta lưu trữ dấu vân tay mảng B có dung lượng c lớn chút so với số tập | S | (tức là, c ≈ 1,23 × | S |) Chúng tơi chọn ngẫu nhiên độc lập ba hàm băm h0, h1, h2 từ U đến dãy giá trị nguyên liên tiếp (h0: S → {0, , C / - 1}, h 1: S → {c / , ., 2c / - 1}, h 2: S → {2c / 3, , C - 1}) Ví dụ: c = 12, có phạm vi {0 , , 3}, {4, , 7} {8 , , 11} Mục tiêu để tập hợp loại trừ tổng hợp giá trị mảng B vị trí cung cấp ba hàm băm đồng ý với dấu vân tay (B [h (x)] xor B [h1 (x)] xor B [h2 (x)] = fingerprint (x)) cho tất phần tử x ∈ S Các hàm băm h0, h1, h2 giả định độc lập với hàm băm sử dụng cho vân tay 3.1 Kiểm tra tập hợp Hàm kiểm tra tập hợp (Thuật tốn 1) tính tốn hàm băm h 0, h1, h2, sau xây dựng dấu vân tay mong đợi từ mục nhập bảng B so sánh với dấu vân tay khóa cho Nếu chìa khóa nằm bộ, bảng chứa dấu vân tay khớp Thời gian xử lý bao gồm việc tính tốn ba hàm băm ba lần truy cập nhớ ngẫu nhiên Mặc dù cấu trúc liệu liên quan khác cần quyền truy cập nhớ hơn, hầu hết xử lý đại cấp nhiều ba quyền truy cập nhớ đồng thời nhờ tính song song mức nhớ [1, 23, 34] Do đó, khơng nên mong đợi thời gian xử lý tăng trực tiếp với số lần truy cập nhớ 3.2 Xây dựng Việc xây dựng tuân theo thuật toán từ Botelho cộng [6] để xây dựng siêu đồ thị phần ngẫu nhiên xoay vịng Chúng tơi áp dụng Thuật tốn gọi Thuật toán nhiều lần thành cơng, chuyển hàm băm chọn ngẫu nhiên h0, h1, h2 với lần gọi Trong thực tế, chọn hàm băm cách tạo hạt giả ngẫu nhiên Cuối cùng, chúng tơi áp dụng Thuật tốn Thuật tốn hoạt động sau Chúng ta khởi tạo mảng (tạm thời) H gồm khóa có kích thước ⌊1,23 · | S | ⌋ + 32 Lúc đầu, tất trống Sau đó, chúng tơi lấy khóa x từ tập S, chúng tơi băm ba lần (h0(x), h1(x), h2(x)) Chúng tơi nối khóa x vào ba ba giá trị băm (bộ H[h 0(x)], H[h1(x)], H[h2(x)]) Hầu hết bảng H chứa nhiều khóa, gần chắn số chứa xác khóa Chúng tơi theo dõi chứa khóa Lặp lại, chúng tơi chọn vị trí vậy, nối vào ngăn xếp đầu với khóa x mà chứa; lần xóa khóa x khỏi ba vị trí (h 0(x), h1(x), h2(x)) Quá trình kết thúc với ngăn xếp chứa tất khóa trường hợp thành công thất bại Xác suất thành công tiếp cận 100% tập hợp lớn [28] Đối với có kích thước 107, Botelho cộng [6] nhận thấy xác suất gần Đối với tập hợp nhỏ hơn, thực nghiệm thấy xác suất ước lượng lớn 0,8 với c = 1,23 · | S | + 32, Hình Thuật tốn chạy thời gian tuyến tính kích thước tập đầu vào S miễn việc thêm xóa khóa x khỏi tập H thực thời gian khơng đổi Thật vậy, khóa x S ban đầu thêm vào ba H bị loại bỏ nhiều lần khỏi ba giống Trong thực tế, khóa S giá trị số nguyên đối tượng có độ dài cố định khác, triển khai cách sử dụng đếm giá trị nguyên mặt nạ độ dài cố định (cả hai khởi tạo số không) Khi thêm khóa, chúng tơi tăng đếm tính tốn riêng-hoặc khóa với mặt nạ, lưu trữ kết dạng mặt nạ Tương tự, loại bỏ khóa cách giảm đếm tính tốn một-hoặc Ngay tập hợp tạo phần tử có độ dài thay đổi lớn, thực tế biểu diễn chúng dạng số nguyên có độ dài cố định nhỏ (ví dụ: 64-bit 128-bit) cách băm: điều xảy với chi phí giới thiệu lỗi nhỏ hai giá trị băm xung đột với nhau, kiện khơng thể xảy làm tăng xác suất sai chút Chúng thấy thú vị xem xét phần thứ hai Thuật tốn thành cơng Chúng tơi lặp lặp lại làm trống hàng đợi Q, phần tử thời điểm Tại lần lặp t, thêm khóa x số i tương ứng vào ngăn xếp x khóa đơn tập H[i], xóa khóa x khỏi tập vị trí h 0(x), h1(x), h2(x) Do đó, theo cấu trúc, lần Thuật toán thêm khóa x mục i vào ngăn xếp, số i khác với mục h0(x′), h1(x′), h2(x′) cho tất khóa x′ gặp muộn (tại thời điểm t′> t) Để xây dựng lọc xor, phân bổ mảng B đủ lớn để lưu trữ ⌊1.23 · | S | ⌋ + 32 dấu vân tay Chúng tơi lặp lại khóa mục chúng theo thứ tự ngược lại, so với cách chúng xác định “Bước lập map” (Thuật tốn 3) Với khố, có ba vị trí tương ứng h 0(x), h1(x), h2(x) bảng B; số liên kết với khóa h0(x), h1(x), h2(x) Ta đặt giá trị B[i] cho B[h0(x)] xor B[h1(x)] xor B[h2(x)] = inherit(x) Chúng tơi lặp lại điều cho phím Mỗi khóa xử lý lần Bằng cách xây dựng chúng tôi, mục nhập B sửa đổi nhiều lần Sau sửa đổi mục nhập B [i], khơng giá trị số giá trị B[h0(x)], B[h1(x)], B[h2(x)] sửa đổi lại Điều lập luận chúng tơi, nơi chúng tơi làm việc Thuật tốn ngược lại: i khác với h0(x′), h1(x′), h2(x′) cho tất khóa x′ gặp phải Hãy nhớ sử dụng ngăn xếp, mục nhập cuối thêm vào Hình Xác suất bước ánh xạ, tìm thấy thực nghiệm với 1000 tạo ngẫu nhiên ngăn xếp Thuật toán bị loại bỏ Thuật tốn Do đó, cấu trúc đúng: có B[h0(x)] xor B[h1(x)] xor B[h2(x)] = fingerprint(x) cho tất khóa x S cuối Thuật toán 3.3 Tối ưu hóa khơng gian: Bộ lọc Xor + Khoảng 19% mục nhập bảng B trống: với 100 khóa, cần 123 mục nhập 23 mục trống Đối với q trình truyền dẫn, phần lớn khơng gian trống lưu lại sau: trước gửi B, gửi mảng bit có chứa '0' cho mục trống '1' cho mục bị chiếm Sau đó, chúng tơi gửi liệu mục bị chiếm dụng Nếu sử dụng k = bit, lọc xor thông thường cần × 1,23 = 9,84 bit cho mục nhập, nén theo cách thành + 1,23 = 9,23 bit cho mục nhập Nếu việc sử dụng dung lượng thời gian chạy quan trọng tốc độ truy vấn, tính nén sử dụng thời gian chạy Chúng tơi có quyền truy cập thời gian liên tục cách sử dụng cấu trúc liệu xếp hạng chẳng hạn Xếp hạng [38], với chi phí lưu trữ nhỏ (≈25%), anh túc [41] với tổng chi phí chí cịn nhỏ (≈3%) chi phí số tốc độ Bằng cách thay đổi chút thuật toán xây dựng, chúng tơi di chuyển hầu hết mục trống đến phần ba cuối bảng B Để làm vậy, thay đổi thuật toán ánh xạ để ba hàng đợi sử dụng thay một: cho hàm băm — Hàm băm đại diện cho phần ba bảng B Sau đó, chúng tơi xử lý mục nhập hai hàng đợi chúng trống, trước xử lý mục nhập từ hàng đợi thứ ba Theo thực nghiệm, thấy trung bình 36% mục nhập phần ba cuối bảng B trống Nếu cấu trúc liệu xếp hạng sau xây dựng cho phần bảng, khơng gian tiết kiệm mà không ảnh hưởng nhiều đến hiệu suất kiểm tra thành viên, cần thao tác xếp hạng Chúng tơi gọi thuật tốn “xor + filter”, sử dụng Rank9 làm cấu trúc liệu xếp hạng mặc định Với kích thước vân tay tính bit k, cần k × 1,23 × 2/3 bit khóa cho 2/3 bảng B, k × 1,23 × 1/3 × (1 - 0,36) cho 1/3 cuối cùng, cộng với 1,23 × 1/3 × 1,25 cho cấu trúc liệu Rank9 Tóm lại, lọc xor + sử dụng 1,0824k + 0,5125 bit cho mục nhập trái ngược với 1,23k bit cho mục cho lọc xor 3.4 So sánh không gian Chúng so sánh việc sử dụng không gian số lọc quan trọng Hình Bộ lọc Bloom hiệu không gian so với lọc cuckoo với xác suất sai số dương 0,4% cao Đối với xác suất sai số dương thấp (5,6 × 10−6), lọc cuckoo cơng suất tối đa sử dụng khơng gian lọc xor Tuy nhiên, hệ thống sử dụng xác suất sai số dương thấp vậy: hầu hết hệ thống dường sử dụng từ đến 20 bit cho khóa [16, 37] Vì vậy, chúng tơi mong đợi lọc xor xor + sử dụng nhớ thực tế 10 THÍ NGHIỆM Chúng tơi tn theo quy trình thử nghiệm Fan cộng [20]; dự án phần mềm họ [19] Giống chúng, chúng tơi sử dụng khóa 64-bit làm phần tử tập hợp Chúng xây dựng lọc dựa tập hợp khóa 10M 100M Chúng tơi xây dựng tập hợp riêng biệt gồm 10 triệu khóa truy vấn Tập hợp khóa truy vấn tạo cách trộn số khóa từ tập hợp ban đầu số khóa khơng có tập hợp ban đầu Chúng tơi sử dụng phân số khác (ví dụ: 0%, 25%, 50%, 75% 100%) khóa ban đầu Điểm chuẩn đếm số lượng khóa truy vấn có tập hợp theo lọc Điểm chuẩn luồng gọi chức kiểm tra thành viên với khóa khác vịng lặp Chúng tơi vơ hiệu hóa nội tuyến chức để ngăn trình biên dịch tối ưu hóa q mức điểm chuẩn tính số khóa phù hợp Hình Sử dụng nhớ lý thuyết cho lọc Bloom (được tối ưu hóa cho khơng gian), lọc Cuckoo (ở công suất tối đa) lọc xor cho giới hạn mong muốn xác suất sai số dương Chúng chạy điểm chuẩn vi xử lý Intel với vi kiến trúc Skylake: xử lý Intel i7-6700 chạy tốc độ 3,4 GHz, với MB nhớ đệm L3 11 Phần mềm biên dịch trình biên dịch GNU GCC 8.1.0 sang tệp thực thi Linux 64-bit với fl ags -O3 -march = native Đối với lọc, chạy kiểm tra báo cáo giá trị trung bình Biên độ sai số 3% Mã nguồn C ++ triển khai fi lter điểm chuẩn có sẵn1 Đối với số thuật toán bao gồm tất xor xor + filters, triển khai Java phiên bản2 phiên Go phiên phiên C túy 4, điểm chuẩn sử dụng C ++ Đối với tất cách triển khai, sử dụng biến âm Murmur fi [21] gieo hạt ngẫu nhiên để tính tốn dấu vân tay từ khóa, mơ tả Thuật tốn Chúng tơi chọn tùy chọn thay lựa chọn thay nhanh để khóa khơng ngẫu nhiên hoạt động tốt không dẫn đến kết trường hợp xác suất dương tính giả cao mong đợi, lỗi xây dựng trường hợp lọc cuckoo Đối với thử nghiệm chúng tơi, chúng tơi sử dụng khóa giả tạo ngẫu nhiên; thử nghiệm với khóa tạo khơng tìm thấy khác biệt đáng kể mặt thống kê so với việc sử dụng khóa ngẫu nhiên sau giới thiệu trình hồn thiện Murmur Tất triển khai cần giảm giá trị băm x xuống phạm vi {0 , , m - 1} m không thiết lũy thừa hai Khi điều cần thiết, không sử dụng hoạt động modulo tương đối chậm x mod m lý hiệu suất Thay vào đó, bắt đầu với giá trị 32-bit x m tính tốn tích 64-bit đầy đủ chúng x×m, chúng tơi sử dụng tổ hợp dịch chuyển nhân nhanh (x × m) ữ 32 = (x ì m) >> 32 [25] 4.1 Triển khai lọc Chúng chạy thử nghiệm lọc sau: • Bộ lọc Bloom: Chúng tơi triển khai thuật tốn lọc Bloom tiêu chuẩn với xác suất dương tính giả xác định (FPP) kích thước Chúng kiểm tra với 8, 12 16 bit khóa số hàm băm tương ứng k cần thiết để có xác suất dương tính giả thấp Để xây dựng nhanh kiểm tra thành viên, 12 băm lần với hàm 64 bit, coi hai giá trị 32 bit h 1(k) h2(k) Hàm băm Bloom filter дi (k) = h1(k) + i·h2(k) cho i = , , k - • Bộ lọc Bloom bị chặn: Chúng sử dụng lọc Bloom bị chặn tối ưu hóa cao từ Apache Impala 5, lọc sử dụng dự án phần mềm cuckoo fi lter [19] Chúng tơi chỉnh sửa để kích thước linh hoạt khơng bị giới hạn 2n Nó thiết kế cho hoạt động 256-bit Intel AVX2; viết chức nội cấp thấp Intel Ưu điểm thuật toán tốc độ kiểm tra thành viên: kiểm tra thành viên giải từ dòng đệm sử dụng vài lệnh Nhược điểm lớn lọc Bloom thơng thường • Cuckoo filter (C): Chúng tơi bắt đầu với việc triển khai lọc cuckoo từ tác giả ban đầu [19] Chúng giảm tải tối đa từ 0,96 xuống 0,94, khơng, việc thi cơng đơi không thành công Giảm tải tối đa rõ ràng cách giải khuyến nghị tác giả cuckoo filter Mặc dù nằm ngồi phạm vi chúng tơi để đánh giá xem có ln fix đáng tin cậy hay khơng, đủ trường hợp Việc giảm tải tối đa làm giảm nhẹ (≈2%) việc sử dụng nhớ cuckoo filters Trong triển khai tài liệu tham khảo ban đầu [20], kích thước filter bị giới hạn mức lũy thừa hai, có nghĩa tối đa 50% không gian không sử dụng Lãng phí q nhiều khơng gian dường có vấn đề, đặc biệt khơng cải thiện xác suất sai số dương Do đó, chúng tơi sửa đổi để kích thước sử dụng không bị giới hạn n Điều u cầu chúng tơi thay đổi chút tính tốn cho vị trí thay l 2(x) cho khóa x từ vị trí l1(x) dấu vân tay f(x) Thay l2(x) = l1(x) xor h(f(x)) Fan et al [20], sử dụng l (x) = bucketCount - l1(x) - h(f(x)), kết âm, thêm bucketCount Chúng sử dụng dấu vân tay 12 bit 16 bit • Cuckoo bán phân loại (Css): Chúng tơi sử dụng triển khai tham chiếu lọc cuckoo bán phân loại, sửa đổi theo cách tương tự lọc cuckoo thông thường Từ phát hành nguồn gốc Fan cộng [20], chúng tơi nhận biến thể hoạt động xác, phiên có kích thước vân tay 13 bit Các phiên khác có xác suất sai số âm khác khơng 13 • Trình tự nén Golomb (GCS): Việc triển khai chúng tơi sử dụng kích thước nhóm trung bình 16 mã hóa Golomb Rice Chúng tơi sử dụng kích thước fingerprint bit • Xor: xor xor + filters mơ tả § Chúng tơi sử dụng dấu ấn vân tay bit 16 bit 4.2 Hiệu suất xây dựng Chúng tơi trình bày thời gian xây dựng cho 10 triệu 100 triệu khóa Bảng Tất thuật toán xây dựng đơn luồng; không điều tra cấu trúc đa luồng Để tham khảo, đưa thời gian cần thiết để xếp khóa 64 bit cách sử dụng thuật tốn xếp tiêu chuẩn C ++ (std :: sort), tảng Trong trình xây dựng, lọc Bloom bị chặn rõ ràng cấu trúc liệu nhanh Đối với trường hợp 100 triệu, biến thể bán phân loại lọc cuckoo chậm Việc xây dựng lọc xor với việc triển khai nhanh gần nửa so với lọc Cukoo lọc Bloom, có hiệu suất tương tự 4.3 Thời gian truy vấn so với chi phí khơng gian 14 Chúng tơi trình bày số hiệu suất cho trường hợp 25% mục nhập tìm kiếm nằm tập hợp Hình trường hợp tất mục nhập tìm kiếm nằm tập hợp Hình Kết trình bày dạng bảng Bảng 3, chúng tơi bao gồm trình tự nén Golomb Không giống xor cuckoo filters, thời gian kiểm tra tư cách thành viên Bloom filter nhạy cảm với phần nhỏ phím có Khi mục nhập khơng có tập hợp, vài bit cần truy cập, hàm truy vấn tìm bit chưa đặt trả Bộ lọc Bloom chậm mục nhập tồn tập hợp, phải kiểm tra tất bit; điều đặc biệt với trường hợp xác suất dương tính giả thấp Xem Hình Bỏ qua thời gian truy vấn, Hình cho thấy Cuckoo 12 (C12) có mức sử dụng nhớ gần với lọc Bloom Bộ lọc cuckoo sử dụng khơng gian nhiều so với lọc Bloom cho xác suất sai số dương 1% (Cuckoo 16 C16) Trong thử nghiệm chúng tôi, lọc chim cúc cu lọc chim cu gáy phân loại chậm (Css), sử dụng nhiều không gian lọc xor Các kết thực nghiệm phù hợp với kết lý thuyết trình bày Hình 15 4.4 Thảo luận Chúng cho hiệu suất kiểm tra tư cách thành viên tốt lọc xor chủ yếu lý sau Bộ lọc Xor sử dụng xác lần truy cập nhớ, khơng phụ thuộc vào xác suất dương tính giả Các truy cập nhớ thực thi song song hệ thống nhớ Số lượng hướng dẫn khơng có chi nhánh Đối với xác suất dương tính giả 1%, lọc Bloom tiêu chuẩn cần nhiều quyền truy cập nhớ ổ khớp chí nhiều để xác suất dương tính giả thấp Bộ lọc Bloom sử dụng từ 41 đến 105 lệnh cho khóa, tùy thuộc vào số lượng bit thiết lập xác suất dương tính giả Đối với lần bỏ sót (nếu khóa khơng có bộ), trung bình cần quyền truy cập nhớ hơn, có nhánh bị nhầm lẫn với hình phạt kèm 16 Bộ lọc cuckoo sử dụng xác lần truy cập nhớ 66 đến 68 lệnh cho phím (tùy thuộc vào kích thước vân tay) Bộ lọc xor sử dụng xác lần truy cập nhớ, có khoảng 48 lệnh cho phím Bộ xử lý thực lệnh máy phức tạp cách sử dụng lệnh cấp thấp gọi µops Một xử lý Skylake chúng tơi hỗ trợ tới 10 yêu cầu nhớ vượt trội lõi, bị giới hạn đệm xếp lại lệnh 200 µops Trong trường hợp khơng có nhánh dự đốn sai chuỗi phụ thuộc dài, khả đệm lệnh trở thành hạn chế [3] Đó lý lọc cuckoo lọc xor có hiệu suất kiểm tra thành viên tương tự Có nghĩa là, 17 lọc cuckoo có quyền truy cập nhớ hơn, tạo nhiều lệnh khiến xử lý khó tìm nạp nhiều yêu cầu nhớ Bảng Thời gian xây dựng, sử dụng nhớ thời gian truy vấn (25% số mục nhập bộ) cho lọc chim cu gáy nguyên nhỏ gọn với 10 triệu phím Trong điểm chuẩn chúng tơi, lọc Bloom bị chặn thuật tốn rõ ràng nhanh lọc xor Điều có quyền truy cập nhớ mã tối ưu hóa cao, sử dụng hướng dẫn SIMD dành riêng cho xử lý x64 gần Nó cần quyền truy cập nhớ hướng dẫn so với đối thủ cạnh tranh Có thể khác triển khai cách tiếp cận hiệu tương tự ngôn ngữ cấp cao Java sử dụng mã di động Nếu việc sử dụng nhớ xác suất dương tính giả thấp mối quan tâm chính, lọc Bloom bị chặn khơng phải lựa chọn tốt Mặc dù lọc xor bất biến, chúng tơi tin khơng phải giới hạn nhiều ứng dụng quan trọng; Các lựa chọn thay cạnh tranh có khả đột biến hạn chế trường hợp Các lọc gần hỗ trợ sáp nhập bổ sung nhanh (ví dụ: lọc Bloom) yêu cầu lọc ban đầu phải có thêm dung lượng Bản cập nhật chí khơng thành cơng trường hợp lọc Cuckoo Việc xây dựng lại lọc trì kích thước tối ưu Trong hệ thống đa luồng, tính bất biến tránh chi phí chế đồng hóa để trì tính đồng thời KẾT LUẬN VÀ CƠNG VIỆC TƯƠNG LAI Bộ lọc Xor thường nhanh lọc Bloom chúng tiết kiệm khoảng 15% nhớ sử dụng Mặc dù việc xây dựng lọc xor chậm lọc Bloom (≈ ×), chúng tơi kỳ vọng việc xây dựng chi phí lần phân bổ theo nhiều truy vấn Công việc tương lai xem xét truy vấn theo lơ [8] để cải thiện hiệu suất Cũng song song phần cấu tạo lọc 18 A BỘ LỌC CUCKOO NHỎ GỌN PHIÊN BẢN GỐC Trong Bảng 4, so sánh triển khai ban đầu lọc cuckoo yêu cầu kích thước lọc lũy thừa hai, với cách triển khai nhỏ gọn chúng tơi Với 10 triệu khóa, việc sử dụng nhớ lọc cuckoo cách sử dụng triển khai ban đầu không cạnh tranh Tuy nhiên, thời gian xây dựng giảm xuống với lọc phân bổ tổng thể va chạm băm xảy Tương tự, thời gian truy vấn (25% mục nhập tập hợp) nhỏ khoảng 10% trình triển khai ban đầu Tuy nhiên, chọn số lượng khóa gần hai (ví dụ: 31,5 triệu khóa), triển khai gốc nhỏ gọn có mức sử dụng nhớ, thời gian xây dựng tốc độ truy vấn gần giống B BỘ LỌC QUOTIENT VÀ MORTON Chúng xem xét lọc thương số [31] (CQF) thực nghiệm Chúng sử dụng cách triển khai tham chiếu [30] Việc triển khai dựa mã lắp ráp tối ưu hóa cho xử lý x64 gần Giống với lọc chim cu gáy, việc triển khai ban đầu yêu cầu công suất phải lũy thừa Bảng cho thấy thời gian truy vấn việc triển khai lọc tham chiếu gấp vài lần thời gian truy vấn phương pháp tiếp cận cạnh tranh lọc cuckoo xor Chúng xem xét lọc Morton [8] với việc triển khai tài liệu tham khảo [7] Bộ lọc Morton trả lời truy vấn lần với tốc độ nửa tốc độ lọc xor bit, xác suất sai số dương tương tự mức sử dụng nhớ TÀI LIỆU THAM KHẢO [1] Shoaib Akram, Jennifer B Sartor, Kenzo Van Craeynest, Wim Heirman, and Lieven Eeckhout 2016 Boosting the priority of garbage: Scheduling collection on heterogeneous multicore processors ACM Transactions on Architecture and Code Optimization (TACO) 13, (2016), [2] Paulo Sộrgio Almeida, Carlos Baquero, Nuno Preguiỗa, and David Hutchison 2007 Scalable Bloom filters Inform.Process Lett 101, (2007), 255–261 [3] Scott Beamer, Krste Asanovic, and David Patterson 2015 Locality exists in graph processing: Workload characterization on an Ivy Bridge server In 2015 IEEE International Symposium on Workload Characterization IEEE, 56–65 [4] Burton H Bloom 1970 Space/Time Trade-offs in Hash Coding with Allowable Errors Commun ACM 13, (July 1970), 422–426 [5] Flavio Bonomi, Michael Mitzenmacher, Rina Panigrahy, Sushil Singh, and George Varghese 2006 An Improved Construction for Counting Bloom Filters In 19 Proceedings of the 14th Conference on Annual European Symposium – Volume 14 (ESA’06) Springer-Verlag, London, UK, UK, 684–695 [6] Fabiano C Botelho, Rasmus Pagh, and Nivio Ziviani 2007 Simple and Spaceefficient Minimal Perfect Hash Functions In Proceedings of the 10th International Conference on Algorithms and Data Structures (WADS’07) Springer-Verlag, Berlin, Heidelberg, 139–150 [7] Alex D Breslow and Nuwan S Jayasena 2018 Morton Filter https://github.com/AMDComputeLibraries/morton_filter.git, commit: 837484dad7c402db6ff08688590c4cee9c152682 [8] Alex D Breslow and Nuwan S Jayasena 2018 Morton Filters: Faster, Spaceefficient Cuckoo Filters via Biasing, Compression, and Decoupled Logical Sparsity Proc VLDB Endow 11, (May 2018), 1041–1055 [9] Alex D Breslow, Dong Ping Zhang, Joseph L Greathouse, Nuwan Jayasena, and Dean M Tullsen 2016 Horton Tables: Fast Hash Tables for In-memory Dataintensive Computing In Proceedings of the 2016 USENIX Conference on Usenix Annual Technical Conference (USENIX ATC ’16) USENIX Association, Berkeley, CA, USA, 281–294 [10] Andrei Broder and Michael Mitzenmacher 2004 Network applications of Bloom filters: A survey Internet mathematics 1, (2004), 485–509 [11] Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C Hsieh, Deborah A Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, and Robert E Gruber 2008 BigTable: A Distributed Storage System for Structured Data ACM Trans Comput Syst 26, 2, Article (June 2008), 26 pages [12] Denis Charles and Kumar Chellapilla 2008 Bloomier filters: A second look In European Symposium on Algorithms Springer, 259–270 [13] Bernard Chazelle, Joe Kilian, Ronitt Rubinfeld, and Ayellet Tal 2004 The Bloomier Filter: An Efficient Data Structure for Static Support Lookup Tables In Proceedings of the Fifteenth Annual ACM-SIAM Symposium on Discrete Algorithms (SODA ’04) Society for Industrial and Applied Mathematics, Philadelphia, PA, USA, 30–39 [14] Adina Crainiceanu and Daniel Lemire 2015 Bloofi Inf Syst 54, C (Dec 2015), 311–324 [15] Fan Deng and Davood Rafiei 2006 Approximately Detecting Duplicates for Streaming Data Using Stable Bloom Filters In Proceedings of the 2006 ACM SIGMOD International Conference on Management of Data (SIGMOD ’06) ACM, New York, NY, USA, 25–36 20 [16] Sarang Dharmapurikar, Praveen Krishnamurthy, Todd Sproull, and John Lockwood 2003 Deep packet inspection using parallel Bloom filters In High performance interconnects, 2003 proceedings 11th symposium on IEEE, 44–51 [17] Martin Dietzfelbinger and Rasmus Pagh 2008 Succinct Data Structures for Retrieval and Approximate Membership (Extended Abstract) In Automata, Languages and Programming, Luca Aceto, Ivan Damgård, Leslie Ann Goldberg, Magnús M Halldórsson, Anna Ingólfsdóttir, and Igor Walukiewicz (Eds.) Springer Berlin Heidelberg, Berlin, Heidelberg, 385–396 [18] Ozgun Erdogan and Pei Cao 2007 Hash-AV: fast virus signature scanning by cache-resident filters International Journal of Security and Networks 2, 1-2 (2007), 50–59 [19] Bin Fan and David G Andersen 2013–2017 Cuckoo Filter https://github.com/efficient/cuckoofilter, commit:aac6569cf30f0dfcf39edec1799fc3f8d6f594da [20] Bin Fan, David G Andersen, Michael Kaminsky, and Michael D Mitzenmacher 2014 Cuckoo Filter: Practically Better Than Bloom In Proceedings of the 10th ACM International on Conference on Emerging Networking Experiments and Technologies (CoNEXT ’14) ACM, New York, NY, USA, 75–88 [21] Dmytro Ivanchykhin, Sergey Ignatchenko, and Daniel Lemire 2017 Regular and almost universal hashing: an efficient implementation Software: Practice and Experience 47, 10 (2017), 1299–1323 [22] Arpith Jacob and Maya Gokhale 2007 Language Classification Using Ngrams Accelerated by FPGA-based Bloom Filters In Proceedings of the 1st International Workshop on High-performance Reconfigurable Computing Technology and Applications: Held in Conjunction with SC07 (HPRCTA ’07) ACM, New York, NY, USA, 31–37 [23] Christopher Jonathan, Umar Farooq Minhas, James Hunter, Justin Levandoski, and Gor Nishanov 2018 Exploiting coroutines to attack the killer nanoseconds Proceedings of the VLDB Endowment 11, 11 (2018), 1702–1714 [24] Harald Lang, Thomas Neumann, Alfons Kemper, and Peter Boncz 2019 Performance-optimal filtering: Bloom overtakes Cuckoo at high throughput Proceedings of the VLDB Endowment 12, (2019), 502–515 [25] Daniel Lemire 2019 Fast Random Integer Generation in an Interval ACM Trans Model Comput Simul 29, 1, Article (Jan 2019), 12 pages [26] Xiaozhou Li, David G Andersen, Michael Kaminsky, and Michael J Freedman 2014 Algorithmic Improvements for Fast Concurrent Cuckoo Hashing 21 In Proceedings of the Ninth European Conference on Computer Systems (EuroSys ’14) ACM, New York, NY, USA, Article 27, 14 pages [27] Michael Mitzenmacher 2002 Compressed Bloom Filters IEEE/ACM Trans Netw 10, (Oct 2002), 604–612 [28] Michael Molloy 2005 Cores in Random Hypergraphs and Boolean Formulas Random Struct Algorithms 27, (Aug 2005), 124–135 [29] Patrick O’Neil, Edward Cheng, Dieter Gawlick, and Elizabeth O’Neil 1996 The log-structured merge-tree (LSM-tree) Acta Informatica 33, (1996), 351–385 [30] Prashant Pandey, Michael A Bender, Rob Johnson, and Rob Patro 2017 Counting Quotient Filter (CQF) https://github.com/splatlab/cqf [31] Prashant Pandey, Michael A Bender, Rob Johnson, and Rob Patro 2017 A General-Purpose Counting Filter: Making Every Bit Count In Proceedings of the 2017 ACM International Conference on Management of Data (SIGMOD ’17) ACM, New York, NY, USA, 775–787 [32] Orestis Polychroniou and Kenneth A Ross 2014 Vectorized Bloom Filters for Advanced SIMD Processors In Proceedings of the Tenth International Workshop on Data Management on New Hardware (DaMoN ’14) ACM, New York, NY, USA, Article 6, pages [33] Ely Porat 2009 An Optimal Bloom Filter Replacement Based on Matrix Solving In Computer Science – Theory and Applications, Anna Frid, Andrey Morozov, Andrey Rybalchenko, and Klaus W Wagner (Eds.) Springer Berlin Heidelberg, Berlin, Heidelberg, 263–273 [34] Georgios Psaropoulos, Thomas Legler, Norman May, and Anastasia Ailamaki 2017 Interleaving with coroutines: a practical approach for robust index joins Proceedings of the VLDB Endowment 11, (2017), 230–242 [35] Felix Putze, Peter Sanders, and Johannes Singler 2010 Cache-, Hash-, and Space-efficient Bloom Filters J Exp Algorithmics 14, Article (Jan 2010), 78 pages [36]Ori Rottenstreich, Yossi Kanizo, and Isaac Keslassy 2014 The Variable-increment Counting Bloom Filter IEEE/ACM Trans Netw 22, (Aug 2014), 1092–1105 [37] Russell Sears and Raghu Ramakrishnan 2012 bLSM: A General Purpose Log Structured Merge Tree In Proceedings of the 2012 ACM SIGMOD International Conference on Management of Data (SIGMOD ’12) ACM, New York, NY, USA, 217–228 [38] Sebastiano Vigna 2008 Broadword implementation of rank/select queries In International Workshop on Experimental and Efficient Algorithms Springer, 154–168 [39] I Voras and M Žagar 2010 Adapting the Bloom filter to multithreaded 22 environments In Melecon 2010 - 2010 15th IEEE Mediterranean Electrotechnical Conference 1488–1493 [40] Sean A Weaver, Hannah J Roberts, and Michael J Smith 2018 XORSatisfiability Set Membership Filters In Theory and Applications of Satisfiability Testing – SAT 2018, Olaf Beyersdorff and Christoph M Wintersteiger (Eds.) Springer International Publishing, Cham, 401–418 [41] Dong Zhou, David G Andersen, and Michael Kaminsky 2013 Space-efficient, high-performance rank and select structures on uncompressed bit sequences In International Symposium on Experimental Algorithms Springer, 151–163 23 ... cho lọc Bloom tối ưu 44%: yêu cầu thiết lập k = - log2ϵ ϵ giới hạn mong muốn xác suất sai số dương Bộ lọc Bloom thực đồng thời [39] Bộ lọc Bloom bị chặn [24, 35] bao gồm nhiều lọc Bloom nhỏ, lọc. .. băm Cuckoo liên quan [26] • Bộ lọc Quotient [31] lưu trữ dấu vân tay bảng băm nhỏ gọn Bộ lọc Quotient lọc Cuckoo sử dụng lượng nhớ tương tự • Bộ lọc Morton [8] tương tự lọc Cuckoo, sử dụng thùng... không gian lọc xor Các kết thực nghiệm phù hợp với kết lý thuyết trình bày Hình 15 4.4 Thảo luận Chúng cho hiệu suất kiểm tra tư cách thành viên tốt lọc xor chủ yếu lý sau Bộ lọc Xor sử dụng