تختلف قواعد بيانات NoSQL عن قواعد البيانات العلائقية من خلال السماح بهياكل أكثر تعقيدًا دون الحاجة إلى العلاقات التقليدية مثل واحد إلى العديد أو واحد إلى واحد. بدلاً من ذلك، تستفيد قواعد بيانات NoSQL من أنواع مرنة، مثل المصفوفات أو الوثائق الفرعية، لتخزين البيانات ذات الصلة بكفاءة ضمن وثيقة واحدة. تتيح هذه المرونة للمطورين تصميم نماذج تناسب احتياجات استعلامات وأداء تطبيقاتهم.
جاكرتا NoSQL هو إطار عمل جافا يبسط التفاعلات مع قواعد بيانات NoSQL، بما في ذلك MongoDB. يوفر تعليقات تحدد كيفية تخزين البيانات، مما يسمح للمطورين بالتحكم فيما إذا كانت الكائنات المضمنة مجمعة أو مخزنة بطريقة مسطحة.
عند العمل مع MongoDB وجاكرتا NoSQL، فإن إحدى الاعتبارات الرئيسية هي كيفية هيكلة الوثائق الخاصة بك. إن الاختيار بين هيكل مسطح وهيكل مجمع يؤثر على كيفية تخزين البيانات واستعلامها واسترجاعها. في هذه المقالة، نستكشف هذين النهجين باستخدام مثال عملي.
جاكرتا NoSQL وكيان المنتج
لفهم الهياكل المسطحة والمجمعة، دعنا نقدم أولاً كيان المنتج
ونرى كيف تعمل تعليقات جاكرتا NoSQL:
public class Product {
ObjectIdConverter.class) (
private String id;
private String name;
private Manufacturer manufacturer;
private List<String> tags;
private Set<Category> categories;
Product(String name, Manufacturer manufacturer, List<String> tags, Set<Category> categories) {
this.name = name;
this.manufacturer = manufacturer;
this.tags = tags;
this.categories = categories;
}
public static ProductBuilder builder() {
return new ProductBuilder();
}
}
الآن، دعنا نستكشف كيف يمكن تخزين حقل المصنع
بشكل مختلف استنادًا إلى تعليقات جاكرتا NoSQL.
فهم الهياكل المجمعة والمسطحة
الهيكل المجموع
هيكل مجمع ينظم المعلومات ذات الصلة في كائنات متميزة داخل الوثيقة. هذه الطريقة تحسن من إمكانية القراءة وتسمح بممارسة نمذجة المجال بشكل أنظف. تحقق Jakarta NoSQL ذلك باستخدام @Embeddable(Embeddable.EmbeddableType.GROUPING)
.
مثال:
{
"_id": { "$oid": "67b264520abd020ec0eb9a4c" },
"categories": [
{ "name": "Computers", "description": "All computers" },
{ "name": "Electronics", "description": "All electronics" }
],
"manufacturer": {
"address": "One Infinite Loop Cupertino, CA 95014",
"name": "Apple",
"contactNumber": "+1-408-996-1010"
},
"name": "MacBook Pro",
"tags": ["smartphone", "tablet", "laptop"]
}
هنا، تم تجميع المُصنِّع في كائن فرعي منفصل بدلاً من وجود خصائصه في المستوى الأعلى.
Embeddable.EmbeddableType.GROUPING) (
public record Manufacturer( String name, String address, String contactNumber) {}
هيكل مسطح
يحافظ الهيكل المسطح على المعلومات ذات الصلة ضمن نفس الوثيقة، مع تضمين القوائم أو الحقول المتداخلة مباشرة. يتيح Jakarta NoSQL ذلك باستخدام @Embeddable(Embeddable.EmbeddableType.FLAT)
. هذه الطريقة مفيدة عندما تحتاج إلى وصول سريع إلى جميع التفاصيل دون الحاجة إلى استعلامات معقدة.
مثال:
{
"_id": { "$oid": "67b22d20c921154b0223b27b" },
"address": "One Infinite Loop Cupertino, CA 95014",
"categories": [
{ "name": "Electronics", "description": "All electronics" },
{ "name": "Computers", "description": "All computers" }
],
"contactNumber": "+1-408-996-1010",
"name": "Apple",
"tags": ["smartphone", "tablet", "laptop"]
}
تخزن هذه الطريقة تفاصيل المُصنِّع مباشرة في الوثيقة بدلاً من تجميعها في حقول منفصلة.
Embeddable.EmbeddableType.FLAT) (
public record Manufacturer( String name, String address, String contactNumber) {}
مثال على الاستخدام في Jakarta NoSQL
توضح مقتطفات الشيفرة التالية كيفية دمج Jakarta NoSQL لهذه الهياكل:
public class App {
public static void main(String[] args) {
var faker = new Faker();
try (SeContainer container = SeContainerInitializer.newInstance().initialize()) {
var template = container.select(DocumentTemplate.class).get();
var electronicsCategory = new Category("Electronics", "All electronics");
var computerCategory = new Category("Computers", "All computers");
var tags = List.of("smartphone", "tablet", "laptop");
var manufacturer = new Manufacturer("Apple", "One Infinite Loop Cupertino, CA 95014", "+1-408-996-1010");
Product macBookPro = Product.builder().categories(Set.of(electronicsCategory, computerCategory))
.manufacturer(manufacturer)
.name("MacBook Pro")
.tags(tags)
.build();
Product product = template.insert(macBookPro);
System.out.println("Product saved: " + product);
}
}
}
اختيار النهج الصحيح
- استخدم هيكلًا مسطحًا عندما تحتاج إلى تخطيط وثيقة أبسط مع جميع الخصائص في نفس المستوى.
- استخدم هيكلًا مجمعًا عند تنظيم البيانات ذات الصلة في كائنات فرعية منطقية لتحسين إمكانية القراءة والصيانة.
الخاتمة
تقدم Jakarta NoSQL مرونة في تنظيم مستندات MongoDB باستخدام @Embeddable(Embeddable.EmbeddableType)
. اختيار الهياكل المسطحة أو المجمعة يعتمد على أنماط الوصول إلى البيانات الخاصة بك وتفضيلات النمذجة. فهم هذه النهج يسمح بتصميم قاعدة بيانات فعال، مما يجعل الاستعلامات أكثر فعالية مع الحفاظ على نموذج المجال الخاص بك نظيفًا ومنظمًا.
للحصول على الشفرة الكاملة، قم بزيارة مستودع GitHub.
الفيديو
Source:
https://dzone.com/articles/handling-embedded-data-in-nosql-with-java