מבוא לממשקי ה- API של OrientDB Java

1. סקירה כללית

OrientDB היא טכנולוגיית מסדי נתונים של NoSQL עם קוד פתוח רב-מודל המיועדת לעבוד עם המודלים Graph, Document, Key-Value, GeoSpatial ו- Reactive תוך ניהול שאילתות עם תחביר SQL.

במאמר זה נסקור את ההתקנה ונשתמש בממשקי ה- API של OrientDB Java.

2. התקנה

ראשית, עלינו להתקין את החבילה הבינארית.

בואו הורד את הגרסה היציבה האחרונה של OrientDB (2.2.x בנקודת כתיבת מאמר זה).

שנית, עלינו לפתוח אותו ולהעביר את תוכנו לספרייה נוחה (באמצעות ORIENTDB_HOME). אנא הקפד להוסיף את פַּח התיקייה למשתני הסביבה לכל שימוש קל בשורת פקודה.

לבסוף, עלינו לערוך את ה- orientdb.sh קובץ שנמצא ב $ ORIENTDB_HOME / סל על ידי מילוי המיקום (ORIENTDB_HOME) של ספריית OrientDB במקום ORIENTDB_DIR וגם את משתמש המערכת בו נרצה להשתמש במקום USER_YOU_WANT_ORIENTDB_RUN_WITH.

עכשיו יש לנו OrientDB שעובד לחלוטין. אנחנו יכולים להשתמש ב- orientdb.sh סקריפט עם אפשרויות:

  • הַתחָלָה: להפעלת השרת
  • סטָטוּס : כדי לבדוק את הסטטוס

  • תפסיק : לעצור את השרת

שימו לב ששניהם הַתחָלָה ו תפסיק פעולות דורשות את סיסמת המשתמש (זו שהגדרנו ב- orientdb.sh קוֹבֶץ).

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

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

הערה: OrientDB דורשת Java מגרסה 1.7 ומעלה.

גרסאות קודמות זמינות כאן.

3. התקנת ממשקי API של OrientDB Java

ה- OrientDB מאפשר למפתחי Java לעבוד עם שלושה ממשקי API שונים כגון:

  • גרף API - מאגרי גרפים
  • מסמך API - מסדי נתונים מכוונים למסמכים
  • אובייקט API - אובייקטים הקשורים ישירות למסמך OrientDB

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

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

  • orientdb-core - *. צנצנת: מביא את ספריית הליבה
  • שרטוטים-ליבת - צנצנת: להביא למתאמים רכיבי ליבה
  • orientdb-graphdb - *. צנצנת: נותן את ה- API של מסד הנתונים של Graph
  • orientdb-object - *. צנצנת: מספק את ה- API של מסד הנתונים של אובייקטים
  • orientdb- מופץ - *. צנצנת: מספק את תוסף מסד הנתונים המבוזר לעבודה עם אשכול שרתים
  • orientdb-tools - *. צנצנת: מוסר את פקודת המסוף
  • orientdb-client - *. צנצנת: מספק ללקוח המרוחק
  • orientdb-enterprise - *. צנצנת: מאפשר פרוטוקול ושיעורי רשת המשותפים על ידי הלקוח והשרת

שני האחרונים נדרשים רק אם אנו מנהלים את הנתונים שלנו בשרת מרוחק.

נתחיל בפרויקט Maven ונשתמש בתלות הבאה:

 com.orientechnologies orientdb-core 2.2.31 com.orientechnologies orientdb-graphdb 2.2.31 com.orientechnologies orientdb-object 2.2.31 com.tinkerpop.blueprints blueprints-core 2.6.0 

אנא בדוק במאגר Maven Central את הגרסאות העדכניות ביותר של Core, GraphDB, Object API של OrientDB ו- Blueprints-Core.

4. שימוש

ה- OrientDB משתמש ביישום ה- Blueprints של TinkerPop לעבודה עם גרפים.

TinkerPop היא מסגרת מחשוב גרפי המספקת דרכים רבות לבניית מאגרי גרפים, כאשר לכל אחד מהם יש את היישומים שלו:

  • שרטוטים
  • צינורות
  • גרמלין
  • רקססטר
  • מפרש מפרש

יתר על כן, OrientDB מאפשרת לעבוד עם שלושת סוגי התוכניות ללא קשר לסוג ה- API:

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

4.1. גרף API

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

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

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

בואו נתחבר כעת למסד הנתונים הרצוי, בידיעה שה- ORIENTDB_HOME הוא משתנה סביבה המתאים לתיקיית ההתקנה של OrientDB:

