Bagikan melalui


Tips performa untuk Azure Cosmos DB Async Java SDK v2

Penting

Ini bukan Java SDK terbaru untuk Azure Cosmos DB! Anda harus meningkatkan proyek Anda ke Azure Cosmos DB Java SDK v4 lalu membaca panduan tips performa Azure Cosmos DB Java SDK v4. Ikuti instruksi dalam panduan Migrasi ke Azure Cosmos DB Java SDK v4 dan panduan Reactor vs RxJava untuk meningkatkan.

Tips performa dalam artikel ini hanya untuk Azure Cosmos DB Async Java SDK v2. Lihat catatan Rilis Azure Cosmos DB Async Java SDK v2, repositori Maven, dan panduan pemecahan masalah Azure Cosmos DB Async Java SDK v2 untuk informasi selengkapnya.

Penting

Pada 31 Agustus 2024, Azure Cosmos DB Async Java SDK v2.x akan dihentikan; SDK dan semua aplikasi yang menggunakan SDK akan terus berfungsi; Azure Cosmos DB hanya akan berhenti memberikan pemeliharaan dan dukungan lebih lanjut untuk SDK ini. Sebaiknya ikuti petunjuk di atas untuk bermigrasi ke Azure Cosmos DB Java SDK v4.

Azure Cosmos DB merupakan database terdistribusi yang cepat dan fleksibel yang menskalakan secara lancar dengan tingkat latensi dan throughput terjamin. Anda tidak perlu membuat perubahan arsitektur besar atau menulis kode kompleks untuk menskalakan database dengan Azure Cosmos DB. Meningkatkan dan menurunkan skala semudah membuat satu panggilan API atau panggilan metode SDK. Namun, karena Azure Cosmos DB diakses melalui panggilan jaringan ada pengoptimalan sisi klien yang dapat Anda lakukan untuk mencapai performa puncak saat menggunakan Azure Cosmos DB Async Java SDK v2.

Jadi, jika Anda bertanya "Bagaimana cara meningkatkan kinerja database saya?" pertimbangkan opsi berikut ini:

Jaringan

  • Mode koneksi: Gunakan mode Langsung

    Bagaimana klien terhubung ke Azure Cosmos DB memiliki implikasi penting pada performa, terutama dalam hal latensi sisi klien. ConnectionMode adalah pengaturan konfigurasi utama yang tersedia untuk mengonfigurasi ConnectionPolicy klien. Untuk Azure Cosmos DB Async Java SDK v2, dua ConnectionModes yang tersedia adalah:

    Mode gateway didukung pada semua platform SDK dan ini adalah opsi yang dikonfigurasi secara default. Jika aplikasi Anda berjalan dalam jaringan perusahaan dengan pembatasan firewall yang ketat, mode Gateway adalah pilihan terbaik karena menggunakan port HTTPS standar dan satu titik akhir. Namun, kompromi performa adalah bahwa modus Gateway melibatkan hop jaringan tambahan setiap kali data dibaca atau ditulis ke Azure Cosmos DB. Karena itu, mode Langsung menawarkan performa yang lebih baik karena lebih sedikit lompatan jaringan.

    ConnectionMode dikonfigurasi selama pembangunan instans DocumentClient dengan parameter ConnectionPolicy.

Async Java SDK V2 (Maven com.microsoft.azure::azure-cosmosdb)

    public ConnectionPolicy getConnectionPolicy() {
        ConnectionPolicy policy = new ConnectionPolicy();
        policy.setConnectionMode(ConnectionMode.Direct);
        policy.setMaxPoolSize(1000);
        return policy;
    }

    ConnectionPolicy connectionPolicy = new ConnectionPolicy();
    DocumentClient client = new DocumentClient(HOST, MASTER_KEY, connectionPolicy, null);
  • Kolokasikan klien di wilayah Azure yang sama untuk performa

    Jika memungkinkan, tempatkan aplikasi apa pun yang memanggil Azure Cosmos DB di wilayah yang sama dengan database Azure Cosmos DB. Sebagai perkiraan perbandingan, panggilan ke Azure Cosmos DB dalam wilayah yang sama selesai dalam 1-2 ms, tetapi latensi antara pantai Barat AS dan pantai Timur AS adalah >50 ms. Latensi ini dapat bervariasi dari permintaan ke permintaan tergantung pada rute yang diambil oleh permintaan saat melewati dari klien ke batas pusat data Azure. Latensi serendah mungkin dicapai dengan memastikan aplikasi panggilan berada di wilayah Azure yang sama dengan titik akhir Azure Cosmos DB yang tersedia. Untuk daftar wilayah yang tersedia, lihat Wilayah Azure.

    Ilustrasi kebijakan koneksi Azure Cosmos DB

