Skip to content

Long Lắc Lư với AI?

Tôi viết prompt, AI viết nội dung, chẳng AI sai mà cũng không ai đúng!

Menu
  • Home
  • Photography
  • Writing [by AI, prompt by me]
Menu

[AI viết] Kẻ Nói “Không” Nhanh Nhất Thế Giới: Bloom Filter và Cái Giá Của Sự Chắc Chắn

Posted on March 14, 2026March 14, 2026 by Long Lắc Lư

Tại sao máy tính — và cả con người — đôi khi chọn “có thể đúng, chạy trước” thay vì “chắc chắn đúng, chờ một tí”. Đây là một bài viết có phần ngược lại với bài Zombie mặc Lululemon ở đoạn Tinder.


Phần 1: Cái Username Kia Bị Chiếm Chưa, Mà Sao Nhanh Vậy?

Bạn đã bao giờ ngồi đăng ký tài khoản Instagram, gõ username mới nghĩ ra lúc 2 giờ sáng — kiểu như guitarhero_nguyen_99 — và chưa kịp nhấn Tab, màn hình đã hiện ngay: “Username này đã được sử dụng”?

Không có loading. Không có spinner quay. Không có gì hết. Nhanh như phản xạ.

Bạn nghĩ: “Ừ thì nó query database thôi, big deal.”

Sai. Hoàn toàn sai.

Instagram, Twitter, GitHub — những platform này có hàng trăm triệu, thậm chí hàng tỷ username đã đăng ký. Nếu mỗi lần bạn gõ một ký tự, server lại đâm thẳng vào database để scan qua cả tỷ dòng… thì chi phí tính toán sẽ khiến bill AWS của họ trông như nợ quốc gia. Và bạn sẽ ngồi chờ mỗi lần gõ như đang chờ xe buýt giờ cao điểm.

Thứ họ dùng để làm điều đó nhanh đến mức vô lý — là Bloom filter.

Nhưng trước khi hiểu nó hoạt động thế nào, hãy để tôi hỏi một câu hơi triết:

Bạn có thực sự cần sự chắc chắn 100% ở mọi bước của cuộc sống không?


Bloom Filter là gì — giải thích đúng, không bịa

Bloom filter là một cấu trúc dữ liệu xác suất (probabilistic data structure) dùng để kiểm tra xem một phần tử có thuộc về một tập hợp hay không — nhưng theo cách rất đặc biệt: nó chỉ tốn rất ít bộ nhớ, và nó có thể sai theo một chiều duy nhất.

Cụ thể:

  • Nếu Bloom filter nói “KHÔNG có” → chắc chắn 100% là không có. Không bao giờ sai ở đây.
  • Nếu Bloom filter nói “CÓ THỂ có” → đây chỉ là xác suất. Có thể thật, có thể không — cần kiểm tra thêm.

Hiện tượng “nói có mà thật ra không có” này gọi là false positive (dương tính giả). Còn “nói không mà thật ra có” — false negative — thì Bloom filter không bao giờ mắc phải.

Nghe có vẻ kỳ? Đây là cách nó làm được điều đó.

Kiến trúc bên trong:

Một Bloom filter gồm hai thứ:

  1. Một mảng bit (bit array) — hãy hình dung một hàng dài gồm hàng nghìn công tắc đèn, ban đầu tất cả đều TẮT (0).
  2. k hàm băm (hash functions) — mỗi hàm nhận một giá trị đầu vào và trả về một vị trí trong mảng bit.

Thêm một username vào filter (ví dụ: guitarheronguyen99):

  • Chạy username qua từng hàm băm: h₁, h₂, h₃.
  • Mỗi hàm trả về một vị trí, ví dụ: 57, 120, 451.
  • Bật các công tắc ở vị trí 57, 120, 451 lên BẬT (1).
  • Xong. Không lưu username thật. Không lưu gì cả — chỉ ba cái bit được bật lên.

Kiểm tra một username mới (longnguyen_coffee):

  • Chạy qua cùng ba hàm băm → ra vị trí 33, 200, 451.
  • Kiểm tra vị trí 33 → TẮT (0) → CHẮC CHẮN CHƯA CÓ AI DÙNG USERNAME NÀY.
  • Trả về “available” ngay lập tức. Không cần động đến database.

Trường hợp false positive:

Một username khác — cofficelover_vn — sau khi băm ra đúng vị trí 57, 120, 451 (trùng với guitarheronguyen99). Filter báo “có thể đã có người dùng”. Lúc này mới query database, và database xác nhận: chưa có ai đăng ký tên đó cả. Đó là false positive.

Nhưng kết quả cuối cùng vẫn đúng — vì database là bước kiểm tra thứ hai, luôn ra quyết định cuối.

