إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
مهم
لمزيد من المعلومات حول هذا SDK، يرجى الاطلاع على Azure Cosmos DB Java SDK v4 Release notes، Maven repository، Azure Cosmos DB Java SDK v4 performance plans، وAzure Cosmos DB Java SDK v4 Trouble guide.
مهم
نظرا لأن Azure Cosmos DB Java SDK v4 يحتوي على ما يصل إلى 20% معدل نقل محسن، ووضع مباشر قائم على TCP، ودعم أحدث ميزات خدمات الخلفية، نوصي بالترقية إلى الإصدار 4 في الفرصة القادمة. تابع القراءة أدناه لمعرفة المزيد.
قم بتحديث أحدث حزمة تطوير جافا للعبة Azure Cosmos DB للحصول على أفضل ما يقدمه Azure Cosmos DB - خدمة قاعدة بيانات غير علائقية مدارة بأداء تنافسي، توفر 5-9، حوكمة موارد فريدة من نوعها، والمزيد. تشرح هذه المقالة كيفية ترقية تطبيق جافا الحالي الذي يستخدم مجموعة تطوير جافا قديمة من Azure Cosmos DB إلى Azure Cosmos DB Java SDK 4.0 الأحدث لواجهة برمجة التطبيقات ل NoSQL. Azure Cosmos DB Java SDK v4 يتوافق مع الحزمة com.azure.cosmos . يمكنك استخدام التعليمات في هذا المستند إذا كنت تقوم بترحيل تطبيقك من أي من مجموعات تطوير تطوير جافا لقاعدة بيانات Azure Cosmos التالية:
- مزامنة Java SDK 2.x.x
- Async Java SDK 2.x.x
- Java SDK 3.x.x
Azure Cosmos DB Java SDKs وتعيين الحزم
الجدول التالي يسرد مجموعات تطوير جافا مختلفة من Azure Cosmos DB، واسم الحزمة، ومعلومات الإصدار:
| مجموعة تطوير جافا | تاريخ الإصدار | واجهات برمجة التطبيقات المجمعة | مافن جار | اسم حزمة جافا | مرجع واجهة برمجة التطبيقات | ملاحظات الإصدار | تاريخ التقاعد |
|---|---|---|---|---|---|---|---|
| غير متزامن 2.x.x | 2018 يونيو | Async(RxJava) | com.microsoft.azure::azure-cosmosdb |
com.microsoft.azure.cosmosdb.rx |
API | ملاحظات الإصدار | 31 أغسطس 2024 |
| Sync 2.x.x | سبتمبر 2018 | مزامنه | com.microsoft.azure::azure-documentdb |
com.microsoft.azure.cosmosdb |
API | 29 فبراير 2024 | |
| 3.x.x | يوليو 2019 | غير متزامن (مفاعل)/التزامن | com.microsoft.azure::azure-cosmos |
com.azure.data.cosmos |
API | - | 31 أغسطس 2024 |
| 4.0 | يونيو 2020 | غير متزامن (مفاعل)/التزامن | com.azure::azure-cosmos |
com.azure.cosmos |
API | - | - |
تغييرات تنفيذ SDK
فيما يلي الفروقات الرئيسية في التنفيذ بين مجموعات تطوير البرمجيات المختلفة:
تم استبدال RxJava بمفاعل في Azure Cosmos DB Java SDK إصدارات 3.x.x و4.0
إذا لم تكن على دراية بالبرمجة غير المتزامنة أو البرمجة التفاعلية، راجع دليل نمط المفاعل لمقدمة في البرمجة غير المتزامنة ومشروع المفاعل. قد يكون هذا الدليل مفيدا إذا كنت تستخدم Azure Cosmos DB Sync Java SDK 2.x.x أو Azure Cosmos DB Java SDK 3.x.x Sync API في السابق.
إذا كنت تستخدم Azure Cosmos DB Async Java SDK 2.x.x، وتخطط للانتقال إلى SDK 4.0، راجع دليل Reactor vs RxJava للحصول على إرشادات حول تحويل كود RxJava لاستخدام Reactor.
يحتوي Azure Cosmos DB Java SDK v4 على وضع اتصال مباشر في كل من واجهات برمجة التطبيقات غير المتزامنة والمزامنة
إذا كنت تستخدم Azure Cosmos DB Sync Java SDK 2.x.x، لاحظ أن وضع الاتصال المباشر المعتمد على TCP (بدلا من HTTP) مطبق في Azure Cosmos DB Java SDK 4.0 لكل من واجهات برمجة التطبيقات غير المتزامنة والمزامنة.
تغييرات مستوى واجهة برمجة التطبيقات
فيما يلي التغييرات على مستوى واجهة برمجة التطبيقات في Azure Cosmos DB Java SDK 4.x.x مقارنة ب SDK السابقة (Java SDK 3.x.x، Async Java SDK 2.x.x، و Sync Java SDK 2.x.x):
تشير Azure Cosmos DB وJava SDK 3.x.x و4.0 إلى موارد العميل ك .
Cosmos<resourceName>على سبيل المثال،CosmosClient،CosmosDatabase، .CosmosContainerبينما في الإصدار 2.x.x، لا تمتلك مجموعات تطوير جافا في Azure Cosmos DB نظام تسمية موحد.توفر Azure Cosmos DB Java SDK 3.x.x و4.0 كل من واجهات برمجة التطبيقات Sync وAsync.
Java SDK 4.0 : جميع الفئات تنتمي إلى واجهة برمجة تطبيقات Sync ما لم يرفق
Asyncاسم الفئة بعدCosmos.Java SDK 3.x.x: جميع الفئات تنتمي إلى واجهة برمجة التطبيقات غير المتزامنة ما لم يرفق
Asyncاسم الفئة بعدCosmos.Async Java SDK 2.x.x: أسماء الفئات مشابهة ل Sync Java SDK 2.x.x، لكن الاسم يبدأ ب Async.
هيكل واجهات برمجة التطبيقات الهرمي
تقدم Azure Cosmos DB Java SDK 4.0 و3.x.x هيكل واجهة برمجة تطبيقات هرمي ينظم العملاء وقواعد البيانات والحاويات بطريقة متداخلة كما هو موضح في مقتطف كود SDK 4.0 التالي:
CosmosContainer container = client.getDatabase("MyDatabaseName").getContainer("MyContainerName");
في الإصدار 2.x.x من مجموعة تطوير جافا لقاعدة بيانات Azure Cosmos، تتم جميع العمليات على الموارد والوثائق عبر مثيل العميل.
تمثيل الوثائق
في Azure Cosmos DB Java SDK 4.0، هناك POJO مخصص وهما JsonNodes الخياران لقراءة وكتابة المستندات من Azure Cosmos DB.
في Azure Cosmos DB Java SDK 3.x.x، يتم كشف الكائن CosmosItemProperties بواسطة واجهة برمجة التطبيقات العامة ويستخدم كتمثيل للمستند. لم تعد هذه الفئة معروضة علنا في الإصدار 4.0.
عمليات الاستيراد
تبدأ حزم Azure Cosmos DB Java SDK 4.0 ب
com.azure.cosmosAzure Cosmos DB Java SDK 3.x.x packages تبدأ ب
com.azure.data.cosmosAzure Cosmos DB Java SDK 2.x.x تبدأ حزم API ب
com.microsoft.azure.documentdbAzure Cosmos DB Java SDK 4.0 يضع عدة فئات في حزمة
com.azure.cosmos.modelsمتداخلة . بعض هذه الحزم تشمل:CosmosContainerResponseCosmosDatabaseResponseCosmosItemResponse- نظائر واجهة برمجة التطبيقات غير المتزامنة لجميع الحزم المذكورة أعلاه
CosmosContainerPropertiesFeedOptionsPartitionKeyIndexingPolicy-
IndexingMode... وهكذا.
الملحقات
Azure Cosmos DB Java SDK 4.0 يعرض get وطرق set للوصول إلى أعضاء النسخ. على سبيل المثال، CosmosContainer الحالة لديها container.getId() وطرق container.setId() .
هذا يختلف عن Azure Cosmos DB Java SDK 3.x.x الذي يعرض واجهة سلسة. على سبيل المثال، هناك CosmosSyncContainer حالة تحتوي container.id() على أن يتم تحميل زائد للحصول على القيمة أو تعيينها id .
إدارة تعارضات الاعتماد
الترقية من Azure Cosmos DB Java SDK V2 إلى V4 يمكن أن تسبب تعارضات تبعية بسبب التغييرات في المكتبات التي تستخدمها SDK. يتطلب حل هذه النزاعات إدارة دقيقة للتبعيات.
فهم التبعيات الجديدة: حزمة تطوير Azure Cosmos DB V4 لها مجموعة تبعيات خاصة بها قد تختلف عن تلك الموجودة في الإصدارات السابقة. تأكد من معرفتك بهذه الاعتماديات:
azure-cosmosreactor-corereactor-nettynetty-handlerguavaslf4j-apijackson-databindjackson-annotationsjackson-corecommons-lang3commons-collections4azure-coreazure-core-http-netty
إزالة الاعتماديات المتضاربة: ابدأ بإزالة الاعتماديات المتعلقة بالإصدارات السابقة من مجموعة تطوير البرمجيات من ملفك
pom.xml. تشملazure-cosmosdbهذه وأي تبعيات انتقالية قد تكون موجودة في SDK القديمة.إضافة تبعيات حزمة تطوير V4: أضف مجموعة تطوير V4 وتبعياتها إلى .
pom.xmlفيما يلي مثال:<dependency> <groupId>com.azure</groupId> <artifactId>azure-cosmos</artifactId> <version>4.x.x</version> <!-- Use the latest version available --> </dependency>تحقق من تعارضات الاعتماد: استخدم أمر Maven
dependency:treeلإنشاء شجرة تبعيات وتحديد أي تعارضات. تشغيل:mvn dependency:treeابحث عن أي نسخ متضاربة من التبعيات. غالبا ما تحدث هذه التعارضات مع مكتبات مثل
reactor-core،netty-handler،guava، وjackson.استخدم إدارة الاعتماد: إذا واجهت تعارضات في الإصدارات، قد تحتاج إلى تجاوز الإصدارات المشكلة باستخدام القسم
<dependencyManagement>في .pom.xmlإليك مثال لتطبيق نسخة محددة منreactor-core:<dependencyManagement> <dependencies> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> <version>3.x.x</version> <!-- Use a compatible version --> </dependency> <!-- Repeat for any other conflicting dependencies --> </dependencies> </dependencyManagement>استبعاد التبعيات الانتقالية: أحيانا، قد تحتاج إلى استبعاد التبعيات الانتقالية التي تسببها تبعيات أخرى. على سبيل المثال، إذا جلبت مكتبة أخرى نسخة أقدم من تبعية تتعارض، يمكنك استبعادها بهذه الطريقة:
<dependency> <groupId>some.group</groupId> <artifactId>some-artifact</artifactId> <version>x.x.x</version> <exclusions> <exclusion> <groupId>conflicting.group</groupId> <artifactId>conflicting-artifact</artifactId> </exclusion> </exclusions> </dependency>إعادة البناء والاختبار: بعد إجراء هذه التغييرات، أعد بناء مشروعك واختبره بدقة للتأكد من أن التبعيات الجديدة تعمل بشكل صحيح وعدم حدوث تعارضات وقت تشغيل.
مقارنات مقتطفات الكود
إنشاء الموارد
يظهر مقتطف الكود التالي الفروقات في كيفية إنشاء الموارد بين واجهات برمجة التطبيقات غير المتزامنة 4.0 و3.x.x و2.x.x Sync و2.x.x:
- واجهة برمجة تطبيقات Java SDK 4.0 غير المتزامنة
- واجهة برمجة تطبيقات Java SDK 3.x.x غير المتزامنة
- واجهة برمجة تطبيقات المزامنة للعبة Java SDK 2.x.x
- واجهة برمجة تطبيقات Java SDK 2.x.x غير المتزامنة
// Create Async client.
// Building an async client is still a sync operation.
CosmosAsyncClient client = new CosmosClientBuilder()
.endpoint("your.hostname")
.key("yourmasterkey")
.consistencyLevel(ConsistencyLevel.EVENTUAL)
.buildAsyncClient();
// Create database with specified name
client.createDatabaseIfNotExists("YourDatabaseName")
.flatMap(databaseResponse -> {
testDatabaseAsync = client.getDatabase("YourDatabaseName");
// Container properties - name and partition key
CosmosContainerProperties containerProperties =
new CosmosContainerProperties("YourContainerName", "/id");
// Provision manual throughput
ThroughputProperties throughputProperties = ThroughputProperties.createManualThroughput(400);
// Create container
return database.createContainerIfNotExists(containerProperties, throughputProperties);
}).flatMap(containerResponse -> {
testContainerAsync = database.getContainer("YourContainerName");
return Mono.empty();
}).subscribe();
عمليات العناصر
يظهر مقتطف الكود التالي الفروقات في كيفية تنفيذ عمليات العناصر بين واجهات برمجة التطبيقات غير المتزامنة 4.0، 3.x.x غير متزامنة، 2.x.x Sync، و2.x.x:
- واجهة برمجة تطبيقات Java SDK 4.0 غير المتزامنة
- واجهة برمجة تطبيقات Java SDK 3.x.x غير المتزامنة
- واجهة برمجة تطبيقات المزامنة للعبة Java SDK 2.x.x
- واجهة برمجة تطبيقات Java SDK 2.x.x غير المتزامنة
// Container is created. Generate many docs to insert.
int number_of_docs = 50000;
ArrayList<JsonNode> docs = generateManyDocs(number_of_docs);
// Insert many docs into container...
Flux.fromIterable(docs)
.flatMap(doc -> testContainerAsync.createItem(doc))
.subscribe(); // ...Subscribing triggers stream execution.
الفهرسه
يظهر مقتطف الكود التالي الفروقات في كيفية إنشاء الفهرسة بين واجهات برمجة التطبيقات غير المتزامنة 4.0، 3.x.x غير متزامنة، 2.x.x، و2.x.x:
- واجهة برمجة تطبيقات Java SDK 4.0 غير المتزامنة
- واجهة برمجة تطبيقات Java SDK 3.x.x غير المتزامنة
- واجهة برمجة تطبيقات المزامنة للعبة Java SDK 2.x.x
- واجهة برمجة تطبيقات Java SDK 2.x.x غير المتزامنة
CosmosContainerProperties containerProperties = new CosmosContainerProperties(containerName, "/lastName");
// Custom indexing policy
IndexingPolicy indexingPolicy = new IndexingPolicy();
indexingPolicy.setIndexingMode(IndexingMode.CONSISTENT);
// Included paths
List<IncludedPath> includedPaths = new ArrayList<>();
includedPaths.add(new IncludedPath("/*"));
indexingPolicy.setIncludedPaths(includedPaths);
// Excluded paths
List<ExcludedPath> excludedPaths = new ArrayList<>();
excludedPaths.add(new ExcludedPath("/name/*"));
indexingPolicy.setExcludedPaths(excludedPaths);
containerProperties.setIndexingPolicy(indexingPolicy);
ThroughputProperties throughputProperties = ThroughputProperties.createManualThroughput(400);
database.createContainerIfNotExists(containerProperties, throughputProperties);
CosmosAsyncContainer containerIfNotExists = database.getContainer(containerName);
الإجراءات المخزنة
يظهر مقتطف الكود التالي الفروقات في كيفية إنشاء الإجراءات المخزنة بين واجهات برمجة التطبيقات غير المتزامنة 4.0 و3.x.x و2.x.x Sync و2.x.x:
- واجهة برمجة تطبيقات Java SDK 4.0 غير المتزامنة
- واجهة برمجة تطبيقات Java SDK 3.x.x غير المتزامنة
- واجهة برمجة تطبيقات المزامنة للعبة Java SDK 2.x.x
- واجهة برمجة تطبيقات Java SDK 2.x.x غير المتزامنة
logger.info("Creating stored procedure...\n");
String sprocId = "createMyDocument";
String sprocBody = "function createMyDocument() {\n" +
"var documentToCreate = {\"id\":\"test_doc\"}\n" +
"var context = getContext();\n" +
"var collection = context.getCollection();\n" +
"var accepted = collection.createDocument(collection.getSelfLink(), documentToCreate,\n" +
" function (err, documentCreated) {\n" +
"if (err) throw new Error('Error' + err.message);\n" +
"context.getResponse().setBody(documentCreated.id)\n" +
"});\n" +
"if (!accepted) return;\n" +
"}";
CosmosStoredProcedureProperties storedProcedureDef = new CosmosStoredProcedureProperties(sprocId, sprocBody);
container.getScripts()
.createStoredProcedure(storedProcedureDef,
new CosmosStoredProcedureRequestOptions()).block();
// ...
logger.info(String.format("Executing stored procedure %s...\n\n", sprocId));
CosmosStoredProcedureRequestOptions options = new CosmosStoredProcedureRequestOptions();
options.setPartitionKey(new PartitionKey("test_doc"));
container.getScripts()
.getStoredProcedure(sprocId)
.execute(null, options)
.flatMap(executeResponse -> {
logger.info(String.format("Stored procedure %s returned %s (HTTP %d), at cost %.3f RU.\n",
sprocId,
executeResponse.getResponseAsString(),
executeResponse.getStatusCode(),
executeResponse.getRequestCharge()));
return Mono.empty();
}).block();
موجز التغيير
يظهر مقتطف الكود التالي الفروقات في كيفية تنفيذ عمليات تغذية التغيير بين واجهات برمجة التطبيقات غير المتزامنة 4.0 و3.x.x:
- واجهة برمجة تطبيقات Java SDK 4.0 غير المتزامنة
- واجهة برمجة تطبيقات Java SDK 3.x.x غير المتزامنة
- واجهة برمجة تطبيقات المزامنة للعبة Java SDK 2.x.x
- واجهة برمجة تطبيقات Java SDK 2.x.x غير المتزامنة
ChangeFeedProcessor changeFeedProcessorInstance =
new ChangeFeedProcessorBuilder()
.hostName(hostName)
.feedContainer(feedContainer)
.leaseContainer(leaseContainer)
.handleChanges((List<JsonNode> docs) -> {
logger.info("--->setHandleChanges() START");
for (JsonNode document : docs) {
try {
//Change Feed hands the document to you in the form of a JsonNode
//As a developer you have two options for handling the JsonNode document provided to you by Change Feed
//One option is to operate on the document in the form of a JsonNode, as shown below. This is great
//especially if you do not have a single uniform data model for all documents.
logger.info("---->DOCUMENT RECEIVED: " + OBJECT_MAPPER.writerWithDefaultPrettyPrinter()
.writeValueAsString(document));
//You can also transform the JsonNode to a POJO having the same structure as the JsonNode,
//as shown below. Then you can operate on the POJO.
CustomPOJO pojo_doc = OBJECT_MAPPER.treeToValue(document, CustomPOJO.class);
logger.info("----=>id: " + pojo_doc.getId());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
logger.info("--->handleChanges() END");
})
.buildChangeFeedProcessor();
// ...
changeFeedProcessorInstance.start()
.subscribeOn(Schedulers.boundedElastic())
.subscribe();
مدة العيش على مستوى الحاوية (TTL)
يظهر مقتطف الكود التالي الفروقات في كيفية إنشاء وقت للعيش للبيانات في الحاوية بين واجهات برمجة التطبيقات غير المتزامنة 4.0، 3.x.x Async، 2.x.x Sync، و2.x.x:
- واجهة برمجة تطبيقات Java SDK 4.0 غير المتزامنة
- واجهة برمجة تطبيقات Java SDK 3.x.x غير المتزامنة
- واجهة برمجة تطبيقات المزامنة للعبة Java SDK 2.x.x
- واجهة برمجة تطبيقات Java SDK 2.x.x غير المتزامنة
CosmosAsyncContainer container;
// Create a new container with TTL enabled with default expiration value
CosmosContainerProperties containerProperties = new CosmosContainerProperties("myContainer", "/myPartitionKey");
containerProperties.setDefaultTimeToLiveInSeconds(90 * 60 * 60 * 24);
ThroughputProperties throughputProperties = ThroughputProperties.createManualThroughput(400);
database.createContainerIfNotExists(containerProperties, throughputProperties).block();
container = database.getContainer("myContainer");
مدة العيش على مستوى العنصر (TTL)
يوضح مقطع الكود التالي الفروقات في كيفية إنشاء وقت للعيش لعنصر بين واجهات برمجة التطبيقات غير المتزامنة 4.0 و3.x.x و2.x.x Sync و2.x.x:
- واجهة برمجة تطبيقات Java SDK 4.0 غير المتزامنة
- واجهة برمجة تطبيقات Java SDK 3.x.x غير المتزامنة
- واجهة برمجة تطبيقات المزامنة للعبة Java SDK 2.x.x
- واجهة برمجة تطبيقات Java SDK 2.x.x غير المتزامنة
// Include a property that serializes to "ttl" in JSON
class SalesOrder
{
private String id;
private String customerId;
private Integer ttl;
public SalesOrder(String id, String customerId, Integer ttl) {
this.id = id;
this.customerId = customerId;
this.ttl = ttl;
}
public String getId() {return this.id;}
public void setId(String new_id) {this.id = new_id;}
public String getCustomerId() {return this.customerId;}
public void setCustomerId(String new_cid) {this.customerId = new_cid;}
public Integer getTtl() {return this.ttl;}
public void setTtl(Integer new_ttl) {this.ttl = new_ttl;}
//...
}
// Set the value to the expiration in seconds
SalesOrder salesOrder = new SalesOrder(
"SO05",
"CO18009186470",
60 * 60 * 24 * 30 // Expire sales orders in 30 days
);
الخطوات التالية
- بناء تطبيق جافا لإدارة Azure Cosmos DB لبيانات NoSQL باستخدام مجموعة تطوير V4
- تعرف على ملفات تطوير جافا المبنية على المفاعل
- تعرف على كيفية تحويل كود RxJava غير المتزامن إلى كود Reactor غير المتزامن مع دليل Reactor مقابل RxJava
- هل تحاول القيام بتخطيط السعة للترحيل إلى Azure Cosmos DB؟
- إذا لم تكن تعرف سوى عدد vCores والخوادم في نظام مجموعة قاعدة البيانات الحالية فقط، فاقرأ عن تقدير وحدات الطلب باستخدام vCores أو vCPUs
- إذا كان كل ما تعرفه هو عدد vcores والخوادم الموجودة في مجموعة قاعدة البيانات، اقرأ عن تقدير وحدات الطلب باستخدام vCores أو vCPUs