Penggunaan SDK

  • Menginstal SDK terbaru

    Azure Cosmos DB SDK terus ditingkatkan untuk memberikan performa terbaik. Lihat halaman Catatan Rilis Azure Cosmos DB Async Java SDK v2 untuk menentukan SDK terbaru dan meninjau peningkatan.

  • Menggunakan klien database tunggal Azure Cosmos DB sepanjang siklus hidup aplikasi Anda

    Setiap instans AsyncDocumentClient aman untuk penggunaan bersama secara paralel dan melakukan pengelolaan koneksi serta penyimpanan alamat yang efisien. Untuk memungkinkan manajemen koneksi yang efisien dan performa yang lebih baik oleh AsyncDocumentClient, disarankan untuk menggunakan satu instans AsyncDocumentClient per AppDomain untuk masa pakai aplikasi.

  • Menyetel Kebijakan Koneksi

    Secara default, permintaan Azure Cosmos DB Mode Langsung dibuat melalui TCP saat menggunakan Azure Cosmos DB Async Java SDK v2. Secara internal SDK menggunakan arsitektur mode Langsung khusus untuk mengelola sumber daya jaringan secara dinamis dan mendapatkan performa terbaik.

    Dalam Azure Cosmos DB Async Java SDK v2, mode Langsung adalah pilihan terbaik untuk meningkatkan performa database dengan sebagian besar beban kerja.

    • Gambaran umum mode Langsung

    Ilustrasi arsitektur modus langsung

    Arsitektur sisi klien yang digunakan dalam mode Langsung memungkinkan pemanfaatan jaringan yang dapat diprediksi dan akses multipleks ke replika Azure Cosmos DB. Diagram di atas menunjukkan bagaimana Direct mode merutekan permintaan klien ke replika di backend Azure Cosmos DB. Arsitektur Mode Langsung mengalokasikan hingga 10 Saluran di sisi klien per replika DB. Kanal adalah koneksi TCP yang memiliki buffer permintaan di depannya, yang memiliki kapasitas 30 permintaan. Saluran milik replika dialokasikan secara dinamis sesuai kebutuhan oleh Titik Akhir Layanan replika. Saat pengguna mengeluarkan permintaan dalam mode Langsung, TransportClient merutekan permintaan ke titik akhir layanan yang tepat berdasarkan kunci partisi. Antrean Permintaan membuffer permintaan sebelum mencapai Titik Akhir Layanan.

    • Opsi Konfigurasi ConnectionPolicy untuk mode Langsung

      Sebagai langkah pertama, gunakan pengaturan konfigurasi yang direkomendasikan berikut di bawah ini. Hubungi tim Azure Cosmos DB jika Anda mengalami masalah pada topik khusus ini.

      Jika Anda menggunakan Azure Cosmos DB sebagai database referensi (yaitu, database digunakan untuk banyak operasi baca titik dan beberapa operasi tulis), mungkin dapat diterima untuk mengatur idleEndpointTimeout ke 0 (artinya, tidak ada batas waktu).

      Opsi konfigurasi Bawaan
      bufferPageSize 8192
      connectionTimeout "PT1M"
      idleChannelTimeout "PT0S"
      idleEndpointTimeout "PT1M10S"
      maxBufferCapacity 8388608
      maxChannelsPerEndpoint 10
      maxRequestsPerChannel 30
      waktuDeteksiGantungMenerima "PT1M5S"
      requestExpiryInterval "PT5S"
      requestTimeout "PT1M"
      requestTimerResolution "PT0.5S"
      KirimWaktuDeteksiMacet "PT10S"
      Batas Waktu Penutupan "PT15S"
  • Tips pemrograman untuk mode Langsung

    Tinjau artikel Pemecahan Masalah Azure Cosmos DB Async Java SDK v2 sebagai garis besar untuk menyelesaikan masalah SDK apa pun.

    Beberapa tips pemrograman penting saat menggunakan mode Langsung:

    • Gunakan multithreading di aplikasi Anda untuk transfer data TCP yang efisien - Setelah membuat permintaan, aplikasi Anda harus berlangganan untuk menerima data di utas lain. Tidak melakukannya memaksa operasi "half-duplex" yang tidak diinginkan dan mengakibatkan permintaan berikutnya diblokir karena harus menunggu balasan dari permintaan sebelumnya.

    • Lakukan beban kerja intensif komputasi pada utas khusus - Untuk alasan serupa dengan tip sebelumnya, operasi seperti pemrosesan data kompleks paling baik ditempatkan di utas terpisah. Permintaan yang menarik data dari penyimpanan data lain (misalnya jika utas menggunakan penyimpanan data Azure Cosmos DB dan Spark secara bersamaan) mungkin mengalami peningkatan latensi dan disarankan untuk menelurkan utas tambahan yang menunggu respons dari penyimpanan data lainnya.

    • Pemodelan data - Azure Cosmos DB SLA mengasumsikan ukuran dokumen kurang dari 1 KB. Mengoptimalkan model data dan pemrograman Anda untuk mendukung ukuran dokumen yang lebih kecil umumnya akan menyebabkan penurunan latensi. Jika Anda akan memerlukan penyimpanan dan pengambilan dokumen yang lebih besar dari 1 KB, pendekatan yang disarankan adalah agar dokumen dapat ditautkan ke data di Azure Blob Storage.

  • Menyetel kueri paralel pada koleksi yang telah dipartisi

    Azure Cosmos DB Async Java SDK v2 mendukung kueri paralel, yang memungkinkan Anda mengkueri koleksi yang dipartisi secara paralel. Untuk informasi selengkapnya, lihat sampel kode yang terkait dengan bekerja dengan SDK. Kueri paralel dirancang untuk meningkatkan latensi dan throughput dibandingkan versi serialnya.

    • Mengatur setMaxDegreeOfParallelism:

      Kueri paralel bekerja dengan mengkueri beberapa partisi secara paralel. Namun, data dari koleksi yang dipartisi individu diambil secara serial sehubungan dengan kueri. Jadi, gunakan setMaxDegreeOfParallelism untuk mengatur jumlah partisi yang memiliki peluang maksimum untuk mencapai kueri yang paling berkinerja, asalkan semua kondisi sistem lainnya tetap sama. Jika Anda tidak tahu jumlah partisi, Anda dapat menggunakan setMaxDegreeOfParallelism untuk mengatur angka tinggi, dan sistem memilih minimum (jumlah partisi, input yang disediakan pengguna) sebagai tingkat paralelisme maksimum.

      Penting untuk dicatat bahwa kueri paralel menghasilkan manfaat terbaik jika data didistribusikan secara merata di semua partisi sehubungan dengan kueri. Jika koleksi yang dipartisi dipartisi sedemikian sehingga semua atau sebagian besar data yang dikembalikan oleh kueri terkonsentrasi dalam beberapa partisi (satu partisi dalam kasus terburuk), maka performa kueri akan terhambat oleh partisi-partisi tersebut.

    • Menyetel setMaxBufferedItemCount:

      Kueri paralel dirancang untuk melakukan prefetch hasil saat batch hasil saat ini sedang diproses oleh klien. Prefetching membantu dalam pengurangan latensi kueri secara keseluruhan. setMaxBufferedItemCount membatasi jumlah hasil yang telah diambil sebelumnya. Mengatur setMaxBufferedItemCount ke jumlah hasil yang diharapkan yang dikembalikan (atau angka yang lebih tinggi) memungkinkan kueri untuk menerima manfaat maksimum dari prefetching.

      Prefetching bekerja dengan cara yang sama terlepas dari MaxDegreeOfParallelism, dan ada satu buffer untuk data dari semua partisi.

  • Menerapkan backoff pada interval yang ditentukan oleh getRetryAfterInMilliseconds

    Selama pengujian performa, Anda harus meningkatkan beban hingga sejumlah kecil permintaan dibatasi lajunya. Jika dibatasi, aplikasi klien harus menunda sesuai dengan interval pengulangan yang ditentukan oleh server. Menghormati konsep "backoff" memastikan bahwa Anda menghabiskan waktu seminimal mungkin menunggu di antara percobaan ulang.

  • Meluaskan skala beban kerja klien Anda

    Jika Anda menguji pada tingkat throughput tinggi (>50.000 RU/dtk), aplikasi klien mungkin menjadi hambatan karena mesin mencapai batas maksimum pada pemakaian CPU atau jaringan. Jika mencapai titik ini, Anda dapat terus mendorong akun Azure Cosmos DB lebih jauh dengan meluaskan skala aplikasi klien di beberapa server.

  • Menggunakan alamat berbasis nama

    Gunakan alamat berbasis nama, di mana tautan memiliki format dbs/MyDatabaseId/colls/MyCollectionId/docs/MyDocumentId, alih-alih SelfLinks (_self), yang memiliki format dbs/<database_rid>/colls/<collection_rid>/docs/<document_rid> untuk menghindari pengambilan ResourceId dari semua sumber daya yang digunakan untuk membuat tautan. Selain itu, karena sumber daya ini dibuat ulang (mungkin dengan nama yang sama), penyimpanan sementara sumber daya mungkin tidak membantu.

  • Menyetel ukuran halaman untuk kueri/umpan baca untuk performa yang lebih baik

    Saat melakukan pembacaan massal dokumen dengan menggunakan fungsionalitas umpan baca (misalnya, readDocuments) atau saat mengeluarkan kueri SQL, hasilnya dikembalikan dengan cara tersegmentasi jika tataan hasil terlalu besar. Secara default, hasil dikembalikan dalam potongan 100 item atau 1 MB, tergantung batas mana yang terpenuhi lebih dulu.

    Untuk mengurangi jumlah perjalanan pulang pergi jaringan yang diperlukan untuk mengambil semua hasil yang berlaku, Anda dapat meningkatkan ukuran halaman menggunakan header permintaan x-ms-max-item-count hingga 1000. Dalam kasus di mana Anda hanya perlu menampilkan beberapa hasil, misalnya, jika antarmuka pengguna atau API aplikasi Anda hanya mengembalikan 10 hasil sekali waktu, Anda juga dapat mengurangi ukuran halaman menjadi 10 untuk mengurangi throughput yang digunakan untuk baca dan kueri.

    Anda juga dapat mengatur ukuran halaman menggunakan metode setMaxItemCount.

  • Gunakan Scheduler yang Sesuai (Hindari mencuri Event loop thread Netty IO)

    Azure Cosmos DB Async Java SDK v2 menggunakan netty untuk IO yang tidak terblokir. SDK menggunakan sejumlah tetap utas perulangan peristiwa Netty IO (sebanyak core CPU yang dimiliki mesin Anda) untuk menjalankan operasi IO. Observable yang dikembalikan oleh API memunculkan hasil pada salah satu utas netty dari loop peristiwa IO yang dibagikan. Jadi penting untuk tidak memblokir utas jelatang perulangan peristiwa IO bersama. Melakukan pekerjaan intensif CPU atau operasi pemblokiran pada thread netty dalam loop peristiwa IO dapat menyebabkan deadlock atau mengurangi throughput SDK secara signifikan.

    Misalnya, kode berikut menjalankan pekerjaan yang membutuhkan CPU tinggi pada utas netty IO event loop:

    Async Java SDK V2 (Maven com.microsoft.azure::azure-cosmosdb)

      Observable<ResourceResponse<Document>> createDocObs = asyncDocumentClient.createDocument(
        collectionLink, document, null, true);
    
      createDocObs.subscribe(
        resourceResponse -> {
          //this is executed on eventloop IO netty thread.
          //the eventloop thread is shared and is meant to return back quickly.
          //
          // DON'T do this on eventloop IO netty thread.
          veryCpuIntensiveWork();
        });
    

    Setelah hasil diterima, jika Anda ingin melakukan pekerjaan intensif CPU pada hasil tersebut, Anda harus menghindari melakukannya pada thread Netty IO event loop. Anda dapat menggunakan Scheduler Anda sendiri untuk menyediakan "thread" khusus dalam menjalankan pekerjaan Anda.

    Async Java SDK V2 (Maven com.microsoft.azure::azure-cosmosdb)

      import rx.schedulers;
    
      Observable<ResourceResponse<Document>> createDocObs = asyncDocumentClient.createDocument(
        collectionLink, document, null, true);
    
      createDocObs.subscribeOn(Schedulers.computation())
      subscribe(
        resourceResponse -> {
          // this is executed on threads provided by Scheduler.computation()
          // Schedulers.computation() should be used only when:
          //   1. The work is cpu intensive 
          //   2. You are not doing blocking IO, thread sleep, etc. in this thread against other resources.
          veryCpuIntensiveWork();
        });
    

    Berdasarkan jenis pekerjaan Anda, Anda harus menggunakan RxJava Scheduler yang sesuai untuk pekerjaan Anda. Baca di sini Schedulers.

    Untuk Informasi Selengkapnya, Silakan lihat halaman GitHub untuk Azure Cosmos DB Async Java SDK v2.

  • Menonaktifkan pengelogan netty

    Pengelogan pustaka Netty cerewet dan perlu dinonaktifkan (menekan masuk konfigurasi mungkin tidak cukup) untuk menghindari biaya CPU tambahan. Jika Anda tidak dalam mode penelusuran kesalahan, nonaktifkan pengelogan netty sama sekali. Jadi jika Anda menggunakan log4j untuk menghapus biaya CPU tambahan yang dikeluarkan oleh org.apache.log4j.Category.callAppenders() dari netty, tambahkan baris berikut ke basis kode Anda:

    org.apache.log4j.Logger.getLogger("io.netty").setLevel(org.apache.log4j.Level.OFF);
    
  • Batas Sumber Daya file Terbuka OS

    Beberapa sistem Linux (seperti Red Hat) memiliki batas atas jumlah file yang terbuka dan juga jumlah koneksi. Jalankan yang berikut untuk melihat batas saat ini:

    ulimit -a
    

    Jumlah file terbuka (nofile) harus cukup besar untuk memastikan adanya ruang yang memadai bagi ukuran kumpulan koneksi yang Anda atur, serta file terbuka lainnya yang dikelola oleh OS. Ini dapat dimodifikasi untuk memungkinkan ukuran kumpulan koneksi yang lebih besar.

    Buka file limits.conf:

    vim /etc/security/limits.conf
    

    Tambahkan/modifikasi baris berikut:

    * - nofile 100000
    