Tại sao điều này lại xuất sắc đến vậy?

Vì trong thực tế, phần lớn username người dùng gõ thử là username mới, chưa ai dùng. Bloom filter loại bỏ được 90–95% các truy vấn đó mà không cần chạm vào database — tiết kiệm cả tài nguyên lẫn thời gian. Với 10 triệu username, một Bloom filter chỉ tốn khoảng 10MB bộ nhớ — trong khi lưu đủ username thật sẽ tốn gấp 50 lần.

Đó là lý do Instagram, Twitter, GitHub — và cả Redis — đều triển khai Bloom filter ở lớp đầu tiên của hệ thống.


Phần 2: Casanova Thời AI và Triết Học “Có Thể”

Bây giờ hãy rời server room, bước ra ngoài đường.

Có một gã tên Giacomo 2.0 — hậu duệ tinh thần của Casanova huyền thoại. Nhưng khác ông tổ, gã không dùng thơ ca hay rượu vang để chinh phục trái tim. Gã dùng thuật toán.

Giacomo 2.0 không bao giờ ghi nhớ tên, tuổi, tiểu sử của bất kỳ ai. Hắn nói: “Bộ nhớ của ta có hạn, nhưng trái tim thì không.” — nghe lãng mạn, nhưng thực chất hắn lười nhớ.

Thay vào đó, hắn giữ trong đầu một tấm thảm cao su với hàng ngàn lỗ nhỏ — đó là bộ nhớ của hắn. Mỗi khi gặp ai, hắn không ghi nhật ký. Hắn chỉ chạy ba phép thử nhanh:

  • Phép thử 1 (hash 1): Giọng nói → cắm chốt vào lỗ số 57.
  • Phép thử 2 (hash 2): Cách cười → cắm chốt vào lỗ số 120.
  • Phép thử 3 (hash 3): Năng lượng gặp mặt → cắm chốt vào lỗ số 451.

Xong. Không tên. Không số điện thoại. Chỉ ba chiếc chốt trên tấm thảm.

Nghệ thuật vuốt trái của Giacomo

Giacomo 2.0 mở Tinder mỗi tối lúc 11 giờ, đều đặn như pha V60 buổi sáng.

Hắn không đọc bio dài. Hắn không phân tích ảnh như thám tử tư. Hắn chỉ cần hai giây — chạy qua ba phép thử nhanh trong đầu:

  • Nếu bất kỳ phép thử nào cho ra lỗ trống → có thứ gì đó rõ ràng không khớp → vuốt trái. “Chắc chắn không.”
  • Nếu cả ba lỗ đều có chốt → “Có thể đấy.” → vuốt phải.

Hắn gọi đây là Nguyên tắc Bloom: Đừng bao giờ lãng phí năng lượng cho những cái “chắc chắn không”. Chỉ đầu tư vào những cái “có thể”.

Trong khi người khác ngồi đọc từng dòng bio, phân tích ảnh từng góc như chuẩn bị thẩm vấn, thì Giacomo 2.0 đã lọc xong 200 hồ sơ trong 15 phút. Không phải vì hắn hời hợt — mà vì hắn hiểu: giai đoạn một không cần chính xác, chỉ cần nhanh.

Khi “có thể” hóa thành “thật ra không phải”

Nhưng đây là bí mật Giacomo 2.0 không bao giờ đăng Story:

Hắn sai. Rất nhiều lần.

Cô gái mà cả ba phép thử đều bảo “có thể hợp” — hóa ra chỉ vì cô ấy trùng mùi nước hoa với người cũ, trùng cách cười với bạn thân hắn, và trùng năng lượng với cô barista quen ở quán cà phê dưới nhà. Ba chiếc chốt đều khớp — nhưng không phải vì cô ấy, mà vì những người khác đã cắm chốt vào đúng những lỗ đó trước.

Đó là false positive — dương tính giả. Hắn match. Hắn chat. Hắn hẹn uống cà phê. Và sau 45 phút ngồi nghe nhau nói, cả hai đều nhận ra: không hợp.

Nhưng Giacomo 2.0 không buồn. Vì hắn hiểu: Bloom filter không bao giờ hứa rằng “có thể” nghĩa là “chắc chắn đúng”. Nó chỉ hứa một điều duy nhất: khi nó nói “không”, thì tuyệt đối là không.


Phần 3: Cái Giá Của Sự Chắc Chắn

Đây mới là phần đắng nhất.

Người không dùng Bloom filter trong cuộc sống

Bạn đã gặp kiểu người này chưa — người cần biết chắc chắn 100% trước khi làm bất cứ điều gì?

