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

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


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



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

נתי לרנר

 

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

 NoSQL בהגדרתו – Not Only Sql - הינו מנגנון לאחסון וגישה למידע ונתונים בפורמט שאינו טבלאי (בניגוד לבסיסי הנתונים הרילציונים המסורתיים). בסיסי נתונים אלו אינם באים להחליף את בסיסי הנתונים הקונבנציונליים אלא נבנו להשלים חסרונות ולתת פתרונות לצדדים החלשים יותר.  בסיסי נתונים מסוג NoSQL נפוצים מאוד כיום במיוחד בעולם ה-Big Data מאחר ונבנו באוריינטציה המתמקדת ב- scalability, high availability וסכמות גמישות לטיפול במידע לא מובנה.

בקטגוריה זו נוטים לחלק את בסיסי הנתונים לארבעה סוגים מרכזיים:

Columnar, Document, Key-Value, ו- Graph. במאמר זה נתמקד באחרון אשר משמש לנהל מידע הקשור לרשתות וקשרים בין ישויות שונות.

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

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

לדוגמה, להלן מבנה של גרף המייצג את משתמשי Twitter והקשרים ביניהם. אנו רואים את ה- Nodes (במקרה זה קיימים כאן רק Nodes מסוג User ) ולהם מאפיין בשם .name  ביניהם קיים סוג קשר יחיד בשם FOLLOWS . (כאמור ניתן להוסיף המון סוגי קשרים וכן מאפיינים לכל סוג קשר (לדוגמה במקרה זה: since לכל קשר FOLLOWS)

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

 

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

פרויקט זה (https://neo4j.com/) , שכיום עומדת מאחוריו חברה עסקית שלקחה אותו תחת חסותה הינו הוותיק והבשל ביותר – הוא הושק בשנת 2007 ונמצא בשימוש רחב של ארגוני  Enterprise גדולים וותיקים. הפרויקט משווק בשתי גרסאות עיקריות: גרסת ה- community ברישוי GPL וגרסת הcommercial הכוללת תמיכה ו- Professional services. הוא ממומש ב-Java וניתן להתקינו הן על לינוקס והן על windows (התצורה המומלצת היא על לינוקס כמובן). בסיס נתונים זה נחשב כמוביל מבחינת תרומות קוד של הקהילה לפרויקט וקיימים לו הרבה פורומים פעילים.

Neo4j הינו Schema-free, scale ויכול להכיל מיליארדי Nodes ו- Relationships בפריסה גבוהה של שרתים וכן מהיר מאוד בעיקר באחזור מתוך כמויות גדולות. ב- Neo4j  ניתן לבצע שליפות וכן עדכוני נתונים באמצעות Rest API וכן באמצעות שפת שאילתות ייחודית לו בשם Cypher. שפה דקלרטיבית זו הינה קריאה יחסית ופשוטה מבחינת תחביר ועם זאת עוצמתית ויש בה יכולות רבות לאחזור ושליפה. כמו כן , אחת החוזקות של בסיס נתונים זה הינה שניתן להריץ אלגוריתמים בצורה מובנית ישירות בתוך בסיס הנתונים ובכך לחסוך פניות לשרת כגון shortest path מנקודה X לנקודה Y  - ניתן לבצע סוג כזה של אלגוריתם בקריאה אחת (להבדיל מבסיסי נתונים "קלאסיים" אחרים).

 

הצגת נתונים ב- FrontEnd

את הנתונים המאוחזרים מ- Graph DB (אשר נשלפים בפורמט Json) ניתן להציג במגוון אופנים. קיימים לא מעט כלים חופשיים ומסחריים (לדוגמה KeyLines https://cambridge-intelligence.com/keylines/) אשר יודעים לקחת את התוצאות המוחזרות מבסיס הנתונים ולהציג אותו בצורה ויזואלית על מגוון פלטפורמות. לכלים סגורים קיימים יתרונות רבים וכמובן גם חסרונות. בניגוד לשימוש בכלי מוכן ניתן גם להשתמש בספריות מוכנות ולהטמיע אותן בתוך אפליקציה. ספריית ויזואליזציה פופולרית בקוד פתוח אשר נכתבה ומיועדת לטיפול ותצוגה של אובייקטים מתקדמים, בין השאר גרפים ורשתות, הינה D3.js (https://d3js.org/). D3, קיצור של Data Driven Document, היא ספריית javascript המאפשרת, בעזרת ממשקיה הרבים, קבלת מידע, שינויו וקישורו ל DOM , לדוגמה ציור בדפדפן של עיגולים, חיצים, ואובייקטים שלא ממש קיימים וניתנים להצגה בצורה פשוטה ב- Html. כך ניתן להציג ישויות, קשרים ביניהם על הדפדפן בצורה  שדורשת זמן פיתוח אך יחסית פשוטה ומאפשרת גמישות רבה, אינטראקטיביות למשתמש ואפשרויות  אינטגרציה עם מערכות אחרות.

מצגת ההרצאה



הוספת תגובה
  מגיב אנונימי
שם או כינוי:
חסימת סיסמה:
  זכור אותי תמיד במחשב זה

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