‫JanusGraph ב-GKE עם Bigtable

מסדי נתונים של גרפים יכולים לעזור לכם לגלות תובנות על ידי מידול של ישויות הנתונים והקשרים ביניהן. ‫JanusGraph הוא מסד נתונים של גרפים שתומך בעבודה עם כמויות גדולות של נתונים. בדף הזה מוצגים מושגים שיכולים לעזור לכם להריץ את JanusGraph ב- Google Cloud עם Google Kubernetes Engine כפלטפורמת התזמור ו-Bigtable כקצה העורפי של האחסון.

המסמך הזה מיועד לאדריכלי מערכות, לאדמינים של מסדי נתונים ולמומחי DevOps שמעוניינים להפעיל את מסד הנתונים הגרפי JanusGraph ב-Google Cloud באמצעות Bigtable כבק-אנד לאחסון. המאמר מניח שיש לכם ידע ב-Google Kubernetes Engine‏ (GKE), ב-Kubernetes Pods, ב-Bigtable וב-Elasticsearch.

סקירה כללית

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

דוגמה לגרף נכסים.

האיור שלמעלה הוא דוגמה לגרף נכסים.

מסדי נתונים של גרפים עוזרים לכם ליצור מודלים של מגוון תחומים ופעילויות:

  • רשתות חברתיות
  • עסקאות פיננסיות (לניתוח הונאות)
  • רשתות מערכת פיזיות או וירטואליות

כשיוצרים מסדי נתונים של גרפים, לפעמים יוצרים מיליונים או אפילו מיליארדים של צמתים וקשתות. כשמשתמשים ב-JanusGraph עם Bigtable כשכבת האחסון הבסיסית, אפשר גם להריץ שאילתות מהירות (שנקראות graph traversals) וגם לשנות את גודל שכבת האחסון באופן עצמאי בהתאם לגודל ולתפוקה שנדרשים. בנוסף, JanusGraph משתמשת ב-backend של אינדוקסציה שניתן להרחבה כדי לספק אינדוקסציה של טקסט מלא עבור מאפייני קודקודים וקשתות.

אפשר לפרוס תשתית JanusGraph ניתנת להרחבה ב-GKE, באמצעות Elasticsearch כקצה העורפי לאינדקס שפועל ב-Pods ב-StatefulSet, ובאמצעות Bigtable כקצה העורפי לאחסון. אחרי שמסיימים, אפשר לעבור בין הקשרים שקיימים בנתוני הגרף.

בתרשים הבא מוצג איך האלמנטים האלה משתלבים זה בזה.

פריסת JanusGraph עם Bigtable ב-GKE.

הדיאגרמה שלפניכם מציגה את פריסת JanusGraph ב-GKE עם Elasticsearch ו-Bigtable.

נתוני JanusGraph ב-Bigtable

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

בתרשים הבא מוצג מבנה האחסון הזה.

מבנה האחסון של רשימת הסמיכויות ב-JanusGraph.

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

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

עמודה של קצה ועמודה של מאפיין קצה ב-JanusGraph.

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

התרשים הבא הוא מודל הנתונים הלוגי של עמודת מאפייני צומת.

ערכי העמודות של JanusGraph עבור עמודת מאפיינים.

באיור הקודם מופיעים פרטים על מסנני העמודות והערכים של עמודת קצה.

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

בנוסף, JanusGraph מסתמך על הסדר הלקסיקוגרפי של השורות ושל מזהי העמודות ב-Bigtable כדי לשפר את ביצועי השאילתות.

המאמרים הבאים