Họ đăng ký Tinder nhưng đọc bio từng người từng dòng, xem hết ảnh từng album, Google tên người ta để “nghiên cứu kỹ” trước khi dám vuốt phải. Kết quả: xử lý được 10 hồ sơ một tối, kiệt sức trước khi match được ai.

Họ muốn chắc chắn rằng buổi hẹn đầu tiên sẽ không lãng phí thời gian. Nên họ không đi hẹn.

Họ muốn chắc chắn bài nhạc mình sẽ viết là hay trước khi viết. Nên bài nhạc đó không bao giờ tồn tại.

Đây là cái giá của sự chắc chắn: bạn trả bằng tốc độ, bằng năng lượng, và cuối cùng bằng cả hành động.

Trong thế giới máy tính, nếu Instagram không dùng Bloom filter và thay vào đó query thẳng database mỗi lần bạn gõ một ký tự, chi phí vận hành sẽ tăng gấp nhiều lần — chỉ để đổi lấy việc không bao giờ có false positive ở bước kiểm tra đầu tiên. Một false positive mà hoàn toàn vô hại, vì bước hai — database query — sẽ sửa lại ngay.

Bloom filter dạy gì về cuộc sống

Cấu trúc dữ liệu này, nếu nhìn kỹ, là một bản tuyên ngôn về cách đưa ra quyết định thông minh:

Không phải mọi bước đều cần độ chính xác như nhau.

Bước lọc đầu tiên — gặp ai đó, đọc một cuốn sách, thử một loại cà phê mới — chỉ cần đủ tín hiệu để nói “có thể thú vị” hay “chắc chắn không phải lúc này”. Đầu tư toàn bộ năng lượng vào bước đầu là sai kiến trúc.

Bước xác nhận thứ hai — buổi hẹn thật, đọc xong chương đầu, pha thử và nếm — mới là nơi bạn dùng “database query” đầy đủ, cẩn thận, và chấp nhận tốn thời gian.

False positive không phải thất bại. Đó là chi phí vận hành của một hệ thống nhanh.

Giacomo 2.0 hiểu điều này. Hắn không phải Casanova vì hắn không bao giờ sai — hắn là Casanova vì hắn biết mình sẽ sai ở đâu, và không lãng phí nguồn lực để tránh điều không tránh được.

Trong khi người khác:

  • Phân tích 45 phút cho một hồ sơ → kiệt sức trước khi match.
  • Nhớ từng chi tiết mọi người từng gặp → bộ nhớ tràn, quyết định chậm.
  • Đòi chắc chắn 100% trước khi hành động → không bao giờ hành động.

Thì Giacomo 2.0:

  • Lọc 200 người trong 15 phút.
  • Chấp nhận 10 false positives → chỉ mất 10 ly cà phê.
  • Tìm được 2–3 kết nối thật sự — vì hắn dành toàn bộ năng lượng cho giai đoạn hai.

Hắn nhanh đúng chỗ. Và chậm đúng lúc.


Lời kết — hay là cái kết của một blog lúc 11 giờ đêm

Bloom filter được đặt tên theo Burton Howard Bloom — người phát minh ra nó năm 1970. Ông không nghĩ ra nó để giải thích triết lý sống hay để làm ẩn dụ về Tinder. Ông làm ra nó để giải quyết một bài toán rất cụ thể: kiểm tra membership trong tập hợp lớn, nhanh và rẻ.

Nhưng cái hay của những cấu trúc tốt — dù là cấu trúc dữ liệu hay cấu trúc tư duy — là chúng phản ánh một nguyên lý sâu hơn:

Hệ thống tốt không phải là hệ thống không bao giờ sai. Hệ thống tốt là hệ thống biết mình sẽ sai ở đâu, và thiết kế để sai ở những chỗ rẻ nhất.

Instagram dùng Bloom filter để không cần đúng 100% ở bước đầu — vì sai ở đó không hại gì, và đúng ở đó tốn quá nhiều.

Giacomo 2.0 dùng tư duy tương tự để không cần chắc chắn trước mỗi cuộc hẹn — vì sai ở đó chỉ tốn một ly flat white, còn chờ chắc chắn thì tốn cả thanh xuân.

Còn bạn — bạn đang trả cái giá của sự chắc chắn ở bước nào trong cuộc sống?


Nếu bạn là dev và thấy có chỗ nào sai về kỹ thuật — DM tôi. Còn nếu bạn thấy đoạn Casanova nghe quen quen, thì bạn đang đọc đúng blog rồi đó.

Post navigation

← [AI viết] Zombie Mặc Lululemon
[AI viết] Cô Bé Không Được Phép Cười: Chuyện Về Nữ Thần Sống Ở Kathmandu →

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

© 2026 Long Lắc Lư với AI? | Powered by Minimalist Blog WordPress Theme