Kebijakan Pengindeksan

  • Mengecualikan jalur yang tidak digunakan dari pengindeksan untuk penulisan yang lebih cepat

    Kebijakan pengindeksan Azure Cosmos DB memungkinkan Anda menentukan jalur dokumen mana yang akan disertakan atau dikecualikan dari pengindeksan dengan menggunakan Jalur Pengindeksan (setIncludedPaths dan setExcludedPaths). Penggunaan jalur pengindeksan dapat menawarkan performa tulis yang lebih baik dan penyimpanan indeks yang lebih rendah untuk skenario di mana pola kueri diketahui sebelumnya karena biaya pengindeksan secara langsung berkorelasi dengan jumlah jalur unik yang diindeks. Misalnya, kode berikut menunjukkan cara mengecualikan seluruh bagian dokumen (juga dikenal sebagai subtree) dari pengindeksan menggunakan wildcard "*".

    Async Java SDK V2 (Maven com.microsoft.azure::azure-cosmosdb)

    Index numberIndex = Index.Range(DataType.Number);
    numberIndex.set("precision", -1);
    indexes.add(numberIndex);
    includedPath.setIndexes(indexes);
    includedPaths.add(includedPath);
    indexingPolicy.setIncludedPaths(includedPaths);
    collectionDefinition.setIndexingPolicy(indexingPolicy);
    

    Untuk informasi selengkapnya, lihat kebijakan pengindeksan Azure Cosmos DB.

