Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tips Peningkatan Kinerja
Bagian ini menyediakan lima strategi pengoptimalan kinerja untuk Amazon DocumentDB untuk meningkatkan efisiensi aplikasi dan eksekusi kueri.
1. Gunakan $match sebagai Tahap Pertama di Agregation Pipelines
Selalu tempatkan $match sebagai tahap pertama untuk memfilter di pipeline agregasi Anda untuk memaksimalkan kinerja. Amazon DocumentDB akan menggunakan indeks secara efektif saat $match memimpin pipeline, memungkinkan database untuk memfilter data lebih awal dan mengurangi overhead pemrosesan.
// Optimized approach db.orders.aggregate([ { $match: { status: "active", category: "electronics" } }, // Index utilization { $group: { _id: "$category", total: { $sum: "$price" } } }, { $sort: { total: -1 } } ])
Dampak: Pemfilteran awal mengurangi jumlah dokumen yang diproses pada tahap pipeline berikutnya, menghasilkan eksekusi kueri yang lebih cepat dan konsumsi sumber daya yang lebih rendah.
2. Gunakan $project di Agregation Pipeline untuk Meminimalkan Ukuran Data Pipeline
Bawa hanya bidang penting melalui tahapan alur agregasi Anda untuk meminimalkan ukuran data dan meningkatkan kinerja. Gunakan $project secara strategis untuk memasukkan hanya data yang Anda butuhkan.
// Efficient pipeline design db.orders.aggregate([ { $match: { orderDate: { $gte: new Date("2024-01-01") } } }, { $project: { customerId: 1, totalAmount: 1, status: 1 } }, // Only needed fields { $group: { _id: "$customerId", totalSpent: { $sum: "$totalAmount" } } } ])
Dampak: Dokumen yang lebih kecil mengurangi penggunaan memori dan meningkatkan efisiensi pemrosesan pipa, menghasilkan peningkatan kinerja kueri secara keseluruhan.
3. Aktifkan Kompresi Dokumen untuk Biaya Penyimpanan yang Lebih Rendah, I/O Biaya, dan Peningkatan Kinerja Kueri
Aktifkan kompresi dokumen dari grup parameter cluster untuk menurunkan biaya penyimpanan, I/O biaya, dan meningkatkan kinerja kueri. Amazon DocumentDB menyimpan dokumen terkompresi pada disk serta RAM, mengurangi jejak memori dan biaya. I/O
Dampak:
-
Lebih banyak dokumen sesuai dengan memori yang tersedia
-
Akses data lebih cepat dengan pembacaan disk yang dikurangi
-
Biaya penyimpanan yang lebih rendah, I/O biaya, dan peningkatan kinerja kueri
catatan
Amazon DocumentDB tidak mengaktifkan kompresi secara default untuk versi 5.0. Anda dapat mengaktifkan kompresi pada koleksi atau tingkat cluster untuk 5.0 cluster. Gunakan utilitas tinjauan kompresi Amazon DocumentDB untuk menganalisis rasio kompresi untuk koleksi Anda.
Untuk Amazon DocumentDB 8.0, kompresi diaktifkan secara default.
4. Indeks Leverage untuk Kinerja Kueri Optimal
Pastikan kueri Anda selalu menggunakan indeks untuk kinerja yang optimal. Amazon DocumentDB menawarkan beberapa jenis indeks untuk mencocokkan kasus penggunaan yang berbeda.
Prinsip pengindeksan:
-
Setiap kueri harus memanfaatkan indeks yang sesuai
-
Indeks majemuk menawarkan fleksibilitas paling besar dengan mendukung berbagai bentuk kueri dengan satu indeks
-
Merancang indeks untuk mendukung operasi penyortiran dan penyaringan bersama
Memahami Awalan Indeks: Indeks gabungan bekerja melalui awalan indeks - Amazon DocumentDB dapat menggunakan subset kiri-ke-kanan bidang indeks. Misalnya, indeks { category: 1, price: -1, inStock: 1 } membuat awalan yang dapat digunakan ini:
-
{ category: 1 }- Mendukung query penyaringan berdasarkan kategori saja -
{ category: 1, price: -1 }- Mendukung pemfilteran kueri berdasarkan kategori dan harga sorting/filtering -
{ category: 1, price: -1, inStock: 1 }- Mendukung kueri senyawa lengkap
Kueri pada harga, InStock, atau InStock saja tidak akan menggunakan indeks ini karena tidak dimulai dengan bidang pertama (kategori).
Cara Mengidentifikasi Kueri yang Tidak Menggunakan Indeks: Gunakan metode explain () untuk menganalisis eksekusi kueri dan mengidentifikasi kueri yang melakukan pemindaian koleksi alih-alih menggunakan indeks.
Dampak: Kueri tanpa pemanfaatan indeks menghasilkan pemindaian koleksi, menyebabkan peningkatan memori dan tekanan CPU pada instance dan latensi kueri yang meningkat.
5. Optimalkan Model Data Berdasarkan Pola Kueri
Sejajarkan model data Anda dengan cara kueri aplikasi Anda dan memperbarui data. Pemodelan data adalah dasar dari aplikasi Amazon DocumentDB berkinerja tinggi.
Strategi optimasi:
Penyematan untuk Kinerja
-
Menyimpan data terkait bersama-sama ketika sering diakses sebagai satu unit
-
Sematkan dokumen yang selalu diambil bersama
-
Cocokkan untuk hubungan satu-ke-sedikit
// Embedded approach for frequently accessed data { _id: ObjectId("..."), customerName: "John Doe", address: { street: "123 Main St", city: "Seattle", zipCode: "98101" }, recentOrders: [ { orderId: "ORD001", amount: 99.99, date: "2024-01-15" } ] }
Referensi untuk Fleksibilitas
-
Gunakan referensi untuk data besar atau jarang diakses
-
Direkomendasikan untuk hubungan satu-ke-banyak dengan kumpulan data besar
-
Mencegah pembongkahan dokumen dan meningkatkan kinerja pembaruan
Strategi Pemisahan Koleksi
Ketika hanya beberapa bidang dalam dokumen besar yang sering diperbarui, atau ketika data besar yang jarang diakses membengkak dokumen, pertimbangkan untuk membagi koleksi:
-
Simpan bidang yang sering diperbarui dalam koleksi terpisah yang lebih kecil
-
Menyimpan data statis atau jarang diakses di koleksi lain
-
Tautkan mereka dengan referensi saat dibutuhkan
// Before: Large document with mixed access patterns { _id: ObjectId("..."), productId: "PROD123", name: "Wireless Headphones", // Frequently accessed price: 99.99, // Frequently accessed inventory: 45, // Updated frequently lastSold: "2024-01-15", // Updated frequently detailedSpecs: { /* large object */ }, // Infrequently accessed manualPDF: "base64...", // Large, rarely accessed reviewHistory: [/* large array */] // Infrequently accessed } // After: Split into collections based on access patterns // products collection (frequently accessed data) { _id: ObjectId("..."), productId: "PROD123", name: "Wireless Headphones", price: 99.99, inventory: 45, lastSold: "2024-01-15" } // product_details collection (infrequently accessed data) { _id: ObjectId("..."), productId: "PROD123", // Reference to products collection detailedSpecs: { /* large object */ }, manualPDF: "base64...", reviewHistory: [/* large array */] }
Perolehan kinerja: Dokumen yang lebih kecil berarti pembaruan yang lebih cepat, penggunaan memori berkurang, dan efisiensi cache yang lebih baik.
Dampak: Pemodelan data yang tidak efisien menghasilkan kueri suboptimal, peningkatan ukuran dokumen, dan peningkatan penggunaan memori, yang menyebabkan kinerja aplikasi menurun dan biaya operasional yang lebih tinggi.