מידע על מסנני Bloom

מסנן בלום הוא מבנה נתונים הסתברותי שחוסך מקום, ואפשר להשתמש בו כדי לבדוק אם רכיב מסוים הוא חלק מקבוצה. בסוג כזה של מבנה, יכולות להיות תוצאות חיוביות שגויות. לדוגמה, הפילטר יכול לציין שרכיב מסוים נמצא בקבוצה, גם אם הוא לא נמצא בה. עם זאת, לא יכולים להיות מקרים של תוצאות שליליות כוזבות. לכן, אם מוסיפים רכיב לקבוצה, המסנן צריך לציין שהרכיב נמצא בקבוצה.

המסנן עושה זאת באמצעות מיפוי של אלמנט למספר סיביות במערך סיביות בגודל קבוע, באמצעות מספר פונקציות גיבוב. כדי לשלוט בהסתברות לתוצאות חיוביות שגויות, אפשר לשנות את מספר הסיביות במערך ואת מספר פונקציות הגיבוב שבהן נעשה שימוש.

תרחישים לדוגמה

בקטע הזה מתוארים תרחישים לדוגמה לשימוש במסנני 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_count
  • used_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 גדולים.