Daya Tampung

  • Ukur dan sesuaikan untuk penggunaan unit permintaan per detik yang lebih rendah

    Azure Cosmos DB menawarkan set operasi database yang kaya termasuk kueri relasional dan hierarkis dengan UDF, prosedur tersimpan, dan pemicu – semuanya beroperasi pada dokumen dalam koleksi database. Biaya yang terkait dengan masing-masing operasi ini bervariasi berdasarkan CPU, IO, dan memori yang diperlukan untuk menyelesaikan operasi. Alih-alih memikirkan dan mengelola sumber daya perangkat keras, Anda dapat memikirkan unit permintaan (RU) sebagai ukuran tunggal untuk sumber daya yang diperlukan untuk melakukan berbagai operasi database dan melayani permintaan aplikasi.

    Throughput disediakan berdasarkan jumlah unit permintaan yang ditetapkan untuk setiap kontainer. Konsumsi unit permintaan dievaluasi sebagai tarif per detik. Aplikasi yang melebihi tarif unit permintaan yang disediakan untuk kontainernya akan dibatasi hingga tarifnya turun di bawah tingkat yang disediakan untuk kontainer tersebut. Jika aplikasi Anda memerlukan tingkat throughput yang lebih tinggi, Anda dapat meningkatkan throughput dengan provisi unit permintaan tambahan.

    Kompleksitas suatu kueri memengaruhi jumlah unit permintaan yang digunakan dalam sebuah operasi. Jumlah predikat, sifat predikat, jumlah UDF, dan ukuran set data sumber semuanya memengaruhi biaya operasi kueri.

    Untuk mengukur overhead operasi apa pun (buat, perbarui, atau hapus), periksa header x-ms-request-charge untuk mengukur jumlah unit permintaan yang dikonsumsi oleh operasi ini. Anda juga dapat melihat properti RequestCharge yang setara di ResourceResponse<T> atau FeedResponse<T>.

    Async Java SDK V2 (Maven com.microsoft.azure::azure-cosmosdb)

    ResourceResponse<Document> response = asyncClient.createDocument(collectionLink, documentDefinition, null,
                                                     false).toBlocking.single();
    response.getRequestCharge();
    

    Biaya permintaan yang dikembalikan di header ini merupakan sebagian kecil dari kapasitas pemrosesan yang Anda tentukan. Misalnya, jika Anda memiliki 2000 RU/s yang disediakan, dan jika kueri sebelumnya mengembalikan 1.000 dokumen 1 KB, biaya operasi adalah 1000. Dengan demikian, dalam satu detik server hanya menerima dua permintaan seperti itu sebelum membatasi tarif permintaan selanjutnya. Untuk informasi selengkapnya, lihat Unit permintaan dan kalkulator unit permintaan.

  • Tangani pembatasan laju/laju permintaan yang terlalu tinggi

    Saat klien mencoba untuk melebihi throughput yang dicadangkan untuk sebuah akun, tidak ada penurunan kinerja di server dan tidak ada penggunaan kapasitas throughput di luar tingkat yang dicadangkan. Server akan terlebih dahulu mengakhiri permintaan dengan RequestRateTooLarge (kode status HTTP 429) dan mengembalikan header x-ms-retry-after-ms yang menunjukkan jumlah waktu, dalam milidetik, yang pengguna harus menunggu sebelum mencoba kembali permintaan tersebut.

    HTTP Status 429,
    Status Line: RequestRateTooLarge
    x-ms-retry-after-ms :100
    

    SDK-SDK tersebut secara implisit menangani respons ini, mematuhi header coba-lagi yang ditentukan server, dan mengirim ulang permintaan. Kecuali akun Anda diakses secara bersamaan oleh beberapa klien, percobaan berikutnya akan berhasil.

    Jika Anda memiliki lebih dari satu klien yang secara kumulatif beroperasi secara konsisten di atas tingkat permintaan, jumlah coba lagi default yang saat ini diatur ke 9 secara internal oleh klien mungkin tidak cukup; dalam hal ini, klien melempar DocumentClientException dengan kode status 429 ke aplikasi. Jumlah coba lagi default dapat diubah dengan menggunakan setRetryOptions pada instans ConnectionPolicy. Secara default, DocumentClientException dengan kode status 429 dikembalikan setelah waktu tunggu kumulatif 30 detik jika permintaan terus beroperasi di atas tingkat permintaan. Hal ini terjadi meskipun jumlah percobaan ulang saat ini kurang dari jumlah percobaan ulang maksimal, baik itu default 9 atau nilai yang ditentukan pengguna.

    Meskipun perilaku percobaan ulang otomatis membantu meningkatkan ketahanan dan kegunaan untuk sebagian besar aplikasi, perilaku tersebut mungkin bertentangan saat melakukan tolok ukur performa, terutama saat mengukur latensi. Latensi yang diamati oleh klien akan melonjak jika eksperimen mencapai batas server dan menyebabkan SDK klien melakukan percobaan ulang tanpa pemberitahuan. Untuk menghindari lonjakan latensi selama eksperimen performa, ukur muatan yang dikembalikan oleh setiap operasi dan pastikan bahwa permintaan beroperasi di bawah tingkat permintaan yang telah dipesan. Untuk informasi selengkapnya, lihat Unit permintaan.

  • Mendesain dokumen yang lebih kecil untuk throughput yang lebih tinggi

    Biaya permintaan (biaya pemrosesan permintaan) dari operasi tertentu berkorelasi langsung dengan ukuran dokumen. Operasi pada dokumen besar lebih mahal daripada operasi untuk dokumen kecil.

Langkah selanjutnya

Untuk mempelajari selengkapnya tentang perancangan aplikasi Anda untuk skala dan kinerja tinggi, lihat Pemartisian dan penyekalaan di Azure Cosmos DB.