@BeforeClass הגדרת חלל סטטי ציבורית () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); graph = new OrientGraphNoTx ("plocal:" + orientDBFolder + "/ databases / BaeldungDB", "admin", "admin"); }

בואו נזום את מאמר, מְחַבֵּר, ו עוֹרֵך שיעורים - תוך כדי הצגת כיצד להוסיף אימות לשדותיהם:

@BeforeClass init סטטי פומבי ריק () {graph.createVertexType ("מאמר"); OrientVertexType writerType = graph.createVertexType ("סופר"); writerType.setStrictMode (נכון); writerType.createProperty ("שם פרטי", OType.STRING); // ... OrientVertexType authorType = graph.createVertexType ("מחבר", "סופר"); authorType.createProperty ("level", OType.INTEGER) .setMax ("3"); OrientVertexType editorType = graph.createVertexType ("עורך", "סופר"); editorType.createProperty ("level", OType.INTEGER) .setMin ("3"); ורטקס vEditor = graph.addVertex ("מחלקה: עורך"); vEditor.setProperty ("שם פרטי", "מקסים"); // ... ורטקס vAuthor = graph.addVertex ("מחלקה: מחבר"); vAuthor.setProperty ("שם פרטי", "ג'רום"); // ... ורטקס vArticle = graph.addVertex ("class: Article"); vArticle.setProperty ("כותרת", "מבוא ל ..."); // ... graph.addEdge (null, vAuthor, vEditor, "יש"); graph.addEdge (null, vAuthor, vArticle, "כתב"); }

בקטע הקוד שלמעלה, ייצגנו פשוט את בסיס הנתונים הפשוט שלנו שבו:

  • מאמר הוא הכיתה חסרת הסכימה המכילה מאמרים
  • סוֹפֵר הוא מעמד סופר מלא של סכימה המכיל מידע סופר הכרחי
  • סוֹפֵר הוא תת-סוג של מְחַבֵּר שמחזיק את פרטיו
  • עוֹרֵך הוא תת-סוג ללא סכמה של סוֹפֵר המכיל פרטי עורך
  • שם משפחה השדה לא מולא במחבר השמור אך עדיין מופיע בתרשים הבא
  • יש לנו קשר בין כל הכיתות: an מְחַבֵּר יכול לכתוב מאמר וצריך שיהיה לו עוֹרֵך
  • קָדקוֹד מייצג ישות עם כמה שדות
  • קָצֶה היא ישות המקשרת בין שתיים קודקודים

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

לאחר התחברות למסד הנתונים שלנו באמצעות OrientDB studio, נראה את ייצוג הגרף של הנתונים שלנו:

בואו נראה כיצד לקבל את מספר כל הרשומות (קודקודים) של מסד הנתונים:

גודל ארוך = graph.countVertices ();

עכשיו, בואו נראה רק את מספר סופר (מחבר ועורך) חפצים:

@Test הציבור בטל givenBaeldungDB_checkWeHaveTwoWriters () {long size = graph.countVertices ("סופר"); assertEquals (2, גודל); }

בשלב הבא נוכל למצוא הכל סוֹפֵרהנתונים, תוך שימוש בהצהרה הבאה:

כותבים ניתנים לנידוף = graph.getVerticesOfClass ("סופר");

לבסוף, בוא ונשאול לכולם עוֹרֵךזה עם רָמָה 7; כאן יש לנו רק אחד שתואם:

@Test הציבור בטל givenBaeldungDB_getEditorWithLevelSeven () {String onlyEditor = ""; עבור (Vertex v: graph.getVertices ("Editor.level", 7)) {onlyEditor = v.getProperty ("firstName"). toString (); } assertEquals ("Maxim", onlyEditor); }

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

4.2. ממשק API למסמך

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

בואו נשתמש שוב בממשק המשתמש כדי ליצור מסד נתונים בשם BaeldungDBTwo, אבל עכשיו עם מסמך כסוג:

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

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

@BeforeClass הגדרת חלל סטטי ציבורית () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = ODatabaseDocumentTx חדש ("plocal:" + orientDBFolder + "/ מסדי נתונים / BaeldungDBTwo"). open ("admin", "admin"); }

נתחיל בשמירת מסמך פשוט המכיל מְחַבֵּר מֵידָע.

כאן אנו יכולים לראות שהמחלקה נוצרה אוטומטית:

@Test הציבור בטל שניתןDB_whenSavingDocument_thenClassIsAutoCreated () {ODocument doc = ODocument חדש ("מחבר"); doc.field ("שם", "פול"); doc.save (); assertEquals ("מחבר", doc.getSchemaClass (). getName ()); }

בהתאם, לספור את מספר מחברים, אנו יכולים להשתמש ב:

גודל ארוך = db.countClass ("מחבר");

בואו ונשאול שוב על מסמכים באמצעות ערך שדה, כדי לחפש את מְחַבֵּרחפצים עם רָמָה 7:

@ מבט פומבי בטל שניתן DB_whenSavingAuthors_thenWeGetOnesWithLevelSeven () {עבור (מחבר מסמך: db.browserClass ("מחבר")) author.delete (); ODocument authorOne = ODocument חדש ("מחבר"); authorOne.field ("firstName", "Leo"); authorOne.field ("רמה", 7); authorOne.save (); ODocument authorTwo = ODocument חדש ("מחבר"); authorTwo.field ("firstName", "Lucien"); authorTwo.field ("רמה", 9); authorTwo.save (); תוצאת רשימה = db.query (OSQLSynchQuery חדש ("בחר * מהמחבר כאשר רמה = 7")); assertEquals (1, result.size ()); }

כמו כן, למחוק את כל הרשומות של מְחַבֵּר בכיתה, נוכל להשתמש ב:

עבור (מחבר ODocument: db.browseClass ("מחבר")) {author.delete (); }

באולפני OrientDB כרטיסיית BROWSE אנחנו יכולים לעשות שאילתה כדי להשיג את כל שלנו מְחַבֵּר'אובייקטים:

4.3. ממשק API של אובייקט

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

בסוג Object API, כל שאר המושגים נשארים זהים עם תוספת אחת בלבד - מחייבים ל- POJO.

נתחיל בחיבור ל- BaeldungDBThree באמצעות OObjectDatabaseTx מעמד:

@BeforeClass הגדרת חלל סטטי ציבורית () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = OObjectDatabaseTx חדש ("plocal:" + orientDBFolder + "/ מסדי נתונים / BaeldungDBThree"). open ("admin", "admin"); }

לאחר מכן, בהנחה שה- מְחַבֵּר הוא POJO המשמש להחזקת מְחַבֵּר נתונים, עלינו לרשום אותם:

db.getEntityManager (). registerEntityClass (מחבר.קלאס);

מְחַבֵּר יש גטררים וקובעים עבור השדות הבאים:

  • שם פרטי
  • שם משפחה
  • רָמָה

בואו ניצור מְחַבֵּר עם הוראות מרובות שורות אם אנו מכירים בבנאי ללא ארגון:

מחבר מחבר = db.newInstance (מחבר מחלקה); author.setFirstName ("לוק"); author.setLastName ("שמיים"); author.setLevel (9); db.save (מחבר);

מצד שני, אם יש לנו קונסטרוקטור אחר שלוקח את שם פרטי, שם משפחה, ו רָמָה של ה מְחַבֵּר בהתאמה, המיידי הוא רק שורה אחת:

מחבר מחבר = db.newInstance (מחבר מחלקה, "לוק", "שמיים", 9); db.save (מחבר);

בשורות הבאות משתמשים לדפדוף ולמחיקת כל הרשומות של מחלקת המחבר:

עבור (מחבר מחבר: db.browseClass (מחבר.קלאס)) {db.delete (מחבר); }

כדי לספור את כל המחברים עלינו לספק את הכיתה ואת מופע מסד הנתונים ללא צורך לכתוב שאילתת SQL:

מחברים ארוכים מספר = db.countClass (מחבר.קלאס);

באופן דומה, אנו מבררים מחברים עם רָמָה 7 ככה:

@ מבט פומבי בטל שניתן DB_whenSavingAuthors_thenWeGetOnesWithLevelSeven () {עבור (מחבר מחבר: db.browserClass (מחבר.קלאס)) {db.delete (מחבר); } מחבר authorOne = db.newInstance (מחבר מחלקה, "ליאו", "מרתה", 7); db.save (authorOne); מחבר authorTwo = db.newInstance (מחבר מחלקה, "לוסיין", "אורליאן", 9); db.save (authorTwo); תוצאת רשימה = db.query (OSQLSynchQuery חדש ("בחר * מהמחבר כאשר רמה = 7")); assertEquals (1, result.size ()); }

לבסוף, זהו המדריך הרשמי המציג כמה שימושים מתקדמים של Object API.

5. מסקנה

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

כמו תמיד, ניתן למצוא את קוד המקור של מאמר זה ב- GitHub.