簡體   English   中英

CRUD 操作中的分區鍵是強制性的嗎? 宇宙數據庫 Java SDKv4

[英]Is Partition key mandatory in the CRUD operations | cosmos db Java SDKv4

我正在從 documentdb SDK 遷移到 cosmosdb SDK v4。

我在同步 api 方法中看到以下模式

createItem - 具有使用 & 不帶分區鍵作為參數公開的方法。

upsertItem - 無法將分區鍵作為參數傳遞。

replaceItem & deleteItem --- 1 以分區鍵為參數的方法。

拋開性能不談,

  1. 即使沒有分區鍵,所有這些方法都可以工作嗎?
  2. 發送 null 與不發送分區鍵相同嗎? (對於 null,我認為 cosmos 可能會尋找 null 分區,但在replaceItemdeleteItem的情況下,它是使用分區鍵作為參數的單一暴露方法。這是否意味着分區鍵對於replaceItemdeleteItem是必需的)

找不到任何官方文檔確認。 任何線索都會有很大幫助。

您在創建集合時聲明了一個分區鍵。 您傳遞給“createItem”“upsertItem”等方法的 object 將具有一個屬性名稱與在集合創建期間聲明的分區鍵匹配的字段。 該字段的值將用作分區鍵值。

例子:

集合分區鍵“/customerId”

Object 待持續:

    public class Order {
        private String id;
        private String status;
        private String customerId;
        private BigDecimal subTotal;
        private List<LineItem> lineItems = new ArrayList<>();
}
        

創建訂單:

    public Mono<Integer> createOrder(Order order) {
        return cosmosDB
                .getContainer()
                .createItem(order)
                .map(CosmosItemResponse::getStatusCode);
}

你可以資助一個完整的工作示例,一個使用 V4 java SDK 的商店應用程序。 https://github.com/RaviTella/store

  1. 在 CRUD 操作期間,不必明確告訴 cosmos 分區鍵(通過參數或 CosmosItemRequestOptions)。 如果不可用,cosmos 會讀取文檔(正在添加/更新)並找到分區鍵。

  2. 將分區鍵參數發送為 null 與不發送分區鍵相同。

     a. container.createItem(document, new PartitionKey(null), null); // cosmos looks for partition defined by null key b. container.createItem(document, null, null); // scans document to figure out partition key value as stated in (1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM