מהו מאגר גרפים? דרך טובה יותר לאחסן נתונים מחוברים

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

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

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

מאגר גרפים לעומת מאגר יחסי

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

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

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

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

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

מאפייני מאגר גרפים

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

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

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

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

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

מקרים לשימוש במאגר גרפים

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

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

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

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

שאילתות של מאגר גרפים

מסדי נתונים של גרפים - כמו מאגרי NoSQL אחרים - משתמשים בדרך כלל במתודולוגיית השאילתות המותאמות אישית שלהם במקום ב- SQL.

שפת שאילתת גרפים נפוצה אחת היא Cypher, שפותחה במקור עבור מסד הנתונים הגרפי Neo4j. מאז סוף שנת 2015 סייפר התפתח כפרויקט קוד פתוח נפרד, ומספר ספקים אחרים אימצו אותו כמערכת שאילתות למוצריהם (למשל, SAP HANA).

הנה דוגמה לשאילתת סייפר שמחזירה תוצאת חיפוש לכל מי שהוא חבר של סקוט:

MATCH (a: אדם {name: 'Scott'}) - [: FRIENDOF] -> (b) RETURN b 

סמל החץ ( ->) משמש בשאילתות סייפר כדי לייצג קשר מכוון בגרף.

שפת שאילתת גרפים נפוצה נוספת, גרמלין, הומצאה עבור מסגרת מחשוב הגרפים Apache TinkerPop. התחביר של גרמלין דומה לזה שמשמש את ספריות הגישה למסדי נתונים של ORM בשפות מסוימות.

הנה דוגמה לשאילתת "חברים של סקוט" בגרמלין:

gV (). יש ("שם", "סקוט"). בחוץ ("חבר של") 

למאגרי גרפים רבים יש תמיכה ב- Gremlin באמצעות ספרייה, מובנית או של צד שלישי.

שפת שאילתות נוספת היא SPARQL. הוא פותח במקור על ידי W3C לשאילתת נתונים המאוחסנים בפורמט Resource Description Framework (RDF) עבור מטא נתונים. במילים אחרות, SPARQL לא תוכנן לחיפושי גרפים במסד נתונים, אך ניתן להשתמש בהם עבורם. בסך הכל, סייפר וגרמלין אומצו בצורה רחבה יותר.

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

מאגרי גרפים פופולריים

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

Neo4j

Neo4j הוא בקלות הבוגר ביותר (11 שנים וספירה) והידוע ביותר מבין מאגרי הגרפים לשימוש כללי. בניגוד למוצרי מאגר נתונים קודמים, הוא אינו משתמש בקצה אחורי של SQL. Neo4j הוא מאגר גרפים מקורי שתוכנן מבפנים כלפי חוץ כדי לתמוך במבני גרפים גדולים, כמו בשאילתות שמחזירות מאות אלפי יחסים ועוד.

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

ראה סקירת Neo4j לפרטים נוספים.

Microsoft Azure Cosmos DB

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

לשם כך, מסד נתונים של גרפים הוא רק אחד מהמצבים השונים שבהם יכולה Cosmos DB לפעול. הוא משתמש בשפת שאילתת Gremlin ו- API לשאילתות מסוג גרף, ותומך במסוף Gremlin שנוצר עבור Apache TinkerPop כממשק אחר.

נקודת מכירה גדולה נוספת של Cosmos DB היא כי אינדקס, קנה מידה ושכפול גיאוגרפי מטופלים אוטומטית בענן התכלת, ללא שום פיתול כפתור בצד שלך. לא ברור עדיין כיצד ארכיטקטורת ה- All-in-One של מיקרוסופט תואמת את בסיסי הנתונים של גרפים מקוריים מבחינת ביצועים, אך Cosmos DB בהחלט מציע שילוב שימושי של גמישות וקנה מידה.

ראה סקירה של Azure Cosmos DB לפרטים נוספים.

JanusGraph

JanusGraph הועבר מפרויקט TitanDB, וכעת הוא נמצא תחת שלטון קרן לינוקס. היא משתמשת בכל אחד ממקצות הקצה האחורי הנתמכים - Apache Cassandra, Apache HBase, Google Cloud Bigtable, Oracle BerkeleyDB - כדי לאחסן נתוני גרפים, תומך בשפת שאילתת Gremlin (כמו גם באלמנטים אחרים ממחסנית Apache TinkerPop) ויכול גם לשלב חיפוש טקסט מלא באמצעות פרויקטים של Apache Solr, Apache Lucene או Elasticsearch.

IBM, אחד התומכים בפרויקט JanusGraph, מציע גרסה מתארחת של JanusGraph ב- IBM Cloud, הנקראת Compose for JanusGraph. כמו Azure Cosmos DB, Compose for JanusGraph מספק כיוון אוטומטי וזמינות גבוהה, עם תמחור המבוסס על שימוש במשאבים.