מסנן בלום הוא מבנה נתונים הסתברותי שחוסך מקום, ואפשר להשתמש בו כדי לבדוק אם רכיב מסוים הוא חלק מקבוצה. בסוג כזה של מבנה, יכולות להיות תוצאות חיוביות שגויות. לדוגמה, הפילטר יכול לציין שרכיב מסוים נמצא בקבוצה, גם אם הוא לא נמצא בה. עם זאת, לא יכולים להיות מקרים של תוצאות שליליות כוזבות. לכן, אם מוסיפים רכיב לקבוצה, המסנן צריך לציין שהרכיב נמצא בקבוצה.
המסנן עושה זאת באמצעות מיפוי של אלמנט למספר סיביות במערך סיביות בגודל קבוע, באמצעות מספר פונקציות גיבוב. כדי לשלוט בהסתברות לתוצאות חיוביות שגויות, אפשר לשנות את מספר הסיביות במערך ואת מספר פונקציות הגיבוב שבהן נעשה שימוש.
תרחישים לדוגמה
בקטע הזה מתוארים תרחישים לדוגמה לשימוש במסנני Bloom:
ביטול כפילויות של מודעות ואירועים: אם יש לכם אתר מסחר אלקטרוני, שירות סטרימינג, רשת פרסום או פלטפורמת שיווק, מסנני Bloom יכולים לעזור לכם לקבוע אם משתמש צפה במודעה, קיבל אימייל או התראה שיווקיים או רכש מוצר.
אפשר להשתמש במסנן בלום כדי לאחסן את כל המוצרים שמשתמש רוכש.
- אם מוצר לא נמצא במסנן, המודעה תוצג למשתמש והמוצר יתווסף למסנן.
- אם המוצר נמצא במסנן, סביר להניח שהמשתמש ראה את המודעה המשויכת ורכש את המוצר. לכן, צריך למצוא מודעה אחרת להצגה למשתמש.
זיהוי הונאה: אפשר להשתמש במסנני בלום כדי לזהות אם כרטיס אשראי מסומן כגנוב. כדי לעשות זאת, משתמשים במסנן שמכיל כרטיסים שדווחו כגנובים. כשמשתמשים בכרטיס, בודקים אם הוא מופיע במסנן.
- אם הכרטיס לא מופיע במסנן, הוא לא מסומן כגנוב.
- אם הכרטיס מופיע במסנן, אפשר לבדוק אותו מול מסד הנתונים הראשי או לדחות את הרכישה.
סינון ספאם ותוכן פוגעני: אפשר להשתמש במסנני בלום כדי לסנן תוכן ולזהות איומים פוטנציאליים, חומרים מזיקים וספאם. כדי לעשות זאת, יוצרים מסנן שמכיל כתובות URL זדוניות, כתובות אימייל של ספאם ומספרי טלפון של ספאם. כשמשתמש מזין כתובת URL או מקבל אימייל או הודעת טקסט, המערכת בודקת אם המידע הזה מופיע במסנן.
- אם כתובת ה-URL, האימייל או הטקסט לא נמצאים במסנן, צריך לאפשר למשתמש לגשת לאתר שמיוצג על ידי כתובת ה-URL, או לקבל את האימייל או הטקסט.
- אם כתובת ה-URL, האימייל או הטקסט נמצאים במסנן, המערכת תדחה את הגישה של המשתמש לאתר המשויך או תמנע מהמשתמש לקבל את האימייל או את הודעת הטקסט.
זיהוי שמות משתמשים כפולים: אפשר להשתמש במסנני בלום כדי לקבוע אם שם משתמש הוא חדש או אם הוא כבר קיים. כדי לעשות את זה, משתמשים במסנן כדי לעקוב אחרי כל שם משתמש שנרשם לאתר המסחר האלקטרוני או לשירות הסטרימינג. כשמשתמש חדש מנסה להירשם באמצעות שם המשתמש שלו, המערכת בודקת אם שם המשתמש מופיע במסנן.
- אם שם המשתמש לא מופיע במסנן, צריך ליצור את החשבון ולהוסיף את שם המשתמש למסנן.
- אם שם המשתמש נמצא במסנן, צריך לדחות את שם המשתמש.
מידע נוסף על תרחישי השימוש האלה זמין במאמר תרחישים נפוצים לדוגמה לשימוש במסנני Bloom.
זמינות
אם יוצרים מכונה של Memorystore for Valkey, גרסה 8.0 ואילך, אז גרסה 1.0 של סוג הנתונים Bloom והפקודות שמשויכות אליו זמינה באופן אוטומטי. סוג הנתונים הזה תואם ל-API עם תחביר הפקודה של מסנן Bloom בספריות הלקוח הבאות של Valkey:
סוגי מסנני Bloom
אפשר להשתמש בסוגים הבאים של מסנני Bloom:
- שינוי קנה מידה: לסוג המסנן הזה אין קיבולת קבועה, ולכן הוא יכול לגדול. אם המסנן מגיע לקיבולת שלו ואתם מוסיפים לו פריט חדש וייחודי, המסנן מתרחב ונוצר מסנן משנה חדש. למסנן המשנה הזה יש קיבולת גדולה יותר מהמסנן.
- לא ניתן להרחבה: לסוג המסנן הזה יש קיבולת קבועה, ולכן יש מגבלה על מספר הפריטים שאפשר להוסיף למסנן. אם המסנן הגיע לקיבולת שלו ואתם מנסים להוסיף אליו פריט חדש וייחודי, תוצג שגיאה.
מידע נוסף על ההבדלים בין הסוגים האלה של מסנני בלום זמין במאמר מסנני בלום עם שינוי גודל ומסנני בלום ללא שינוי גודל.
מאפייני מסנן Bloom
למסנן Bloom יש את המאפיינים הבאים:
- קיבולת: מספר הפריטים שמסנן בלום יכול להכיל לפני שהוא מתרחב (במקרה של מסנן שניתן להרחבה) או לפני שהוא דוחה הוספה של פריטים נוספים (במקרה של מסנן שלא ניתן להרחבה).
- שיעור התוצאות החיוביות השגויות: השיעור ששולט בהסתברות של פעולות במסנני Bloom שמובילות לתוצאות חיוביות שגויות. לדוגמה, פעולה שמשמשת לבדיקה אם רכיב נמצא במסנן מציינת שהרכיב נמצא במסנן, למרות שהוא לא נמצא בו.
- התרחבות: המאפיין הזה משויך להרחבת מסנני Bloom. הוא שולט בצמיחה של הקיבולת הכוללת כשהמסנן מתרחב כי הוא מגיע לקיבולת שלו.
- Scaling or non-scaling: Whether a Bloom filter is a scaling or non-scaling filter.
מידע נוסף על המאפיינים של מסנני Bloom זמין במאמר מאפייני Bloom.
אובייקטים של פילטר Bloom
אובייקט של מסנן בלום יכול לצרוך עד 128MB של זיכרון. כדי לבדוק כמה זיכרון מסנן בלום צורך, משתמשים בפקודה BF.INFO key SIZE, כאשר key הוא שם המפתח של המסנן ו-SIZE הוא מספר הבייטים שהמסנן צורך.
קטגוריות ב-Bloom
כדי לנהל את הגישה לפקודות ולנתונים של Bloom, משתמשים בקטגוריה @bloom. בנוסף לקטגוריה הזו, הקטגוריות הבאות משתמשות בפקודות של Bloom: @read, @write ו-@fast.
בטבלה הבאה מצוין אם אפשר למפות פקודות של Bloom לקטגוריות @read, @write, @fast ו-@bloom.
| פקודה ל-Bloom | @bloom |
@read |
@write |
@fast |
|---|---|---|---|---|
BF.ADD |
Y | N | Y | Y |
BF.CARD |
Y | Y | N | Y |
BF.EXISTS |
Y | Y | N | Y |
BF.INFO |
Y | Y | N | Y |
BF.INSERT |
Y | N | Y | Y |
BF.MADD |
Y | N | Y | Y |
BF.MEXISTS |
Y | Y | N | Y |
BF.RESERVE |
Y | Y | N | Y |
מדדי זליגת אור
כדי לעקוב אחרי השימוש בסוג הנתונים Bloom, המדדים הבאים של Cloud Monitoring זמינים ב-Memorystore for Valkey:
objects_countused_memory
מידע נוסף על המדדים האלה זמין במאמר מדדים של מסנן בלום ו-JSON.
פקודות Bloom
בקטע הזה מפורטות פקודות Bloom שאפשר להשתמש בהן כדי לבצע פעולות Bloom על סוג הנתונים Bloom.
| פקודה | תיאור |
|---|---|
BF.ADD |
הוספת פריט יחיד למסנן בלום. אם המסנן לא קיים, הפקודה יוצרת אותו. |
BF.CARD |
הפונקציה מחזירה את הקרדינליות של מסנן בלום. |
BF.EXISTS |
קובעת אם מסנן בלום מכיל את הפריט שציינתם. |
BF.INFO |
החזרת פרטי שימוש ומאפיינים של מסנן Bloom. |
BF.INSERT |
יוצרים מסנן בלום עם אפס פריטים או יותר, או מוסיפים פריטים למסנן קיים. |
BF.MADD |
מוסיפים פריט אחד או יותר למסנן בלום. אם המסנן לא קיים, הפקודה יוצרת אותו. |
BF.MEXISTS |
קובעים אם מסנן הבלום מכיל פריט אחד או יותר. |
BF.RESERVE |
יצירת מסנן בלום ריק עם המאפיינים שאתם מציינים. |
בדיקת מסנני Bloom
כדאי לעיין במידע הבא על מסנני בלום:
- השימוש בזיכרון: בדיקה אם מסנן הגיע למגבלת השימוש בזיכרון. כדי לבדוק את כמות הזיכרון שבה נעשה שימוש במסנן, משתמשים בפקודה
BF.INFO. - קיבולת: בודקים אם המסנן הוא מסנן שניתן להרחבה. אם כן, מרחיבים את המסנן עד שהוא מגיע לקיבולת שלו, ואז מרחיבים אותו עוד.
מידע נוסף על בדיקת השימוש בזיכרון והקיבולת של מסנני Bloom זמין במאמר טיפול במסנני Bloom גדולים.