מבוא ל- Spring Data Azure Cosmos DB

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

במדריך זה נלמד על Azure Cosmos DB וכיצד נוכל לתקשר איתה באמצעות Spring Data.

2. Azure Cosmos DB

Azure Cosmos DB הוא שירות מסדי הנתונים המופץ ברחבי העולם של מיקרוסופט.

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

Azure Cosmos DB אינו נותן רק שתי אפשרויות עקביות כלומר עקביות או לא עקביות. במקום זאת, אנו מקבלים חמש אפשרויות עקביות: חָזָק, קיפאון מוגבל, מוֹשָׁב, קידומת עקבית, ו בסופו של דבר.

אנו יכולים לשנות את קנה המידה הן את התפוקה והן את האחסון של Azure Cosmos DB.

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

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

אנו יכולים לעבוד עם Azure CosmosDb באמצעות ממשקי API סטנדרטיים שונים כגון SQL, MongoDB, קסנדרה וכו '.

3. Spring Data Azure Cosmos DB

מיקרוסופט מספקת גם מודול המאפשר לנו לעבוד עם Cosmos DB באמצעות Spring Data. בחלק הבא נראה כיצד נוכל להשתמש ב- Azure Cosmos DB ביישום Spring Boot.

בדוגמה שלנו, ניצור יישום אינטרנט של Spring המאחסן ישות מוצרים במסד נתונים של Azure Cosmos ומבצע עליה פעולות בסיסיות של CRUD. ראשית, עלינו להגדיר חשבון ומסד נתונים בפורטל Azure, בהתאם להוראות בתיעוד.

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

אנו יכולים להשתמש באמולטור בסביבה המקומית שלנו בשתי דרכים: על ידי הורדת אמולטור Azure Cosmos במחשב שלנו או הפעלת האמולטור ב- Docker עבור Windows.

אנו נבחר באפשרות להריץ אותו ב- Docker עבור חלונות. בואו נמשוך את תמונת ה- Docker על ידי הפעלת הפקודה הבאה:

docker למשוך מיקרוסופט / azure-cosmosdb-emulator

אז נוכל להפעיל את תמונת ה- Docker ולהפעיל את המיכל על ידי הפעלת הפקודות הבאות:

הגדר containerName = azure-cosmosdb-emulator להגדיר hostDirectory =% LOCALAPPDATA% \ azure-cosmosdb-emulator.hostd md% hostDirectory% 2> ריצת העגינה האפסית - שם% containerName% - זיכרון 2GB - mount "type = bind, source =% hostDirectory%, יעד = C: \ CosmosDB.Emulator \ bind-mount "-P - אינטראקטיבי --tt microsoft / azure-cosmosdb-emulator

לאחר שהגדרנו את חשבון Azure Cosmos DB ואת מסד הנתונים בפורטל Azure או ב- Docker, נוכל להמשיך ולהגדיר אותו ביישום Spring Boot שלנו.

4. שימוש ב- Azure Cosmos DB באביב

4.1. קביעת תצורה של נתוני האביב Azure Cosmos DB עם Spring

אנו מתחילים בהוספת תלות האביב-נתונים-קוסמוס-ד ב שלנו pom.xml:

 com.microsoft.azure spring-data-cosmosdb 2.3.0 

כדי לגשת ל- Azure Cosmos DB מיישום Spring שלנו נצטרך את ה- URI של מסד הנתונים שלנו, זה מפתחות הגישה ושם מסד הנתונים. ואז נוסיף את מאפייני החיבור שלנו application.properties:

azure.cosmosdb.uri = cosmodb-uri azure.cosmosdb.key = cosmodb-primary-key azure.cosmosdb.secondaryKey = cosmodb-second-key azure.cosmosdb.database = cosmodb-name 

אנו יכולים למצוא את הערכים של המאפיינים הנ"ל מפורטל Azure. ה- URI, המפתח הראשי והמפתח המשני יהיו זמינים בחלק המפתחות של ה- Azure Cosmos DB שלנו בפורטל Azure.

כדי להתחבר ל- Azure Cosmos DB מהיישום שלנו עלינו ליצור לקוח. בשביל זה, אנחנו צריכים להאריך תקציר קוסמוס תצורה בכיתת התצורה שלנו והוסף את @EnableCosmosRepositories ביאור.

הערה זו תסרוק אחר ממשקים המרחיבים את ממשקי המאגר של Spring Data בחבילה שצוינה.

אנחנו גם צריכים להגדיר שעועית מסוג CosmosDBConfig:

@Configuration @EnableCosmosRepositories (basePackages = "com.baeldung.spring.data.cosmosdb.repository") מחלקה ציבורית AzureCosmosDbConfiguration מרחיב את AbstractCosmosConfiguration {@Value ("$ {azure.cosmosdb.uri}") פרטי מחרוזת uri; מפתח מחרוזת פרטי @Value ("$ {azure.cosmosdb.key}"); @Value ("$ {azure.cosmosdb.database}") מחרוזת פרטית dbName; פרטי CosmosKeyCredential cosmosKeyCredential; @Bean הציבור CosmosDBConfig getConfig () {this.cosmosKeyCredential = CosmosKeyCredential חדש (מפתח); CosmosDBConfig cosmosdbConfig = CosmosDBConfig.builder (uri, this.cosmosKeyCredential, dbName) .build (); החזר cosmosdbConfig; }}

4.2. יצירת ישות עבור Azure Cosmos DB

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

@Document (collection = "products") סוג מוצר ציבורי {@Id פרטי מחרוזת productid; פרטי מחרוזת productName; מחיר כפול פרטי; @PartitionKey פרטי מחרוזת productCategory; }

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

הגדרנו גם מזהה למסמך שלנו. אנחנו יכולים ליצור שדה עם השם תְעוּדַת זֶהוּת בכיתה שלנו או שאנחנו יכולים להעלות הערה על שדה עם @תְעוּדַת זֶהוּת ביאור. כאן השתמשנו ב- מזהה מוצר שדה כמזהה המסמך.

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

כברירת מחדל, מדיניות האינדקס מוגדרת על ידי Azure, אך אנו יכולים גם להתאים אותה באמצעות @DocumentIndexingPolicy ביאור על כיתת הישות שלנו.

אנו יכולים גם לאפשר נעילה אופטימית עבור מיכל היישות שלנו על ידי יצירת שדה בשם _תווית וביאור זה עם @גִרְסָה.

4.3. הגדרת המאגר

עַכשָׁיו בואו ניצור מאגר מוצר ממשק שמתארך מאגר קוסמוס. באמצעות ממשק זה נוכל לבצע פעולות CRUD ב- Azure Cosmos DB שלנו:

ממשק ציבורי @Repository ProductRepository מרחיב את CosmosRepository {רשימה findByProductName (שם מחרוזת); }

כפי שאנו רואים, זה מוגדר באופן דומה למודולי Spring Data אחרים.

4.4. בודקים את החיבור

כעת אנו יכולים ליצור מבחן ג'וניט כדי לשמור על מוצר הישות ב- Azure Cosmos DB באמצעות שלנו מאגר מוצר:

@SpringBootTest מחלקה ציבורית AzureCosmosDbApplicationManualTest {@Autowired ProductRepository productRepository; @Test הציבור בטל givenProductIsCreated_whenCallFindById_thenProductIsFound () {מוצר מוצר = מוצר חדש (); product.setProductid ("1001"); product.setProductCategory ("חולצה"); product.setPrice (110.0); product.setProductName ("חולצה כחולה"); productRepository.save (מוצר); מוצר retrievedProduct = productRepository.findById ("1001", חדש PartitionKey ("חולצה")) .orElse (null); Assert.notNull (retrievedProduct, "המוצר שאוחזר הוא אפס"); }}

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

5. מסקנה

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

הקוד עבור הדוגמה לעיל זמין ב- GitHub.